graphql Zelfstudie
Aan de slag met graphql
Zoeken…
Opmerkingen
GraphQL is een querytaal voor API's en een runtime voor het uitvoeren van die vragen met uw bestaande gegevens. GraphQL biedt een complete en begrijpelijke beschrijving van de gegevens in uw API, geeft klanten de mogelijkheid om precies te vragen wat ze nodig hebben en niets meer, maakt het eenvoudiger om API's in de loop van de tijd te evolueren en maakt krachtige ontwikkelaarstools mogelijk.
Wanneer moet ik GraphQL gebruiken?
GraphQL is bedoeld als de naar buiten gerichte HTTP API voor elke soort toepassing, maar het is het krachtigst wanneer de gegevens worden genormaliseerd met sterk onderling verbonden collecties | tabellen | knooppunten. De GraphQL Query Language (GQL) is ontworpen om onderling verbonden gegevens op een zeer intuïtieve en flexibele manier te projecteren.
implementaties
GraphQL zelf is een Spec en wordt geïmplementeerd door een aantal verschillende programmeertalen. Dit zijn de meest populaire ondersteunde talen
- GraphQL.js
- graphql-ruby
- Grafeen (Python)
- Sangria (Scala)
- graphql-java
- graphql-clj (Clojure)
- graphql-go
- graphql-php
- graphql-dotnet (C # / .Net)
- absint (elixer)
Klantbibliotheken
Het uitvoeren van query's vanaf de client kan worden gedaan met elke HTTP-client, maar client-side bibliotheken kunnen zeer nuttig zijn.
Dev Tools
- graphiql / ˈɡrafək (ə) l / - Een interactieve GraphQL IDE in de browser.
- libgraphqlparser - Een GraphQL-querytaalparser in C ++ met C- en C ++-API's.
- GraphQL Language Service - Een interface voor het bouwen van GraphQL-taalservices voor IDE's (diagnostiek, automatisch aanvullen, enz.).
versies
Versie | Publicatiedatum |
---|---|
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 |
versie 0.8.0 | 2016/11/10 |
v0.8.1 | 2016/11/11 |
v0.8.2 | 2016/11/16 |
Serverinstallatie en -implementatie
GraphQL.js
GraphQL.js is een JavaScript-referentie-implementatie voor GraphQL. Je kunt het installeren via npm:
- Initialiseer npm in uw project als u dit nog niet hebt gedaan:
npm init
- Installeer GraphQL.js vanaf npm:
npm install --save graphql
Voorbeeldserver
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);
});
Alternatieven voor servermiddleware
GraphQL Query Language (GQL)
In plaats van URL-eindpunten voor elke gegevensbron te definiëren, definieert u in GraphQL een enkel eindpunt dat GraphQL-query's accepteert. In tegenstelling tot traditionele databasequery-talen, is GraphQL Query Language (GQL) een projectie van gegevens die worden geretourneerd door een query op hoofdniveau. Het GraphQL-schema definieert het datamodel en query's en mutaties op hoofdniveau. GQL voert deze query's uit en bepaalt welke gegevens moeten worden geretourneerd.
Query voor alle filmtitels uit Star Wars Schema
Query for Planet Residents to Star Wars-film "A New Hope"
Merk op hoe de root-query film()
de parameter id van de film "A New Hope" aanneemt en de projectie van GQL de titel retourneert, planeten die zijn verbonden met de film en vervolgens de namen van de planeten. Bekijk de Star Wars GraphiQL- site om te experimenteren met query's in GraphQL.
Schemadefinitie
In GraphQL definieert het schema de rootuitvoeringsquery 's en -mutaties en de typen voor uw gegevens.
Schema Objecttype
Het Person
heeft twee velden, één is een standaard Scalar-type en de andere vertegenwoordigt een relatie met een lijst met andere persoonstypes die 'vrienden' zijn. Het koppelen van andere typen maakt GraphQL zo krachtig. Nu in GraphQL Query Language (GQL) kan de client de vriendengrafiek doorlopen zonder extra code of geavanceerde query's.
type Person {
id: ID
name: String
friends: [Person]
}
Schema Query
De zoekopdracht van een person
zoekt een persoon op aan de hand van zijn ID. Dit is het toegangspunt tot uw gegevens voor klanten die GQL gebruiken.
type Query {
person(id: ID!): Person
}
Vraag Nick's Friend's Friends's Friends
Nu we een personentype en een root-vraag hebben, kunnen we een persoon opzoeken en zoveel scheidingsgraden als we willen van het vriendennetwerk van de persoon.
query {
person(id: 'nick'){
id
name
friends{
id
name
friends{
id
name
friends{
id
name
}
}
}
}
}