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

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

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

Star Wars-datafråga för allFilms med en projicering av bara titeln GraphiQL Query

Fråga för Planet Residents till Star Wars-filmen "Ett nytt hopp"

ange bildbeskrivning här GraphiQL Query

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow