W artykule omawiam narzędzie Postgraphile (PostGraphQL) służące do generowania API graphql'owego w opaciu o bazę danych POSTGRESQL.
Pracując w zespole gdzie prace są od początku do końca dokładnie zaplanowane, a każde kolejne funkcjonalności dodawane są według ustalonego harmonogramu problem rozjazdu prac frontowych z backendowymi nie powinien występować, a przynajmniej nie powinien powodować istotnych przestojów w pracy. Niestety, niewiele jest idealnych projektów i życie szybko weryfikuje plany przygotowane na starcie projektu. Trudne, a często niemożliwe jest budowanie widoków bez dobrze działającego API. Na ratunek może przyjść Postgraphile, który opisuję poniżej.
W kilku słowach o charakterystyce. Jak wspomniałem, Postgraphile to narzędzie służące do generowania API dla Graphql napisane w Node.js. Współpracuje z bazą Postgresql.
Słysząc o postgraphile pierwszy raz, nieco się zdziwiłem, w jaki sposób takowy generator API jest w stanie rozwiązać problemy, z którymi przyszło się zmierzyć. Zdziwienie wynikało oczywiście z nieznajomości narzędzia i jego możliwości. Kilka testów pokazało, że warto rozważyć Postgraphile przynajmniej w wersji MVP. Odpowiadając na pytanie "po co?" przychodzą mi do głowy 3 powody:
O pierwszym powodzie wspomniałem we wstępie, drugi powód znam z życia. Oczywiście nieco upraszczam sprawę, jednakże wyobraźmy sobie, że backend musi wystawić tylko prosty interfejs np. dla 30 modeli, które są modyfikowane i w pewien sposób zależne od siebie, może okazać się szkoda czasu na pisanie CRUD'ów. Oczywiście są biblioteki czy frameworki, które robią to co Postgraphile, czyli generują API na podstawie modelu, ale postgraphile ma jeszcze co najmniej kilka funkcji, o których piszę, w kolejnej części artykułu.
Z trzecim powodem borykał się chyba każdy.. Nikt nie jest w stanie wyczarować więcej czasu i żadne pieniądze nie wydłużą nam miesiąca.
Przechodząc do najistotniejszej części wpisu, przestawię kilka funkcjonalności, które okazały się bardzo pomocne.
Zakładam, że Node jest zainstalowany oraz serwer Postgres'owy został uruchomiony na standardowym porcie.
Zacznijmy od instalacji i uruchomienia serwera.
$ npm install -g postgraphile
$ postgraphile -c "postgres:///mydb"
W wyniku uruchomienia powyższych komend powinniśmy otrzymać 2 endpointy:
http://localhost:5000/graphql
- api graphql'owe
http://localhost:5000/graphiql
- graphiql do testowania zapytań
Domyślnie istnieje możliwość uzyskania dostępu do pól
PageInfo.startCursor
oraz PageInfo.endCursor
, które są bardzo przydatne do tworzenia paginacji w stylu frameworka Relay.
Poniżej przykład z użyciem parametru after
.
{
myTestQuery(after: "NODE_ID") {
edges {
pageInfo {
endCursor
}
node {
id
updated
created
name
}
}
}
}
W podstawowej wersji istnieje możliwość filtrowania queries po wybranych polach (np. name: "Jon"
).
Jeśli takie filtrowanie jest niewystarczające, można w łatwy sposób rozszerzyć api przez dodanie pluginu do zaawansowanego filtrowania,
który dodaje argument filter
do queries oraz dostarcza kolejne warunki np. większe, mniejsze, w przedziale itp..
Poniższy przykład pokazuje użycie połączonych warunków:
query myTest {
myTest(filter: {
or: [
{ name: { includesInsensitive: "Jon" } }
{ type: { equalTo: "ARTICLE" } }
]
}) {
edges {
node {
name
type
id
}
}
}
}
}
Więcej informacji można znaleźć tutaj.
Pluginy służą dodaniu do podstawowej wersji nowych możliwości, jak wspomniany wcześniej plugin do filtrowania.
Pełną listę pluginów można znaleźć na poniższych stronach:
https://www.graphile.org/postgraphile/plugin-gallery/ https://www.graphile.org/postgraphile/community-plugins/
Na podsumowanie zwrócę uwagę na kilka rzeczy.