Małe, jednofunkcyjne procesy, które łączymy, aby tworzyć aplikacje w architekturze zorientowanej na usługi, to dzisiaj najmodniejszy sposób budowania backendów (choć nie zawsze najmądrzejszy). Mówi się, że mikrousługi zapewniają wyższą skalowalność i ułatwiają rozwój, ale łatwo się już po pierwszym projekcie przekonać, że nieuniknioną ceną tego wszystkiego jest dodatkowa złożoność po stronie frontendu aplikacji. Ale wcale tak być nie musi. Najnowsza trzecia wersja restQL, języka zapytań dla mikrousług, pozwala znacząco uprościć frontendy oparte o takie modne backendy.
Opracowany przez B2W, największą firmę e-commerce w Ameryce Łacińskiej, restQL został stworzony w celu uniknięcia pewnych ograniczeń bardziej znanych frameworków do przeszukiwania danych, takich jak GraphQL. Od początku udostępniony na wolnej licencji MIT restQL zmniejsza złożoność zarządzania wywołaniami do wielu mikrousług, wykorzystując natywne buforowanie w przeglądarce dzięki bazowaniu na standardowych wywołaniach HTTP. Jest też dostępny dla każdego klienta, który obsługuje połączenia REST przez HTTP. Można z niego swobodnie korzystać w aplikacjach mobilnych napisanych w językach Swift czy Java/Kotlin.
restQL pozwalał zawsze na automatyczne równoległe wywoływania do oddzielnych zasobów, a teraz w najnowszej wersji dzięki nowemu operatorowi agregacji in, umożliwia otrzymanie odpowiedzi scalonej w uprzednio ustalony sposób.
Wcześniejsze wersje restQL obsługiwały tylko odpytywanie danych przy użyciu słowa kluczowego, co było zamieniane na żądanie HTTP GET. Wersja 3 dodaje standardowy zestaw metod HTTP dla operacji CRUD, w tym POST, PUT i DELETE – wykorzystuje się tu odpowiednio słowa kluczowe to, into oraz delete.
restQL v3 zapewnia zwiększoną niezawodność serwera stawianego między klientami a interfejsami programowania poszczególnych mikrousług. Może on teraz samodzielnie odciążać przeciążone komponenty, według zadanych w konfiguracji kryteriów. Jeśli wykryte zostanie osiągnięcie ustalonego progu opóźnień, niektóre wywołania otrzymają informację o braku pamięci masowej (HTTP 507), tak aby inne wywołania mogły zostać pomyślnie wykonane.
Oczywiście aplikacja musi mieć jakoś oprogramowane powtórne wypróbowywanie nieudanych odpowiedzi, aby taki wzorzec zwracania poprawnie działał. W tym celu twórcy restQL zalecają korzystanie z siatek usług (service meshes), dobrze współpracujących z nich dzięki wykorzystaniu protokołu HTTP i interfejsu REST.
Oprócz tych nowości należy spodziewać się nawet dwukrotnego zwiększenia wydajności, oraz co dziś szczególnie ważne, wydania pakietu npm dla aplikacji w node.js. Wszystkie niezbędne informacje i dokumentację znaleźć można na stronie projektu na GitHubie.