graphql Handledning
Komma igång med graphql
Sök…
Anmärkningar
GraphQL är ett frågespråk för API: er och en körtid för att uppfylla dessa frågor med dina befintliga data. GraphQL ger en fullständig och förståelig beskrivning av data i ditt API, ger kunderna kraften att fråga exakt vad de behöver och inget mer, gör det lättare att utveckla API: er över tid och möjliggör kraftfulla utvecklarverktyg.
När ska jag använda GraphQL?
GraphQL är avsett att vara det utåtvända HTTP-API för alla typer av applikationer, men det är mest kraftfullt när data normaliseras med mycket sammankopplade samlingar | Tabeller | Noder. GraphQL Query Language (GQL) är utformat för att projicera sammankopplade data på ett mycket intuitivt och flexibelt sätt.
implementeringar
GraphQL i sig är en Spec och implementeras av ett antal olika programmeringsspråk. Dessa är de mest populära språk som stöds
- GraphQL.js
- graphql-ruby
- Grafen (Python)
- Sangria (Scala)
- graphql-java
- graphql-clj (Clojure)
- graphql-go
- graphql-php
- graphql-dotnet (C # /. Net)
- absint (Elixir)
Klientbibliotek
Att köra frågor från klientsidan kan göras med alla HTTP-klienter men klientsidobibliotek kan vara mycket fördelaktiga.
Dev-verktyg
- grafiql / ˈɡrafək (ə) l / - En interaktiv webbläsare GraphQL IDE.
- libgraphqlparser - En grafisk parser för grafisk frågeformulär i C ++ med C och C ++ API: er.
- GraphQL Language Service - Ett gränssnitt för att bygga GraphQL-språktjänster för IDE: er (diagnostik, autofullständig etc.).
versioner
Version | Utgivningsdatum |
---|---|
v0.5.0 | 2016/04/08 |
v0.6.0 | 2016/05/10 |
v0.6.1 | 2016/07/07 |
v0.6.2 | 2016/07/21 |
v0.7.0 | 2016/08/26 |
v0.7.1 | 2016/09/29 |
v0.7.2 | 2016/10/10 |
v0.8.0 | 2016/11/10 |
v0.8.1 | 2016/11/11 |
v0.8.2 | 2016/11/16 |
Serverinstallation och implementering
GraphQL.js
GraphQL.js är en JavaScript-referensimplementering för GraphQL. Du kan installera det via npm:
- Initiera npm i ditt projekt om du inte redan har gjort det:
npm init
- Installera GraphQL.js från npm:
npm install --save graphql
Exempel Server
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);
});
Server Middleware-alternativ
GraphQL Query Language (GQL)
I stället för att definiera URL-slutpunkter för varje dataresurs definierar du i GraphQL en enda slutpunkt som accepterar GraphQL-frågor. Till skillnad från traditionella databasfrågespråk är GraphQL Query Language (GQL) en projicering av data som returneras av en rotnivåfråga. GraphQL-schemat definierar datamodellen och rotnivåfrågor och mutationer. GQL kör dessa frågor och definierar vilka data som ska returneras.
Fråga för alla filmtitlar från Star Wars Schema
Fråga för Planet Residents till Star Wars-filmen "Ett nytt hopp"
Lägg märke till hur rotfrågefilmen film()
tar in ID-parametern för filmen "Ett nytt hopp" och projektionen från GQL returnerar titeln, planeter som är anslutna till filmen och sedan bosatta namn på planeterna. Kolla in Star Wars GraphiQL- webbplatsen för att experimentera med frågeställningar i GraphQL.
Schema Definition
I GraphQL definierar schemat root-exekveringsfrågor och mutationer samt typerna för dina data.
Schemaobjekttyp
Person
har två fält, ett är en standard skalartyp och den andra representerar en relation till en lista med andra persontyper som är "vänner". Att länka andra typer är det som gör GraphQL så kraftfull. Nu i GraphQL Query Language (GQL) kan klienten korsa vännergrafen utan ytterligare kod eller avancerad fråga.
type Person {
id: ID
name: String
friends: [Person]
}
Schemafråga
Den person
frågan slår upp en enda person genom sin id. Detta är ingångspunkten för dina data för klienter som använder GQL.
type Query {
person(id: ID!): Person
}
Fråga Nick's Friend's Friend's Friends
Nu när vi har en persontyp och en personrotsfråga kan vi slå upp en person och så många grad av separering vi vill ha i personens vänner nätverk.
query {
person(id: 'nick'){
id
name
friends{
id
name
friends{
id
name
friends{
id
name
}
}
}
}
}