Build an API in GraphQL using the 'Hasura' app in a few minutes (video, 19 minutes)
In today’s video, Artur Chmaro introduced a tool called Hasura, which allows for the rapid deployment of a GraphQL interface to an existing PostgreSQL database. Hasura enables users to quickly create an API using simple graphical interfaces, and all that is required is access to a database. Artur showcased this using his gaming portal database, demonstrating Hasura's practical applications. He also referred to his previous videos that detail what GraphQL is and how to build a GraphQL server from scratch using technologies like Node.js.
Artur emphasized that Hasura is an open-source tool, which is a considerable advantage. A paid model is available for companies needing further support, but anyone can host Hasura for free on their server. He highlighted a recent event, where Hasura raised 10 million dollars in funding, which signifies its stability and growth potential. The utility of Hasura boils down to its ability to connect with PostgreSQL databases through a GraphQL endpoint, transforming complex queries into straightforward database operations.
Artur announced that he plans to release videos in the near future demonstrating GraphQL integration with React. However, today he mainly focuses on Hasura and its capabilities, including the option to subscribe to changes in data in real-time, which is incredibly useful for dynamic web applications. He also explained how Hasura effectively addresses the N+1 problem, making it an attractive solution for more complex queries.
Artur not only discussed how Hasura works but also demonstrated how to launch this tool locally with just a few commands. He pointed out that Hasura allows for creating relationships between different tables in the database, which is crucial when working with data. It is important to note that users can control which tables are exposed via GraphQL and which data is publicly accessible. This flexibility may contribute to Hasura's growing popularity within the developer community.
Finally, Artur encourages those interested in building their own database solutions and connecting their applications to a GraphQL interface to leverage Hasura. The topic of GraphQL will continue on his channel, and Artur is preparing additional educational materials. Notably, at the time of writing this article, the video had already garnered 1440 views and 48 likes, indicating a growing interest in this modern tool. Hasura certainly stands out as a valuable resource for anyone aiming to significantly simplify data interactions within their programming projects.
Toggle timeline summary
-
Introduction to the video.
-
Overview of the tool called Hasura.
-
Hasura allows for quick GraphQL interface creation.
-
Requires a Postgres database.
-
Existing databases can be used with Hasura.
-
Demonstration of Hasura with a gaming portal database.
-
Ability to create an API using Hasura.
-
Mention of a previous video on basic GraphQL.
-
Upcoming videos on using GraphQL with React.
-
Today's focus will not cover basic GraphQL or React connections.
-
Hasura is available at Hasura.io.
-
Hasura is open-source and offers a paid version.
-
Hasura raised around 10 million dollars in funding.
-
Personal experience with Hasura and its capabilities.
-
How Hasura works with client applications.
-
Hasura translates GraphQL queries to database queries.
-
Hasura is lightweight and efficient.
-
Handles complex queries well.
-
Hasura supports real-time subscriptions.
-
Integration with external APIs is possible.
-
How to run Hasura locally using Docker.
-
Accessing the Hasura web application.
-
Creating tables and performing queries in Hasura.
-
Establishing relationships between tables in Hasura.
-
Security features by restricting table visibility.
-
Performing simultaneous data retrieval using GraphQL.
-
How to use endpoints in applications.
-
Authentication and authorization setup in Hasura.
-
Webhook configurations for database changes.
-
Simplicity of integrating Hasura with databases.
-
Encouragement to try Hasura for learning GraphQL.
-
Request for likes and subscriptions.
Transcription
Siemanko, witam bardzo serdecznie. W dzisiejszym nagraniu chciałbym opowiedzieć Wam o naprawdę fajnym narzędziu, które nazywa się Hasura. Hasura umożliwia Wam wystawienie bardzo szybko interfejsu do graf QL. Jedyne co musicie mieć to bazę danych Postgresa. I ta baza danych może być już istniejącą bazą danych, więc to jest naprawdę bardzo fajne rozwiązanie. Za chwileczkę Wam pokażę jak Hasura działa na mojej dosyć dużej bazie, mojego portalu o grach, która jest w Postgresie. I po prostu z użyciem Hasury jestem w stanie wyklikać sobie tak naprawdę API, które mam dostępne po graf QL. Oczywiście jeżeli nie wiecie czym jest graf QL to gdzieś tutaj u góry pojawi się link do mojego starego dosyć nagrania, gdy jeszcze robiłem poradnik z tego jak się tworzy serwer graf QL od podstaw. Więc jeżeli chcesz poznać plusy, minusy, czym jest w ogóle graf QL to znajdziesz to w tamtym filmiku. Jeżeli ciekawi Cię jak możesz zrobić graf QL całkowicie samemu z użyciem Expressa, Node.js to oczywiście też mam ten poradnik na swoim kanale, więc możecie sobie to tam przeczytać. Dlaczego w ogóle mówię dzisiaj o Hasurze i o graf QL-u? Ponieważ za parę tygodni na moim kanale wypuszczę parę filmików, w których pokażę jak można się komunikować z graf QL-em z poziomu Reacta, więc dzisiejszy filmik jest tak naprawdę potrzebny po to, żeby pokazać Wam jak prosto możecie postawić sobie takie API graf QL-owe na Waszym komputerze. Więc w dzisiejszym filmiku przede wszystkim nie będzie podstaw, co to jest graf QL i jak z graf QL-a korzystać, to znajdziecie w filmiku, o którym wspomniałem przed chwilą. Nie będzie też połączenia się z graf QL-em z poziomu Reacta, to będzie zupełnie osobny materiał, natomiast dzisiaj chcę się skupić na Hasurze. Więc Hasura jest dostępna na stronie Hasura.io, tutaj możecie sobie przeczytać, że przede wszystkim Hasura jest mega szybka, a po drugie jest dostępna w wersji open source, więc wersja płatna jest oczywiście dostępna, natomiast ona jest dostępna dla jakichś firm, które potrzebują dodatkowego wsparcia od ludzi z Hasury, wtedy możecie za to zapłacić, natomiast jeżeli chcecie sami hostować Hasurę, to jak najbardziej możecie to robić za darmo. I taki dosyć ważny breaking news w zasadzie z wczoraj, że Hasura zebrała w rundzie finansowania około 10 milionów dolarów, więc nie jest to jakaś popierdółka, nie jest to jakiś projekt, który jutro zniknie, tylko najprawdopodobniej Hasura myślę, że wejdzie na stałe do krajobrazu graf QL-owych rozwiązań. Mi się ona bardzo podoba, pierwszy raz usłyszałem o Hasurze około rok temu, jak usłyszałem o Hasurze to wydawało mi się, że jest to zbyt piękne, by to mogło być prawdziwe i by to mogło faktycznie tak działać, natomiast pobawiłem się trochę tym rozwiązaniem, co prawda jeszcze nie na produkcji, ale myślę, że naprawdę jest to spoko rozwiązanie. Więc w skrócie jak działa Hasura? Hasura działa tak, że na kliencie, czyli w naszej web aplikacji reactowej bądź mobilnej aplikacji po prostu łączymy się przez endpoint graf QL-owy wystawiony przez Hasurę, a Hasura w tle przyjmując od nas zapytania graf QL-owe, które na przykład możemy zażyczyć sobie, żeby Hasura nam coś zwróciła albo jeżeli chcemy zmienić dane, to ona po prostu w tle sobie zamienia te nasze zapytania graf QL-owe na optymalne zapytania do naszej bazy danych. Więc tak jak widzicie tutaj na tym diagramiku, ja to może powiększę troszeczkę, tutaj te zapytania graf QL-owe są zamieniane na zapytania do bazy danych. No i jak widzicie Hasura przede wszystkim nie jest jakimś takim opasłym narzędziem, więc bardzo mało zajmuje RAM-u, dosłownie jak widzicie możemy obsługiwać tysiąc zapytań na sekundę z użyciem około 50 MB RAM-u. Oczywiście dodatkowo Wasz postgres, jeżeli stoi na tej samej maszynie, to także zużywa jakiś RAM, ale myślę, że jest to naprawdę bardzo fajne rozwiązanie. Druga rzecz, że Hasura nieźle sobie radzi z takimi bardziej zaawansowanymi zapytaniami, czyli radzi sobie z problemem n plus jeden. W tym moim kursie, o którym mówiłem dotyczącym graf QL-a wspominałem o tym problemie i pokazywałem jak go można rozwiązać, więc zobaczycie, że jeżeli piszecie własny taki chałupniczy serwer graf QL-a, to tak naprawdę musicie to wszystko po prostu obsłużyć i to nie jest wcale takie łatwe. Hasura bardzo dobrze się skaluje, ale o tym już nie będę mówił, bo nie używałem tego na produkcji, nie mam jakichś takich wielkich projektów, gdzie to faktycznie mógłbym sprawdzić. No i kolejna, warto wspomnieć rzecz, Hasura daje nam subskrypcję. Subskrypcja jest to bardzo fajna rzecz nie tylko na tym kanale, bo możecie subskrybować ten kanał, ale subskrypcja to też bardzo fajna rzecz, jeżeli chodzi o graf QL-a, bo możemy po prostu w czasie rzeczywistym czekać, aż coś się zmieni w tym graf QL-u, czyli na przykład możemy wysłać zapytanie o post id np. 1 i założyć sobie subskrypcję na ten post, tak, że jak on się zmieni, to my od razu dostaniemy update, słuchaj, ten post się zmienił. No i co, jeżeli chodzi o graf QL, to graf QL w Hasurze całkiem fajnie się też łączy z innymi zewnętrznymi API, więc tak naprawdę jeżeli chcecie nie tylko korzystać ze swojej bazy danych w Postgresie, ale np. chcecie podpiąć sobie jeszcze jakieś restowe API, to także jest to możliwe. Co prawda o tym nie będzie w dzisiejszym filmiku, ale tak, żebyście wiedzieli, że naprawdę jest to dosyć potężne narzędzie i pozwala ono sporo problemów rozwiązać. I teraz ja Wam pokażę, jak możecie sobie odpalić tą Hasurę lokalnie, jest to bardzo proste. I tutaj sobie wylistuję docker run. I tutaj jak widzicie odpalam sobie tak naprawdę dockera, obraz dockera z Hasury, ostatnią wersję. Tutaj podaję sobie jako URL do swojego Postgresa, który działa mi tutaj lokalnie, czyli mam Postgresa, tutaj mam bazę MMO Development, jest to baza danych mojego portalu o grach. I pospróbujemy się teraz do tej bazy danych podpiąć. Więc, żeby to zrobić, to w zasadzie jedyne, co musimy zrobić, to po prostu odpalić sobie ten skrypt. I w tle wtedy, aha, już go miałem odpalonego, więc dostałem ten błąd, ale generalnie chodzi o to, że w tle teraz działa sobie u mnie dockerek i sobie go odpalimy i zobaczymy, co nam ta Hasura pokaże. Więc tutaj teraz tak naprawdę załadowała nam się aplikacja Hasury webowa, w której możemy sobie przeglądnąć tutaj różne tabele, które mamy w naszej bazie danych. I teraz jak widzicie z poziomu Hasury mogę sobie tutaj tworzyć tabele, ale mogę także korzystać z istniejących już tabel. No i teraz dodałem sobie tutaj tabelę np. comments i teraz mogę sobie napisać tutaj takie zapytanie, które mi zwróci wszystkie komentarze, a nie, przepraszam, komentarzy w tej bazie mam chyba ileś set tysięcy, więc wszystkich nie będę zwracał, bo będzie to długo trwało. Ale zwróćmy sobie np. ostatnie dziesięć komentarzy, znaczy pierwsze dziesięć komentarzy, no i widzicie, że tak naprawdę jedyne, co tutaj zrobiłem, no to uruchomiłem Hasurę, kliknąłem sobie, że chcę śledzić tablicę, tabelę, przepraszam, comments i tak naprawdę Hasura zapewniła mi takie proste rzeczy, że mogę sobie tutaj listować, ale także wprowadzać te komentarze. No i teraz zobaczmy kolejną rzecz, np. sobie wylistujmy tutaj user ID. No i mamy user ID i teraz fajnie by było, gdybyśmy tak jak w prawdziwym GrafQLu swoim mogli sobie także wylistować tutaj jakieś relacje, więc zobaczmy sobie w tabele comments i tutaj widzicie, że ona tak wygląda, trochę to wygląda jak w jakimś phpMyAdminie lub innym narzędziu do podglądu bazy danych. W każdym razie mamy tutaj zakładkę relationship i możemy sobie je skonfigurować. Więc mamy tutaj, mamy tutaj typ relacji object relationship, nazwiemy sobie to, nie wiem, np. users, user, przepraszam i teraz reference schema, reference table i tutaj nie mam tabeli user, więc muszę się cofnąć, za szybko to chciałem zrobić. W każdym razie wejdę tutaj i po prostu sobie zrobię, że chcę śledzić tabelę users i jeżeli ją śledzę, to wtedy to oznacza, że tak naprawdę Hasura umożliwia mi w tym momencie odpytywanie mojej bazy danych postgres z użyciem GrafQLa dla tablicy users. I to jest bardzo ważne, bo tak naprawdę uruchamiając Hasurę możemy ją uruchomić tylko i wyłącznie dla określonych tabel w naszej bazie danych, czyli jeżeli mamy wielką, olbrzymią bazę danych, gdzie mamy jakieś ważne rzeczy, które nie do końca chcemy wystawić przez GrafQL, to oczywiście jest to możliwe, ponieważ w tym miejscu wystawiamy sobie tak naprawdę tabele, które np. mogą być publicznie oglądane przez ludzi, przez GrafQLa, a jeżeli mamy jakieś tutaj tajne rzeczy, jakieś, nie wiem, orders, jakieś notyfikacje, których nie chcemy wystawiać po GrafQLu, no to po prostu nie dodajemy ich tutaj w Hasurze i wtedy te tabele są bezpieczne. Ale wróćmy sobie do przykładu z komentarzami, zróbmy sobie relację do użytkownika i teraz to będzie object relation, relationship user i tutaj będzie reference table users i tu będzie from user id. To są oczywiście kolumny, które mam tutaj w tabeli users, czyli comments, czyli mam id swojego komentu, mam to, co ktoś napisał w danym komentarzu, mam user id, który jest tak naprawdę autorem tego komentarza, no i mamy tu inne rzeczy, jakieś flagi, czy coś zostało zaraportowane, mamy liczbę punktów, czyli np. ile było łapek w górę, mamy liczbę, ile razy komentarz był edytowany. To już są jakieś różne szczegóły. W każdym razie mamy tablicę, mamy tutaj atrybut user id i chcemy go podlinkować do id, do id w tabeli users. No i jeżeli to zapiszemy sobie, to widzimy, że mamy tutaj object relation, czyli mamy relację z komentarzy po atrybucie user id do użytkowników i tam także łączymy id. I w przypadku, gdy jest to taka relacja 1 do 1, no to oczywiście jest to object relationship. W przypadku, gdy mamy więcej jakiejś rzeczy, czyli np. nie wiem, gdybyśmy chcieli wylistować wszystkie łapki w górę, łapki w dół dla tego komentarza, to mamy wtedy array relationship. No i teraz wrócimy sobie tutaj do tego grafki ULA i zobaczymy, czy jesteśmy w stanie skorzystać z tej relacji. Więc sobie napiszemy query, wyciągniemy sobie comments, tutaj zrobimy sobie limit, zrobimy sobie 10 i tu będziemy chcieli wylistować id. Druga rzecz, że będziemy chcieli wylistować content value, czyli zawartość naszego komentarza. No i to widzimy, że to na razie działa. A jeżeli chcemy usera, to będziemy mogli też wyciągnąć informację z usera. Tak naprawdę nic nie musimy tutaj programować, wszystko zostało wyklikane, czyli jest to kolejny dowód tak naprawdę, że my programiści za parę lat nie będziemy za bardzo potrzebni, bo gdybyśmy chcieli to wszystko napisać sobie w Node.js z użyciem ekspresa, to gwarantuję Wam, że troszeczkę czasu byście nad tym spędzili. No i dlaczego to w ogóle pokazuje i dlaczego to jest takie fajne? Przede wszystkim ten endpoint, który tutaj nam Hasura wystawia, możemy użyć w naszej normalnej aplikacji React po to, by pobierać i tworzyć rekordy z użyciem grafki ULA. Więc tak naprawdę możecie sobie wziąć jakąkolwiek swoją istniejącą bazę w Postgresie, postawić ją sobie, połączyć się przez dokera do tej Waszej bazy lokalnie, kliknąć sobie tutaj w kilku miejscach i powystawiać sobie różne zaawansowane endpointy, z których możecie później korzystać w Waszym React. Jak już Wam bardzo się Hasura spodoba i będziecie chcieli z niej korzystać na co dzień do nieco bardziej zawiłych projektów, to oczywiście ja jak najbardziej polecam. Polecam też, żebyście się zapoznali z oficjalnym tutorialem Hasury na ich stronie. Jest on naprawdę dobry, jest sporo tam wideo, w których możecie sobie zobaczyć jak różne rzeczy robić, no i jest też pokazane oczywiście w jaki sposób możecie przeprowadzać autentykację w Hasurze, bo jest to oczywiście ważny temat, bo jakby pamiętajcie o tym, że no jednak mimo, że jest to taka goła baza danych ukryta za tym grafki ULM, no to też musimy mieć warstwę autentykacji, by móc kontrolować, że na przykład użytkownik ma dostęp tylko do rekordów, które on utworzył albo tylko do rekordów, do których tak naprawdę powinien mieć dostęp. To oczywiście też jest możliwe z Hasurą, też możecie sobie skonfigurować autentykację, możecie sobie zrobić autoryzację, czyli sprawdzać czy określony użytkownik może coś tworzyć w waszej bazie, czy nie, więc jest to naprawdę też spoko. Zobaczmy czy omówiłem wszystkie featury, więc tak, oczywiście mamy za darmo zapytania do naszej bazy postgresowej, możemy wykonywać tak zwane mutacje, czyli jakby nie tylko zapytania, ale także zmieniać dane z poziomu grafki ULM, możemy aktualizować istniejące rekordy, możemy kasować istniejące rekordy. Kolejna rzecz to jest to, o czym mówiłem, czyli te subskrypcje, czyli jesteśmy w stanie w czasie rzeczywistym obserwować sobie jakiś rekord w naszej bazie danych i po prostu w ten sposób tworzyć na naszym interfejsie aktualizację. Później tak samo można tutaj skorzystać z autoryzacji gotowej, czyli na przykład Auth0 bez problemu można podpiąć sobie i nie ma potrzeby tak naprawdę robienia tego po swojemu od początku do końca. Kolejna bardzo ważna rzecz to są webhooki, o tym to tylko wspomnę pokrótce, ale w każdym razie chodzi o to, że w momencie, gdy na przykład zmienia się jakiś rekord w bazie danych, to jesteśmy w stanie sobie skonfigurować hooka, który tak naprawdę to zapytanie, na którym wywołujemy tego webhooka prześle do jakiegoś zewnętrznego endpointa, czyli tak naprawdę hasurę można bardzo fajnie łączyć z serwerlessowymi funkcjami, czyli mamy gra w QLA, wrzucamy na przykład nowy komentarz i triggerujemy webhook, bo pojawił się ten nowy komentarz w bazie i na przykład callujemy sobie jakiś zewnętrzny serwis serwerlessowy, który na przykład wysyła powiadomienie e-mail, bo pojawił się nowy komentarz, więc trzeba na przykład poinformować administratora albo autora wpisu, do którego pojawił się ten komentarz, więc jakby hasura, żebyście dobrze to zrozumieli, nie pozwala do końca tworzyć takiego backendu, że wchodzicie i piszecie własne endpointy, tak jak w Strapi czy w jakichś innych web aplikacjach, ale pozwala bardzo fajnie jakby wystawić ten interfejs do pobierania, tworzenia rekordów, aktualizacji, kasowania, ale także łączyć się z jakimś zewnętrznym światem i informować ten zewnętrzny świat o tym, że coś zaszło w naszej bazie danych, co tak naprawdę czyni to rozwiązanie mega potężnym. No i taki killer feature to jest właśnie to, że widzicie ja tutaj z tą swoją bazą danych nic nie zrobiłem, ja po prostu powiedziałem hasurze, że to są moje dane dostępowe do tej bazy danych i koniec. I w zasadzie nie muszę nic więcej robić, nie wiem, robić jakiejś migracji, zmieniać rekordów, nie wiadomo co, po prostu podaję dostęp do swojej bazy danych i koniec. Więc to w zasadzie wszystko, co chciałem Wam dzisiaj powiedzieć na temat hasury. Hasura mega się Wam przyda, jeżeli chcecie poćwiczyć sobie odpytywanie GraphQLa, sprawdzanie subskrypcji, zmienianie rekordów i tak dalej i tak dalej, więc przygotujcie się do tego, jeżeli chcecie się uczyć ze mną GraphQLa, to sobie po prostu ściągnijcie hasurę, postawcie sobie ją lokalnie i w kolejnych odcinkach będziemy sobie robić różne rzeczy związane z GraphQLem. Jeżeli filmik się podobał, będę wdzięczny za komentarz i łapę w górę, tymczasem dziękuję bardzo za uwagę i zapraszam do śledzenia tego kanału. Napisy stworzone przez społeczność Amara.org