GraphQL es un lenguaje de consulta para APIs y un entorno de ejecución para responder consultas con tus datos existentes.
Consultas (Queries)
Consulta básica y respuesta JSON
{ status }
JSON Response:
{
"data": {
"status": "available"
}
}
Objetos anidados
{
hero {
name
height
}
}
Listas
{
friends {
name
}
}
Argumentos
{
hero(id: "1000") {
id
name
}
}
Alias
{
luke: hero(id: "1000") {
name
}
han: hero(id: "1001") {
name
}
}
Nombres de operaciones y variables
Query Definition:
query FindHero($id: String!) {
hero(id: $id) {
name
}
}
Variables Payload (JSON):
{
"id": "1000"
}
Mutaciones (Mutations)
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
Fragmentos en línea (Inline Fragments)
{
search(q: "john") {
id
... on User {
name
}
... on Comment {
body
author {
name
}
}
}
}
GraphQL sobre HTTP
Petición GET
fetch('https://api.example.com/graphql?query={me{name}}')
Petición POST
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
variables: { id: '1000' }
})
})
Lenguaje de definición de esquema (SDL)
Tipos básicos
type Query {
me: User
users(limit: Int): [User]
}
type User {
id: ID!
name: String
}
Tipos escalares incorporados
| Escalar | Descripción |
|---|---|
Int |
Entero de 32 bits con signo |
Float |
Número de coma flotante de doble precisión |
String |
Secuencia de caracteres UTF-8 |
Boolean |
Valor booleano true o false |
ID |
Identificador único serializado como string |
Palabras clave de definición de tipos
| Palabra clave | Descripción |
|---|---|
type |
Tipo de objeto que representa un conjunto de campos |
scalar |
Tipo escalar primitivo personalizado |
interface |
Tipo abstracto que define campos obligatorios |
union |
Tipo abstracto que agrupa distintos tipos de objeto |
enum |
Enumeración de valores de cadena discretos permitidos |
input |
Objeto complejo pasado como argumento en consultas o mutaciones |
Modificadores de tipo
| Modificador | Descripción |
|---|---|
String |
Cadena que permite nulos (Nullable) |
String! |
Cadena obligatoria no nula (Non-nullable) |
[String] |
Lista que permite nulos con cadenas que permiten nulos |
[String]! |
Lista obligatoria con cadenas que permiten nulos |
[String!]! |
Lista obligatoria con cadenas obligatorias |
Interfaces
interface Entity {
id: ID!
}
type User implements Entity {
id: ID!
name: String
}
Enumeraciones (Enums)
enum Direction {
NORTH
EAST
SOUTH
WEST
}
Uniones (Unions)
union SearchResult = Human | Droid | Starship
type Query {
search(text: String): [SearchResult]
}