graphql Samouczek
Rozpoczęcie pracy z graphql
Szukaj…
Uwagi
GraphQL to język zapytań dla interfejsów API i środowisko wykonawcze do wypełniania tych zapytań przy użyciu istniejących danych. GraphQL zapewnia pełny i zrozumiały opis danych w interfejsie API, daje klientom możliwość zapytania o dokładnie to, czego potrzebują i nic więcej, ułatwia ewolucję interfejsów API w czasie oraz udostępnia zaawansowane narzędzia programistyczne.
Kiedy powinienem używać GraphQL?
GraphQL ma być zewnętrznym interfejsem API HTTP dla dowolnego rodzaju aplikacji, ale jest najbardziej wydajny, gdy dane są znormalizowane za pomocą wysoce połączonych kolekcji | Tabele | Węzły. Język zapytań GraphQL (GQL) został zaprojektowany do wyświetlania połączonych danych w bardzo intuicyjny i elastyczny sposób.
Realizacje
Sam GraphQL jest specyfikacją i jest implementowany przez wiele różnych języków programowania. Są to najpopularniejsze obsługiwane języki
- GraphQL.js
- grafil-rubin
- Grafen (Python)
- Sangria (Scala)
- graphql-java
- graphql-clj (Clojure)
- graphql-go
- graphql-php
- graphql-dotnet (C # / .Net)
- absynt (eliksir)
Biblioteki klienta
Uruchamianie zapytań po stronie klienta można wykonać za pomocą dowolnego klienta HTTP, ale biblioteki po stronie klienta mogą być bardzo korzystne.
Narzędzia deweloperskie
- graphiql / ˈɡrafək (ə) l / - Interaktywne IDE GraphQL w przeglądarce.
- libgraphqlparser - Analizator składni języka zapytań GraphQL w C ++ z interfejsami API C i C ++.
- Usługa językowa GraphQL - interfejs do budowy usług językowych GraphQL dla IDE (diagnostyka, autouzupełnianie itp.).
Wersje
Wersja | Data wydania |
---|---|
v0.5.0 | 08.04.2016 |
v0.6.0 | 2016-05-10 |
v0.6.1 | 07.07.2016 |
v0.6.2 | 2016-07-21 |
v0.7.0 | 26.08.2016 |
v0.7.1 | 29.09.2016 |
v0.7.2 | 2016-10-10 |
v0.8.0 | 2016-11-10 |
v0.8.1 | 11.11.2016 |
v0.8.2 | 16.11.2016 |
Instalacja i wdrożenie serwera
GraphQL.js
GraphQL.js to implementacja referencyjna JavaScript dla GraphQL. Możesz zainstalować go za pomocą npm:
- Zainicjuj npm w swoim projekcie, jeśli jeszcze tego nie zrobiłeś:
npm init
- Zainstaluj GraphQL.js z npm:
npm install --save graphql
Przykładowy serwer
var { graphql, buildSchema } = require('graphql');
// Construct a schema, using GraphQL schema language
var schema = buildSchema(`
type Query {
hello: String
}
`);
// The root provides a resolver function for each API endpoint
var root = {
hello: () => {
return 'Hello world!';
},
};
// Run the GraphQL query '{ hello }' and print out the response
graphql(schema, '{ hello }', root).then((response) => {
console.log(response);
});
Alternatywy oprogramowania pośredniego serwera
- Oprogramowanie pośrednie Express GraphQL
- Oprogramowanie pośrednie Hapi GraphQL
- Oprogramowanie pośrednie Koa GraphQL
GraphQL Query Language (GQL)
Zamiast definiować punkty końcowe URL dla każdego zasobu danych, w GraphQL definiujesz pojedynczy punkt końcowy, który akceptuje zapytania GraphQL. W przeciwieństwie do tradycyjnych języków zapytań do baz danych, język zapytań GraphQL (GQL) jest rzutowaniem danych zwracanych przez zapytanie na poziomie głównym. Schemat GraphQL określi model danych oraz zapytania i mutacje na poziomie głównym. GQL wykonuje te zapytania i określa, jakie dane zwrócić.
Zapytanie do wszystkich tytułów filmowych ze schematu Star Wars
Pytanie do mieszkańców planety do filmu Gwiezdne wojny „Nowa nadzieja”
Zwróć uwagę, jak kwerenda główna film()
przyjmuje parametr id filmu „Nowa nadzieja”, a projekcja z GQL zwraca tytuł, planety połączone z filmem, a następnie nazwy rezydentów planet. Zajrzyj na stronę Star Wars GraphiQL, aby eksperymentować z zapytaniami w GraphQL.
Definicja schematu
W GraphQL schemat definiuje kwerendy wykonania root i mutacje, a także typy danych.
Typ obiektu schematu
Typ Person
ma dwa pola, jedno jest standardowym typem skalarnym, a drugie reprezentuje związek z listą innych typów osób, które są „przyjaciółmi”. Łączenie innych typów sprawia, że GraphQL jest tak potężny. Teraz w GraphQL Query Language (GQL) klient może przechodzić przez wykres znajomych bez dodatkowego kodu lub zaawansowanych zapytań.
type Person {
id: ID
name: String
friends: [Person]
}
Zapytanie o schemat
Zapytanie o person
wyszukuje pojedynczą osobę według jego identyfikatora. Jest to punkt wejścia do danych dla klientów korzystających z GQL.
type Query {
person(id: ID!): Person
}
Zapytanie Przyjaciela przyjaciela Nicka
Teraz, gdy mamy typ osoby i kwerendę użytkownika, możemy wyszukać osobę i dowolną liczbę stopni separacji w sieci przyjaciół tej osoby.
query {
person(id: 'nick'){
id
name
friends{
id
name
friends{
id
name
friends{
id
name
}
}
}
}
}