SlideShare ist ein Scribd-Unternehmen logo
1 von 72
Downloaden Sie, um offline zu lesen
GraphQl w Magento 2.3 -
wprowadzenie, porównanie
i customowe endpointy
Anna Kurnat
a.kurnat@wearevirtua.com
1. Ewolucja API w Magento
2. REST - rozwiązania problemów
3. GraphQl
a. Czym jest?
b. Zalety i wady
c. Budowa graphQl
d. GraphQl vs REST
e. Customowe grafy
Ewolucja API w Magento
Ewolucja API w Magento
● każda metoda ma swój endpoint
● ACL per endpoint
● sztywna struktura zapytania i otrzymywanych danych
● pobieranie za małej lub za dużej ilości danych
○ jeden request może pobrać dane, które nie są potrzebne
○ wiele requestów koniecznych, aby pobrać konieczne dane
● rozwój frontendu uzależniony od zmian w backendzie
● w Magento 2 cała funkcjonalność dostępna w UI jest pokryta
RESTem
Ewolucja API w Magento
● jeden endpoint
● łączone requesty
● elastyczny schemat danych
● szybszy development
● niezależny rozwój frontu od backendu
● brak konieczności tworzenia service kontraktów + możliwość
wykorzystania istniejących
REST API
REST
SYNCHRONICZNE
ENDPOINTY
ASYNCHRONICZNE
ENDPOINTY
ZWYKŁE BULK
Service Contract
- uniezależnienie frontu i backendu
Lepszy rozdział funkcjonalności
Minimalizacja konfliktów między modułami
Ukryta logika biznesowa z zachowaniem
spójności danych
Lepsza dokumentacja
Trudniejsza implementacja małych
modyfikacji, wymagająca więcej ilości zmian
Service contracts - zestaw
interfejsów wykorzystywanych do
zdefiniowania API
API - zestaw interfejsów, które moduł
udostępnia innym modułom, aby
mogły korzystać z ich implementacji.
Filtracja
- pobieranie tylko potrzebnych danych
?fields=<field_or_object1>,
<field_or_object2>
Wspierane w:
GET
POST
PUT
Można używać przez
searchCriteria.
Niedostępne na SOAP,
ponieważ SOAP nie
zezwala na częściowe
responsy.
logika ->OR
logika ->AND
logika ->AND OR
Bulk API
- wykonywanie jednego requestu
Customowe endpointy
- rozszerzanie funkcjonalności
Dodanie Interfejsów
Dodanie repository
Dodanie konfiguracji
GraphQl
Czym jest graphQl?
● graphQL - język zapytań dla API
● nowy standard, definiuje jak klient może pobierać dane z servera
● stworzony przez Facebook
● rozwijany jako open source
● w Magento dodany obok SOAP i REST
● cel:
○ optymalizacja zapytań = szybszy front
○ rozdzielenie developmentu frontendu od backendu
● https://graphql.org/
Czym jest graphQl?
GraphQL - język zapytań dla APIs
● Aplikacje pobierają dane z servera, gdzie te dane są przechowywane
w bazie. Za pobieranie danych, które odpowiadałyby
zapotrzebowaniom aplikacji odpowiada API, ono też tworzy w tym
celu interfejs.
● GraphQL często jest mylony z technologią bazodanową. Jednak
GraphQL jest językiem zapytań dla APIs - nie baz danych. Dzięki temu
nie jest zależny od rodzaju ani rozplanowania bazy danych i możemy,
go efektywnie używać w każdym kontekście, gdzie mamy API.
APIQUERY DATA
Zalety:
1. silne typowanie schematów
○ w innych API często brakuje informacji jakie dane są przyjmowane i zwracane
○ brak określonych kontraktów (Magento tworzyło dodatkowo Service Contracts i Data
Contracts dla REST)
○ podpowiedzi w edytorze - automatyczne generowanie dokumentacji
2. ACL per obiekt
3. nie pobieranie za dużej, ani za małej ilości danych
○ pobierane są akurat te dane, które będą potrzebne
○ jeden request, szybsza praca
○ użytkownik określa jak ma być zbudowana odpowiedź z servera
4. szybszy rozwój UI produktu
○ realtime, caching, szybkie zmiany UI (nie trzeba czekać na update endpointów)
○ gotowe biblioteki - Apollo, Relay, Urql
5. łączenie wielu schematów
○ umożliwia zachowanie modularności
6. szeroki ekosystem open-source i wsparcie community
○ przykłady i wsparcie
○ toolsy
Wady:
200 jest zwracane przy każdej odpowiedzi
sami musimy szukać błędów - dobry exception handling
Elementy
SCHEMA MUTATIONSQUERIES SUBSCRIPTIONS
Schema Definition Language (SDL)
Queries
REQUEST
RESPONSE
Queries
REQUEST
RESPONSE
Zagnieżdżanie queries
REQUEST
RESPONSE
Zagnieżdżanie queries
REQUEST
RESPONSE
Mutacje
Subskrypcje
Subskrypcje umożliwiają aplikacji połączenie z serverem w czasie rzeczywistym, aby mogła być
informowana o ważnych eventach na bieżąco.
Gdy klient subskrybuje się do eventu, graphQl zachowa między nimi stałe połączenie
klient-server. Gdy dany event się wydarzy, server wypycha powiązane dane do klienta.
Subskrypcje w przeciwieństwie do queries nie są w cyklu request-response, tylko streamuja
dane z servera do klienta.
Całość
Jak to działa?
Jak to działa?
Jak to działa?
Uwierzytelnianie
graphQl
context
GraphQl vs REST
REST
graphQl
Queries
REST API:
● dane są ładowane z określonego endpointu.
● każdy endpoint ma ściśle określoną strukturę wg. której zwraca informacje
● wymagane dane wejściowe są zakodowane w URLu, z którym klient się łączy
GraphQL:
● zamiast wielu endpointów jest jeden
● zwracana struktura danych jest bardzo elastyczna, klient decyduje jakie dane są mu
aktualnie potrzebne
● klient musi wysłać więcej informacji o tym jakich danych potrzebuje pod postacią query
Resources
VS
Url vs schema
VS
Użycie w Magento 2
Co jest juz zrobione w 2.3?
1. CMS Page
2. CMS Block
3. Store Config
4. Customer
5. Product
6. Category
7. URL Resolver
8. Custom Attribute Metadata
Dostępne moduły
● module-bundle-graph-ql
● module-catalog-graph-ql
● module-catalog-inventory-graph-ql
● module-catalog-url-rewrite-graph-ql
● module-cms-graph-ql
● module-cms-url-rewrite-graph-ql
● module-configurable-product-graph-ql
● module-customer-graph-ql
● module-downloadable-graph-ql
● module-eav-graph-ql
● module-grouped-product-graph-ql
● module-quote-graph-ql
● module-store-graph-ql
● module-swatches-graph-ql
● module-tax-graph-ql
● module-wee-graph-ql
Plany na przyszłość?
1. Mutacje do checkoutu i płatności
2. API dla storefront’u dla checkoutu, orderów, my account
3. Poprawki w dotychczasowych endpointach:
a. cachowanie
b. wydajność zapytań
Gdzie znajdziemy graphQl?
DOMAIN
LAYER
INDEX
TABLES +
INDEXES
Apollo server
Resolver
Resolver
Każde pole w schema GraphQL posiada resolver.
W podstawowej formie GraphQL ma 1 resolver per pole w schema. Każdy resolver wie jak
pobierać dane do swojego pola. Query GraphQL to kolekcja pól, więc aby zebrać dane z każdego
z nich, należy odpalić wszystkie resolvery.
STRUKTURAGRAPHQL ZACHOWANIE
schema resolver
GraphQl module - CMS
● schema
● resolver
● data provider
Schema - CMS
Resolver
Użycie
Użycie
Użycie
Użycie
Schema - catalog
Resolver
Użycie
Mutacje - przykład
Customowe grafy
Tworzenie modułu
Dodawanie schema
Dodawanie modelu resolvera
Sprawdzenie
Które API najlepsze?
TO ZALEŻY…

Weitere ähnliche Inhalte

Ähnlich wie GraphQl w Magento 2.3 - wprowadzenie, porównanie i customowe endpointy

Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLThe Software House
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PROIDEA
 
AnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseAnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseWlodek Bielski
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6The Software House
 
AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)Marcin Baran
 
Wykorzystaj serwisy Azure i skup się na tym, co ważne
Wykorzystaj serwisy Azure i skup się na tym, co ważneWykorzystaj serwisy Azure i skup się na tym, co ważne
Wykorzystaj serwisy Azure i skup się na tym, co ważneKrzysztof Szabelski
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychAnalyticsConf
 
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...Nazar Patrylo
 
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. Future Processing
 
Single Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu RESTSingle Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu REST3camp
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGBart Zaremba
 
Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Grzegorz Bartman
 
Kochetkov mykyta
Kochetkov mykytaKochetkov mykyta
Kochetkov mykytanikkozp
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl 3camp
 
Wjug from java to big data
Wjug   from java to big dataWjug   from java to big data
Wjug from java to big dataPiotr Guzik
 
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-Operator
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-OperatorNowoczesna architektura Systemów IT w OSD na podstawie Energa-Operator
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-OperatorEnerga OPERATOR SA
 

Ähnlich wie GraphQl w Magento 2.3 - wprowadzenie, porównanie i customowe endpointy (20)

Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQLAutomatyzacja tworzenia frontendu z wykorzystaniem GraphQL
Automatyzacja tworzenia frontendu z wykorzystaniem GraphQL
 
WarszawQA_#9
WarszawQA_#9WarszawQA_#9
WarszawQA_#9
 
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
PLNOG16: Nowe założenia dla zbieranie logów, statystyk i alertów, Maciej Kałk...
 
AnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data WarehouseAnalyticsConf : Azure SQL Data Warehouse
AnalyticsConf : Azure SQL Data Warehouse
 
Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6Wprowadzenie do testów wydajnościowych w k6
Wprowadzenie do testów wydajnościowych w k6
 
AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)AngularJS szkolenie wewnętrzne (into)
AngularJS szkolenie wewnętrzne (into)
 
Wykorzystaj serwisy Azure i skup się na tym, co ważne
Wykorzystaj serwisy Azure i skup się na tym, co ważneWykorzystaj serwisy Azure i skup się na tym, co ważne
Wykorzystaj serwisy Azure i skup się na tym, co ważne
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonych
 
MongoDB 2011
MongoDB 2011MongoDB 2011
MongoDB 2011
 
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
integracja danych przesyłanych za pomocą Web-Socketów na przykladie bibliote...
 
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym. ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
ATF – Nietypowe podejście do automatyzacji w systemie rozproszonym.
 
Single Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu RESTSingle Page Applications przy wykorzystaniu REST
Single Page Applications przy wykorzystaniu REST
 
Websites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUGWebsites vs Cloud Services - OLMUG
Websites vs Cloud Services - OLMUG
 
Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015Encje w drupalu - DrupalCamp Wroclaw 2015
Encje w drupalu - DrupalCamp Wroclaw 2015
 
Kochetkov mykyta
Kochetkov mykytaKochetkov mykyta
Kochetkov mykyta
 
Jaki framework wybrać
Jaki framework wybraćJaki framework wybrać
Jaki framework wybrać
 
It od kuchni w nokaut.pl
It od kuchni w nokaut.plIt od kuchni w nokaut.pl
It od kuchni w nokaut.pl
 
IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl IT od kuchni w Nokaut.pl
IT od kuchni w Nokaut.pl
 
Wjug from java to big data
Wjug   from java to big dataWjug   from java to big data
Wjug from java to big data
 
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-Operator
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-OperatorNowoczesna architektura Systemów IT w OSD na podstawie Energa-Operator
Nowoczesna architektura Systemów IT w OSD na podstawie Energa-Operator
 

GraphQl w Magento 2.3 - wprowadzenie, porównanie i customowe endpointy