Graph Query Language (GraphQL) es un lenguaje y una especificación para interactuar con las API de GraphQL, una arquitectura cliente-servidor basada en HTTP para la comunicación en la web.
Facebook lanzó GraphQL como una alternativa al estándar de arquitectura REST. GraphQL aborda la mayoría de los problemas con REST sin estado y con almacenamiento en caché. Proporciona una sintaxis simple e intuitiva que describe las salidas o entradas esperadas, y la API transmite los datos que coinciden con la solicitud.
Dado que GraphQL es una especificación, puede crear y consumir las API de GraphQL en cualquier lenguaje de programación del lado del servidor, incluido Go.
Introducción a las API de GraphQL en Go
GraphQL se basa en la arquitectura HTTP, y Go proporciona funcionalidad HTTP en su http paquete.
Puedes usar el http paquete a consumir API RESTful en Go, entre otras características. Para GraphQL, puede realizar consultas y mutaciones a los servidores API de GraphQL con el http paquete y otros paquetes incorporados.
Paquetes de cliente de GraphQL como Caja de máquina o shurcool's facilita aún más el proceso de interacción con las API de GraphQL.
Puedes usar el http paquete sin dependencias para interactuar con una API de GraphQL. Importe estos paquetes en su archivo Go para comenzar:
importar (
"bytes"
"codificación/json"
"fmt"
"io/ioutil"
"red/http"
"tiempo"
)
Usarás el bytes paquete para crear un nuevo búfer para la solicitud y el json paquete para ordenar un mapa en el cuerpo de la solicitud JSON. Puedes usar ioutil para leer el cuerpo de la respuesta, y el tiempo paquete para establecer un límite de tiempo para la solicitud.
Consulta de las API de GraphQL con Go
Hay muchas API de GraphQL públicas y gratuitas que puede consultar e integrar en sus aplicaciones. Para este artículo, consultará la API de países de Apollo GraphQL para consultar datos sobre países de todo el mundo.
Todas las operaciones de GraphQL suelen ser solicitudes POST, ya que deben tener una carga útil (cuerpo de solicitud). La mayoría de las API de GraphQL aceptan el cuerpo de la solicitud JSON como tipo de contenido y Go proporciona funcionalidad para usar mapas y estructuras para trabajar con JSON.
Deberá estudiar la estructura del esquema de GraphQL para consultar la API. La consulta será la misma que una consulta GraphQL normal, excepto que la operación (consulta o mutación) es la clave y los datos son el valor del mapa.
Así es como puede declarar una instancia de mapa JSON que clasificará en JSON para la solicitud.
jsonMapInstance := mapa[cadena]cadena {
"consulta": `
{
países {
nombre,
teléfono,
divisa,
código,
emojis
}
}
`,
}
El jsonMapInstance variable es la instancia del mapa para el cuerpo de la solicitud. El valor es una cadena de los datos de consulta que espera de la API. En este caso, los datos de consulta que esperará de la API países esquema son los nombre, teléfono, divisa, código, y emojis campos.
Puedes usar el Mariscal metodo de la json paquete para codificar la instancia del mapa en JSON. El Mariscal El método devuelve el JSON codificado y un error para los casos con un problema de codificación.
jsonResult, error: = json. Mariscal (jsonMapInstance)
si error! = nulo {
fmt. Printf("Hubo un error al ordenar la instancia JSON %v", err)
}
Una vez que haya codificado el mapa en JSON, puede enviar la solicitud POST a la API. Puede crear una nueva instancia de solicitud con el Nueva solicitud método, que toma el tipo de solicitud, la URL y el búfer JSON.
El Nueva solicitud método devuelve una instancia de solicitud. Deberá establecer el tipo de contenido según las especificaciones de la API. Puede establecer el tipo de contenido para las solicitudes HTTP con el Colocar metodo de la Encabezamiento método de su instancia de solicitud.
nuevaSolicitud, err := http. NuevaSolicitud("POST", "https://países.trevorblades.com/graphql", bytes. Nuevo búfer (jsonResult))
nueva solicitud. Encabezamiento. Establecer ("Tipo de contenido", "aplicación/json")
Puede crear un cliente HTTP simple para su solicitud con el Cliente método del paquete HTTP. El Cliente El método también le permite establecer un límite de tiempo para su solicitud con el tiempo paquete.
cliente := &http. Cliente{Tiempo de espera: tiempo. Segundo * 5}
respuesta, err := cliente. Hacer (nueva solicitud)
si error! = nulo {
fmt. Printf("Hubo un error al ejecutar la solicitud%v", err)
}
Después de haber declarado el cliente HTTP, ejecute su solicitud de API con el Hacer método. El Hacer El método acepta la instancia de solicitud y devuelve la respuesta y un error.
Puede leer la respuesta de la solicitud de la API con el ioutil paquete Lee todo método. Toma un flujo de salida y devuelve un segmento de bytes de los datos con un error que puede manejar.
respuestaDatos, err := ioutil. Leer todo (respuesta. Cuerpo)
si error! = nulo {
fmt. Printf("Error de lectura de datos%v", err)
}
Con la función de cadena incorporada, puede convertir la respuesta del segmento de bytes al tipo de cadena.
fmt. imprimir(cadena(datos de respuesta))
Aquí hay una respuesta que muestra el resultado de la solicitud de la API:
Consumir API RESTful es como consumir API GraphQL
Dado que las API REST y GraphQL usan el protocolo HTTP, consumir cada una es un proceso muy similar y puede usar el http Paquete para ambos casos.
Deberá crear clientes, solicitar instancias y leer los datos con los mismos paquetes.