Er bestaan veel open-source architecturale standaarden voor het bouwen en distribueren van applicaties. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) en GraphQL API's zijn het populairst.
RESTful API's zijn de meest gebruikte API-architectuurstandaard. Als je complexe RESTful API's met veel eindpunten hebt geschreven, heb je je waarschijnlijk gerealiseerd hoe ingewikkeld ze kunnen zijn. Dit geldt met name als er slechts kleine verschillen zijn tussen de eindpunten.
U kunt ook problemen tegenkomen bij het ophalen van gegevens, aangezien RESTful API's niet flexibel genoeg zijn om specifieke gegevens te selecteren. GraphQL lost deze problemen van RESTful API's op.
Wat is GraphQL?
GraphQL (Graph Query Language) is een querytaal en runtime voor het bouwen van API's. In tegenstelling tot REST API's met veel eindpunten voor het consumeren van gegevens, hebben GraphQL API's één ingangspunt. U kunt specifieke gegevens ophalen door deze in query's te beschrijven.
De GraphQL-specificatie definieert de querytaal en hoe GraphQL-servers werken. U kunt GraphQL API's bouwen en gebruiken in server-side talen van Python tot javascript, en elke taal die HTTP ondersteunt.
Meta bouwde GraphQL in 2012 als alternatief voor REST voor het bouwen op HTTP. Ze brachten GraphQL uit als open-sourcestandaard in 2015. Tegenwoordig houdt de GraphQL-stichting toezicht op de ontwikkeling van de GraphQL-specificatie.
GraphQL is vrij nieuw, met een lage acceptatie, en er zijn verborgen kosten verbonden aan het gebruik ervan. Het bouwen van GraphQL API's kan onnodig complex zijn, vooral voor kleine projecten met een paar endpoints.
Ook retourneren alle GraphQL-verzoeken uiteindelijk een statuscode van 200, ongeacht de status van het verzoek.
Hoe werkt GraphQL?
in tegenstelling tot REST, dat resourcegericht is, vereist GraphQL dat u over gegevens nadenkt als een grafiek om met gegevens om te gaan. U kunt de structuur van de gegevens specificeren en de specificatie biedt een robuuste query-interface voor interactie met de API via HTTP. U kunt verschillende functies gebruiken, afhankelijk van de GraphQL-pakket of -bibliotheek u kiest om te gebruiken.
GraphQL-schema's bevatten objecttypen die het opvraagbare object en de beschikbare velden definiëren. Bij API-query's en -mutaties valideert het GraphQL-pakket query's en voert het de query's uit op basis van de gespecificeerde handlerfuncties (resolvers).
Waarom zou u GraphQL gebruiken?
REST is een gebruiksvriendelijke standaard en de meeste programmeertalen hebben tools om snel RESTful API's te bouwen. Er zijn echter veel problemen met het bouwen en gebruiken van RESTful API's.
Hier zijn enkele van de problemen met REST waardoor ontwikkelaars voor sommige use-cases de voorkeur geven aan GraphQL.
Inefficiënt ophalen van gegevens
RESTful API's geven gegevens door op basis van de specificatie van het eindpunt. Ze zijn niet flexibel genoeg om gegevens op te halen die verder gaan dan wat hard is gecodeerd in de handlerfunctie van het eindpunt.
Stel dat een eindpunt een lijst met gegevens bij aanroep retourneert en dat u waarden of criteria voor velden moet opgeven. In dat geval moet de ontwikkelaar een eindpunt maken en de bedrijfslogica definiëren om de gegevens te retourneren. U kunt de waardevolle bron handmatig ontleden, wat uiteindelijk meer tijd kost.
GraphQL lost het probleem van inefficiënt ophalen van gegevens op, aangezien u API's kunt opvragen om gegevens flexibel te retourneren op basis van criteria en specificaties.
GraphQL API's zijn interactief; u kunt de gegevens die u nodig heeft specificeren in een gemakkelijk leesbare syntaxis.
{
gebruiker (waar: {leeftijd: {_eq: "89"}}) {
naam
school(waar: {in leven: {_eq: waar}}) {
bio
nationaliteit
}
}
}
De bovenstaande GraphQL-query vraagt a gebruiker schema voor ingangen waar de leeftijd veld is 89. De query heeft een ingesloten query voor vermeldingen waarbij de in leven veld evalueert WAAR. Het retourneert de velden naam, bio en nationaliteit uit het schema.
Snelle ontwikkeling
Het bouwen en gebruiken van GraphQL API's is eenvoudiger dan het gebruik van REST, vooral naarmate de projectomvang toeneemt. Tijdens de ontwikkelingsfase hoeft u niet zoveel routes en handlerfuncties te ontwikkelen als bij het ontwikkelen van RESTful API's. Het consumeren van GraphQL API's is niet zo vervelend als RESTful API's.
In REST geven verschillende eindpunten toegang tot verschillende bronnen, in tegenstelling tot GraphQL, waar er één eindpunt is. Dit levert flexibiliteit en prestaties op, en query's kunnen verschillende resolverfuncties aanroepen.
De GraphQL-schemadefinitietaal
De GraphQL Schema Definition Language (SDL) specificeert de schema's voor GraphQL-services.
De GraphQL SDL-syntaxis is gemakkelijk te lezen en te begrijpen. U specificeert de structuur van uw schema in een bestand met de .graphql of .graphqls verlenging.
type Menselijk {
naam: Snaar!
leeftijd: Int!
}invoer AddHuman {
naam: Snaar!
leeftijd: Int!
}type Mutatie {
CreateHuman (invoer: AddHuman!): Mens!
DeleteHuman (id: Int!): Snaar!
UpdateHuman (id: Int!): Snaar!
}
type Vraag {
GetHuman (id: Int!): Mens!
GetHumans: [Menselijk!]!
}
De bovenstaande GraphQL-code is het schema voor een GraphQL API die de structuur van de API voor verzoeken definieert. Het schema definieert de CRUD-functionaliteit voor de API.
Aan de clientzijde kan de client op basis van de structuur van het schema en de gegevens of werking van de client een vraag (GET of DELETE in REST) of een mutatie (PUT of POST).
Hier is een voorbeeld van het opvragen van de Menselijk schema.
vraag Mens {
naam
leeftijd
}
De bovenstaande query zou de menselijke schema's retourneren naam En leeftijd veld gegevens.
GraphQL-mutaties hebben een vrij andere syntaxis in tegenstelling tot query's. Hier is een voorbeeld van een mutatiebewerking op de Menselijk schema.
mutatie {
CreateHuman (invoer:{ naam:"man", leeftijd: 1000000000000000,}) {
naam
leeftijd
}
}
De mutatiecode wordt ingevoerd naam En leeftijd velden naar de klant en retourneert de gegevens van de velden.
U hebt een gegevensopslag nodig voor persistentie wanneer u uw GraphQL API bouwt. Net als REST en de meeste op HTTP gebaseerde webarchitectuur, is GraphQL stateless en kunt u elke datastore of database voor uw app gebruiken.
Een GraphQL-API bouwen
GraphQL is een specificatie en u kunt GraphQL bouwen in de meest populaire server-side talen. Je zult een bibliotheek moeten vinden met de functies die je nodig hebt voor je project.
Wanneer u een GraphQL-bibliotheek kiest, wilt u een feature-rijke bibliotheek gebruiken die alle GraphQL-typen en -bewerkingen ondersteunt. De meeste bibliotheken hanteren een schema-eerst- of een code-eerst-benadering. In het eerste definieert u een GraphQL-schema en genereert de bibliotheek resolvers en boilerplate-code. Voor het laatste codeer je de resolvers hard zonder een schema te definiëren.
GraphQL wint aan populariteit
Sinds de start van GraphQL hebben ontwikkelaars en bedrijven tools uitgebracht om het gebruik ervan te vereenvoudigen. Deze kunnen de ontwikkelingstijd voor kleinere en middelgrote projecten verkorten.
U kunt open-source GraphQL-clients, de GraphQL-documentatie en de specificatie ervan bekijken voor meer informatie.