Existen muchos estándares de arquitectura de código abierto para crear y distribuir aplicaciones. Las API REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) y GraphQL son las más populares.

Las API RESTful son el estándar de arquitectura API más utilizado. Si ha escrito API RESTful complejas con muchos puntos finales, probablemente se haya dado cuenta de lo complicadas que pueden ser. Esto es especialmente cierto si solo hay ligeras diferencias entre los puntos finales.

También puede encontrar problemas con la obtención de datos, ya que las API RESTful no son lo suficientemente flexibles para seleccionar datos específicos. GraphQL resuelve estos problemas de las API RESTful.

¿Qué es GraphQL?

GraphQL (Graph Query Language) es un lenguaje de consulta y tiempo de ejecución para crear API. A diferencia de las API REST con muchos puntos finales para consumir datos, las API GraphQL tienen un punto de entrada. Puede obtener datos específicos describiéndolos en consultas.

instagram viewer

El Especificación de GraphQL define el lenguaje de consulta y cómo funcionan los servidores GraphQL. Puede crear y consumir API de GraphQL en lenguajes del lado del servidor desde Python hasta JavaScripty cualquier idioma que admita HTTP.

Meta construyó GraphQL en 2012 como una alternativa a REST para construir en HTTP. Lanzaron GraphQL como un estándar de código abierto en 2015. Hoy, la fundación GraphQL supervisa el desarrollo de la especificación GraphQL.

GraphQL es bastante nuevo, tiene una adopción baja y su uso tiene costos ocultos. La creación de API de GraphQL puede ser innecesariamente compleja, especialmente para proyectos pequeños con algunos puntos finales.

Además, todas las solicitudes de GraphQL finalmente devuelven un código de estado de 200, independientemente del estado de la solicitud.

¿Cómo funciona GraphQL?

A diferencia de REST, que está orientado a los recursos, GraphQL requiere que piense en los datos como un gráfico para interactuar con los datos. Puede especificar la estructura de los datos y la especificación proporciona una interfaz de consulta sólida para interactuar con la API a través de HTTP. Podrá utilizar varias funciones dependiendo de la Paquete o biblioteca de GraphQL eliges usar.

Los esquemas de GraphQL incluyen tipos de objetos que definen el objeto solicitable y sus campos disponibles. En las consultas y mutaciones de la API, el paquete GraphQL valida las consultas y las ejecuta en función de las funciones de controlador especificadas (resolutores).

¿Por qué debería usar GraphQL?

REST es un estándar fácil de usar y la mayoría de los lenguajes de programación tienen herramientas para crear API RESTful rápidamente. Sin embargo, existen muchos problemas con la creación y el consumo de API RESTful.

Estos son algunos de los problemas con REST que hacen que los desarrolladores prefieran GraphQL para algunos casos de uso.

Obtención de datos ineficiente

Las API RESTful transmiten datos según la especificación del punto final. No son lo suficientemente flexibles para recuperar datos más allá de lo que está codificado en la función de controlador del punto final.

Suponga que un punto final devuelve una lista de datos disponibles y necesita especificar valores o criterios para los campos. En ese caso, el desarrollador debe crear un punto final y definir la lógica comercial para devolver los datos. Puede analizar el recurso valioso manualmente, lo que eventualmente lleva más tiempo.

GraphQL resuelve el problema de la obtención de datos ineficiente, ya que puede consultar las API para devolver datos en función de criterios y especificaciones de manera flexible.

Las API de GraphQL son interactivas; puede especificar los datos que necesita recuperar en una sintaxis fácil de leer.

{
usuario (donde: {edad: {_eq: "89"}}) {
nombre
escuela(dónde: {vivo: {_eq: verdadero}}) {
biografía
nacionalidad
}
}
}

La consulta de GraphQL anterior consulta un usuario esquema para las entradas donde el edad campo es 89. La consulta tiene una consulta incrustada para las entradas donde el vivo el campo evalúa verdadero. Devuelve los campos de nombre, biografía y nacionalidad del esquema.

Desarrollo rápido

Crear y consumir las API de GraphQL es más fácil que usar REST, especialmente a medida que aumenta el tamaño del proyecto. Durante la fase de desarrollo, no tiene que desarrollar tantas rutas y funciones de controlador como lo hará al desarrollar API RESTful. Consumir las API GraphQL no es tan tedioso como las API RESTful.

En REST, diferentes puntos finales dan acceso a diferentes recursos, a diferencia de GraphQL, donde hay un solo punto final. Esto produce flexibilidad y rendimiento, y las consultas pueden llamar a diferentes funciones de resolución.

El lenguaje de definición de esquemas GraphQL

El lenguaje de definición de esquemas GraphQL (SDL) especifica los esquemas para los servicios GraphQL.

La sintaxis de GraphQL SDL es fácil de leer y comprender. Especificará la estructura de su esquema en un archivo con el .graphql o .graphqls extensión.

tipo Humano {
nombre: Cadena!
edad: Int!
}

entrada AddHuman {
nombre: Cadena!
edad: Int!
}

tipo mutación {
CreateHuman (entrada: AddHuman!): ¡Humano!
DeleteHuman (id: Int!): Cadena!
UpdateHuman (id: Int!): Cadena!
}

tipo Consulta {
GetHuman (id: Int!): ¡Humano!
GetHumans: [¡Humano!]!
}

El código de GraphQL anterior es el esquema de una API de GraphQL que define la estructura de la API para las solicitudes. El esquema define la funcionalidad CRUD para la API.

En el lado del cliente, según la estructura del esquema y los datos u operaciones del cliente, el cliente puede ejecutar un consulta (GET o DELETE en REST) ​​o un mutación (PONER o POST).

He aquí un ejemplo de consulta de la Humano esquema.

consulta humana {
nombre
edad
}

La consulta anterior devolvería el esquema humano nombre y edad datos de campo.

Las mutaciones de GraphQL tienen una sintaxis bastante diferente en contraste con las consultas. He aquí un ejemplo de operación de mutación en el Humano esquema.

mutación {
CreateHuman (entrada:{ nombre:"hombre", edad: 1000000000000000,}) {
nombre
edad
}
}

Las entradas del código de mutación nombre y edad campos al cliente y devuelve los datos de los campos.

Necesitará un almacén de datos para la persistencia cuando esté construyendo su API GraphQL. Al igual que REST y la mayoría de las arquitecturas web basadas en HTTP, GraphQL no tiene estado y puede usar cualquier almacén de datos o base de datos para su aplicación.

Construyendo una API de GraphQL

GraphQL es una especificación y puede compilar GraphQL en los lenguajes del lado del servidor más populares. Tendrá que encontrar una biblioteca con las funciones que necesita para su proyecto.

Al elegir una biblioteca GraphQL, desea utilizar una biblioteca rica en funciones que admita todos los tipos y operaciones de GraphQL. La mayoría de las bibliotecas adoptan un enfoque de esquema primero o código primero. En el primero, define un esquema GraphQL y la biblioteca genera resolutores y código repetitivo. Para este último, codifica los resolutores sin definir un esquema.

GraphQL está ganando adopción

Desde el inicio de GraphQL, los desarrolladores y las empresas han lanzado herramientas para simplificar su uso. Estos pueden reducir el tiempo de desarrollo para proyectos pequeños y medianos.

Puede consultar los clientes GraphQL de código abierto, la documentación de GraphQL y sus especificaciones para obtener más información.