graphqlAan de slag met graphql


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

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

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

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

Star Wars-gegevensquery voor allFilms met een projectie van alleen de titel GraphiQL-vraag

Query for Planet Residents to Star Wars-film "A New Hope"

voer hier de afbeeldingsbeschrijving in GraphiQL-vraag

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
        }
      }
    }
  }
}
 

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