Usuari:Gonso96/GraphQL
Versió inicial | Implementacions en Java, JavaScript, Ruby, Scala, i altres. |
---|---|
Versió estable | Octubre 2021[1] |
Equip | |
Creador/s | Meta Platforms |
Desenvolupador(s) | Open source |
Més informació | |
Lloc web | graphql.org |
| |
GraphQL és un llenguatge de consulta i manipulació de dades per a API, que permet al client especificar quines dades necessita ("obtenció declarativa de dades"). Un servidor GraphQL pot obtenir dades de fonts separades en una sola consulta de client i presentar els resultats en un gràfic unificat, [2] de manera que no està lligat a cap base de dades o motor d'emmagatzematge específic.
El motor d'execució de GraphQL és de codi obert.
Història
[modifica]Facebook va començar el desenvolupament de GraphQL el 2012 i el va llançar com a codi obert el 2015. [3] El 2018, GraphQL es va traslladar a una nova fundació creada, sense ànim de lucre, amb el nom GraphQL Foundation, allotjada per la Linux Foundation. [4] [5]
El 9 de febrer de 2018, el llenguatge de definició de l'esquema GraphQL va passar a formar part de l'especificació. [6]
Moltes API públiques populars van adoptar GraphQL com a forma predeterminada d'accedir-hi. Aquestes inclouen les API públiques de Facebook, GitHub, Yelp, Shopify i l'API de Google Directions. [7]
Disseny
[modifica]GraphQL admet la lectura, l'escriptura (mutació) i la subscripció als canvis de dades (actualitzacions en temps real, implementades habitualment amb WebSockets). [8] Es crea un servei GraphQL definint tipus amb camps i, a continuació, proporcionant funcions per resoldre les dades de cada camp. Els tipus i camps formen el que es coneix com a definició d'esquema.
Les funcions que recuperen i relacionen les dades s'anomenen resolutors. [9]
Funcionament de les consultes
Després de validar-se amb l'esquema, el servidor executa una consulta GraphQL. El servidor retorna un resultat que reflecteix la forma de la consulta original, normalment com a JSON . [10]
Sistema de tipus
[modifica]GraphQL es un llenguatge tipat, es a dir, els camps han de tenir un tipus, o format, definit. Hi ha diversos tipus bàsics, anomenats escalars, per a representar coses com cadenes de text, números i identificadors. Es poden crear altres tipus que defineixen els camps i els objectes que el servidor GraphQL pot retornar.
Els camps es defineixen de manera predeterminada com a anul·lables i es pot utilitzar un signe d'exclamació al final per fer que un camp sigui obligatori (no anul·lable).
Un camp es pot definir com a una llista envoltant el tipus del camp entre claudàtors (per exemple, authors: [String]
). [11]
El tipus arrel d'un esquema GraphQL, Query
per defecte, conté tots els camps que es poden consultar.
type Query {
currentUser: User
}
type User {
id: ID!
name: String!
}
Consultes
[modifica]Una consulta GraphQL defineix la forma exacta de les dades que necessita el client.
query CurrentUser {
currentUser {
name
age
}
}
Un cop validades i executades pel servidor GraphQL, les dades es retornen amb la mateixa forma.
{
"currentUser": {
"name": "John Doe"
"age": 23
}
}
mutation CreateUser($name: String!, $age: Int!) {
createUser(userName: $name, age: $age) {
name
age
}
}
Mutacions
[modifica]Una mutació GraphQL permet crear, actualitzar o suprimir dades. Les mutacions generalment contenen variables, que permeten que les dades es passin al servidor des del client. La mutació també defineix la forma de les dades que es retornaran al client un cop finalitzada l'operació.
{
"name": "Han Solo",
"age": 42
}
Les variables es passen com un objecte amb camps que coincideixen amb els noms de variables de la mutació.
{
"data": {
"createUser": {
"name": "Han Solo",
"age": 42
}
}
}
Un cop completada l'operació, el servidor GraphQL retornarà dades que coincideixen amb la forma definida per la mutació.
subscription {
newPerson {
name
age
}
}
Subscripcions
[modifica]GraphQL també admet actualitzacions en directe enviades des del servidor al client en una operació anomenada subscripció. De nou, el client defineix la forma de les dades que necessita cada vegada que es fa una actualització.
- ↑ «GraphQL October 2021 Release Notes». GitHub.
- ↑ «Learn GraphQL Fundamentals with Fullstack Tutorial» (en anglès). www.howtographql.com. [Consulta: 25 abril 2023].
- ↑ «GraphQL: A data query language», 14-09-2015.
- ↑ «Facebook's GraphQL gets its own open-source foundation» (en anglès). .
- ↑ «The Linux Foundation Announces Intent to Form New Foundation to Support GraphQL» (en anglès). , 06-11-2018.
- ↑ «GraphQL SDL included in Github repository». GitHub.
- ↑ «Popular public APIs that use GraphQL». Frontendeng.dev, 25-07-2023.
- ↑ «GraphQL». facebook.github.io. Facebook. Arxivat de l'original el 18 July 2018. [Consulta: 4 juliol 2018].
- ↑ «Introduction to GraphQL». graphql.org. [Consulta: 25 abril 2023].
- ↑ «Execution». graphql.org. [Consulta: 25 abril 2023].
- ↑ «GraphQL». spec.graphql.org. [Consulta: 25 abril 2023].
Quan es fa una mutació a través del servidor GraphQL que actualitza el camp associat, les dades s'envien a tots els clients subscrits en el format configurat mitjançant la subscripció.
Comparació amb altres idiomes de consulta
[modifica]GraphQL no proporciona un llenguatge de consulta de gràfics complet, com ara SPARQL, ni tan sols en dialectes d'SQL que admeten el tancament transitiu . Per exemple, una interfície GraphQL que informa dels pares d'un individu no pot retornar, en una sola consulta, el conjunt de tots els seus avantpassats.
Prova
[modifica]Les API de GraphQL es poden provar manualment o amb eines automatitzades que emeten sol·licituds de GraphQL i verifiquen la correcció dels resultats. També és possible la generació automàtica de proves. [1] Es poden generar noves sol·licituds mitjançant tècniques basades en la cerca a causa d'un esquema tipificat i capacitats d'introspecció. [2]
Algunes de les eines de programari utilitzades per provar les implementacions de GraphQL inclouen Postman, GraphiQL, Apollo Studio, GraphQL Editor i Step CI. [3]
Vegeu també
[modifica]- Consulta per exemple
- Especificació OpenAPI
- Microserveis
Referències
[modifica][[Categoria:Arquitectura de programari]] [[Categoria:Llenguatges de consulta]] [[Categoria:Pàgines amb traduccions sense revisar]]
- ↑ Vargas, D. M.; Blanco, A. F.; Vidaurre, A. C.; Alcocer, J. P. S.; Torres, M. M. 11th International Workshop on Smalltalk Technologies (IWST), 2018, pàg. 1–9.
- ↑ Karlsson, Stefan. «Automatic Property-based Testing of GraphQL APIs». A: 2021 IEEE/ACM International Conference on Automation of Software Test (AST). Madrid, Spain: IEEE, May 2021, p. 1–10. DOI 10.1109/AST52587.2021.00009. ISBN 978-1-6654-3567-3.
- ↑
- GraphQL IDE Monorepo, GraphQL, 2023-04-25, <https://github.com/graphql/graphiql/blob/aeedf7614e422c783f5cfb5e226c5effa46318fd/packages/graphiql/README.md>. Consulta: 25 abril 2023
- «The Apollo Studio Explorer». Apollo Docs. [Consulta: 25 abril 2023].
- «GraphQL Editor API Console». GraphQL Editor Docs. [Consulta: 2 setembre 2023].
- «Testing GraphQL APIs». Step CI Documentation. [Consulta: 8 gener 2023].