Saltar al contenido principal
Version: Siguiente

Integración de GraphQL

Esta guía cubre la integración de aplicaciones cliente con las APIs GraphQL de Lana.

Endpoints de la API

Lana expone dos APIs GraphQL:

APIPropósitoURL típica
API de administraciónOperaciones administrativas: clientes, crédito, contabilidadhttps://admin.your-instance.com/graphql
API de clienteOperaciones de cara al cliente: información de cuenta, estado de facilidadeshttps://app.your-instance.com/graphql

Realizar solicitudes

Con curl

curl -X POST \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "{ customers(first: 10) { edges { node { id email } } } }"}' \
https://admin.your-instance.com/graphql

Con JavaScript (Apollo Client)

npm install @apollo/client graphql
import { ApolloClient, InMemoryCache, createHttpLink } from '@apollo/client';
import { setContext } from '@apollo/client/link/context';

const httpLink = createHttpLink({
uri: 'https://admin.your-instance.com/graphql',
});

const authLink = setContext((_, { headers }) => ({
headers: {
...headers,
authorization: `Bearer ${getAccessToken()}`,
},
}));

const client = new ApolloClient({
link: authLink.concat(httpLink),
cache: new InMemoryCache(),
});

Con Python

import requests

url = "https://admin.your-instance.com/graphql"
headers = {
"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json",
}

query = """
query {
customers(first: 10) {
edges {
node {
id
email
status
}
}
}
}
"""

response = requests.post(url, json={"query": query}, headers=headers)
data = response.json()

Paginación

Las APIs de Lana utilizan paginación basada en cursores siguiendo la especificación Relay:

query GetCustomers($first: Int!, $after: String) {
customers(first: $first, after: $after) {
edges {
cursor
node {
id
email
status
}
}
pageInfo {
hasNextPage
hasPreviousPage
startCursor
endCursor
}
}
}

Para obtener la siguiente página, pasa el valor de endCursor como parámetro after.

Manejo de errores

Los errores de GraphQL se devuelven en el array errors de la respuesta:

{
"data": null,
"errors": [
{
"message": "Not authorized",
"path": ["customerCreate"],
"extensions": {
"code": "FORBIDDEN"
}
}
]
}
Tipo de errorDescripciónAcción
FORBIDDENPermisos insuficientesVerifica las credenciales de la API y el rol
UNAUTHENTICATEDToken inválido o expiradoActualiza el token de acceso
BAD_USER_INPUTDatos de entrada inválidosVerifica los parámetros de la solicitud
INTERNAL_SERVER_ERRORError del servidorReintenta con retroceso exponencial

Encabezados requeridos

Authorization: Bearer <access-token>
Content-Type: application/json

Referencias de la API