Menu
O mnie Kontakt

Zbuduj API w GraphQL z użyciem aplikacji "Hasura" w kilka minut (film, 19 minut)

Artur Chmaro w dzisiejszym nagraniu przedstawił narzędzie o nazwie Hasura, które umożliwia szybkie wystawienie interfejsu GraphQL do już istniejącej bazy danych PostgreSQL. Dzięki Hasurze możemy w błyskawiczny sposób utworzyć API, korzystając z prostych interfejsów graficznych. Żeby z niego skorzystać, wystarczy mieć dostęp do bazy danych. Artur zaprezentował to na przykładzie bazy swojego portalu o grach, co pokazuje użyteczność Hasury w praktycznych zastosowaniach. Wspomniał również o swoimi wcześniejszym nagraniach, które szczegółowo opisują, czym jest GraphQL oraz jak stworzyć serwer GraphQL od podstaw przy użyciu technologii takich jak Node.js.

Artur podkreślił, że Hasura jest narzędziem open source, co jest jej dużą zaletą. Model płatny jest dostępny dla firm potrzebujących dalszego wsparcia, jednak każdy może za darmo hostować Hasurę na swoim serwerze. Artur wskazał na ostatnie wydarzenie - zebrane 10 milionów dolarów w rundzie finansowania przez Hasurę, co świadczy o jej stabilności i potencjale rozwojowym. Użyteczność Hasury sprowadza się do tego, że łączy się z bazą PostgreSQL poprzez endpoint GraphQL, zamieniając złożone zapytania na proste operacje na bazie danych.

Na swoim kanale Artur zapowiada, że w niedalekiej przyszłości wyda filmiki, które pokazują integrację GraphQL z Reactem. Dziś jednak koncentruje się na Hasurze i jej funkcjonalności. Zawiera to możliwość subskrybowania zmiany w danych w czasie rzeczywistym, co może być niezwykle przydatne w dynamicznych aplikacjach webowych. Artur tłumaczy również, jak Hasura radzi sobie z problemem N+1, co czyni ją atrakcyjnym rozwiązaniem dla bardziej skomplikowanych zapytań.

Artur nie tylko omówił działanie Hasury, ale także pokazał, jak za pomocą kilku komend uruchomić to narzędzie lokalnie. W trakcie nagrania wskazał, że Hasura pozwala na tworzenie relacji między różnymi tabelami w bazie, co jest kluczowe przy pracy z danymi. Ważne jest też to, że użytkownicy mogą kontrolować, które tabele mają być wystawione przez GraphQL oraz które dane są dostępne publicznie. Być może dzięki tej elastyczności Hasura staje się coraz bardziej popularna w społeczności deweloperów.

Na koniec Artur zachęca do korzystania z Hasury dla osób pragnących tworzyć własne rozwiązania bazodanowe oraz połączyć ich aplikacje z interfejsem GraphQL. Tematyka GraphQL na jego kanale będzie kontynuowana w przyszłości, a Artur przygotowuje dodatkowe materiały edukacyjne. Warto zaznaczyć, że w momencie pisania tego artykułu filmik miał już 1440 wyświetleń oraz 48 polubień, co wskazuje na rosnące zainteresowanie użytkowników tym nowoczesnym narzędziem. Hasura z pewnością może być użytecznym zasobem dla każdego, kto pragnie znacznie uprościć interakcję z danymi w swoich projektach programistycznych.

Toggle timeline summary

  • 00:00 Wprowadzenie do wideo.
  • 00:02 Przegląd narzędzia o nazwie Hasura.
  • 00:08 Hasura pozwala na szybkie tworzenie interfejsu GraphQL.
  • 00:15 Wymaga bazy danych Postgres.
  • 00:25 Istniejące bazy danych mogą być używane z Hasura.
  • 00:33 Demonstracja Hasura z bazą danych portalu gier.
  • 00:42 Możliwość tworzenia API za pomocą Hasura.
  • 01:08 Wzmianka o poprzednim wideo na temat podstaw GraphQL.
  • 01:22 Nadchodzące filmy dotyczące używania GraphQL z React.
  • 01:44 Dzisiejszy temat nie obejmie podstaw GraphQL ani połączeń z React.
  • 02:05 Hasura jest dostępna na stronie Hasura.io.
  • 02:24 Hasura jest oprogramowaniem open-source i oferuje płatną wersję.
  • 02:37 Hasura pozyskała około 10 milionów dolarów funduszy.
  • 03:03 Osobiste doświadczenia z Hasura i jej możliwości.
  • 03:24 Jak Hasura działa z aplikacjami klienckimi.
  • 03:52 Hasura tłumaczy zapytania GraphQL na zapytania do bazy danych.
  • 04:14 Hasura jest lekka i wydajna.
  • 04:50 Dobrze radzi sobie z złożonymi zapytaniami.
  • 05:25 Hasura wspiera subskrypcje w czasie rzeczywistym.
  • 06:17 Możliwość integracji z zewnętrznymi API.
  • 06:38 Jak uruchomić Hasura lokalnie za pomocą Dockera.
  • 07:40 Dostęp do aplikacji webowej Hasura.
  • 08:02 Tworzenie tabel i wykonywanie zapytań w Hasura.
  • 09:16 Ustalanie relacji między tabelami w Hasura.
  • 10:39 Funkcje zabezpieczeń przez ograniczenie widoczności tabel.
  • 12:49 Wykonywanie równoczesnego pobierania danych za pomocą GraphQL.
  • 14:00 Jak używać punktów końcowych w aplikacjach.
  • 15:05 Konfiguracja uwierzytelniania i autoryzacji w Hasura.
  • 16:18 Konfiguracje webhooków dla zmian w bazie danych.
  • 18:14 Prostota integracji Hasura z bazami danych.
  • 18:43 Zachęta do wypróbowania Hasura w celu nauki GraphQL.
  • 19:09 Prośba o lajki i subskrypcje.

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