API REST

API REST frente a GraphQL

API REST frente a GraphQL

TL; versión DR

En una de las publicaciones anteriores, discutimos, brevemente, cómo es usar la API de GitHub v3. Esta versión está diseñada para interconectarse como cualquier otra API REST. Hay puntos finales para cada recurso a los que necesita acceder y / o modificar. Hay puntos finales para cada usuario, cada organización, cada repositorio, etc. Por ejemplo, cada usuario tiene su punto final de API en https: // api.github.com / users / puede intentar sustituir su nombre de usuario en lugar de e ingrese la URL en un navegador para ver con qué responde la API.

GitHub API v4, por otro lado, usa GraphQL donde QL significa Query Language. GraphQL es una nueva forma de diseñar sus API. Al igual que hay muchos servicios web que se ofrecen como API REST, no solo los que ofrece GitHub, existen muchos servicios web que le permiten interactuar con ellos a través de GraphQL.

La diferencia más marcada que notará entre GraphQL y la API REST es que GraphQL puede funcionar desde un único punto final de la API. En el caso de GitHub API v4, este punto final es https: // api.github.com / graphql y eso es todo. No tiene que preocuparse por agregar cadenas largas al final de un URI raíz o proporcionar un parámetro de cadena de consulta para obtener información adicional. Simplemente envíe un argumento similar a JSON a esta API, solicitando solo las cosas que necesita, y obtendrá una carga útil JSON con la misma información exacta que solicitó. No tiene que lidiar con el filtrado de información no deseada o sufrir una sobrecarga de rendimiento debido a las grandes respuestas.

¿Qué es la API REST??

Bueno, REST significa Transferencia de estado representacional y API significa Interfaz de programación de aplicaciones. Una API REST, o una API 'RESTful', se ha convertido en la filosofía de diseño central detrás de la mayoría de las aplicaciones cliente-servidor modernas. La idea surge de la necesidad de segregar varios componentes de una aplicación, como la IU del lado del cliente y la lógica del lado del servidor.

Entonces, la sesión entre un cliente y un servidor generalmente no tiene estado. Una vez que se cargan la página web y los scripts relacionados, puede continuar interactuando con ellos y cuando realiza una acción (como presionar un botón de enviar), se envía una solicitud de envío junto con toda la información contextual que el servidor web necesita para procesar esa solicitud ( como nombre de usuario, tokens, etc.). La aplicación pasa de un estado a otro pero sin una necesidad constante de conexión entre el cliente y el servidor.

REST define un conjunto de restricciones entre el cliente y el servidor, y la comunicación solo puede ocurrir bajo esas restricciones. Por ejemplo, REST sobre HTTP generalmente usa el modelo CRUD, que significa Crear, Leer, Actualizar y Eliminar y los métodos HTTP como POST, GET, PUT y DELETE lo ayudan a realizar esas operaciones y solo esas operaciones. Las viejas técnicas de intrusión como las inyecciones de SQL no son una posibilidad con algo como una API REST estrictamente escrita (aunque REST no es una panacea de seguridad).

También ayuda bastante a los desarrolladores de UI! Dado que todo lo que recibe de una solicitud HTTP es un flujo de texto típico (formateado como JSON, a veces), puede implementar fácilmente una página web para navegadores o una aplicación (en su idioma preferido) sin preocuparse por la arquitectura del lado del servidor. Usted lee la documentación de la API para servicios como Reddit, Twitter o Facebook y puede escribir extensiones para ellos o clientes de terceros en el idioma que elija, ya que tiene la garantía de que el comportamiento de la API seguirá siendo el mismo.

Por el contrario, al servidor no le importa si el front-end está escrito en Go, Ruby o Python. Ya sea un navegador, una aplicación o una CLI. Simplemente 've' la solicitud y responde apropiadamente.

Que es GraphQL?

Al igual que con cualquier cosa en el mundo de las computadoras, las API REST se hicieron más grandes y complejas y, al mismo tiempo, la gente quería implementarlas y consumirlas de una manera más rápida y sencilla. Es por eso que a Facebook se le ocurrió la idea de GraphQL, y luego lo abrió. QL en GraphQL son las siglas de Query Language.

GraphQL permite a los clientes realizar solicitudes API muy específicas, en lugar de realizar llamadas API rígidas con parámetros y respuestas predefinidos. Es mucho más sencillo porque entonces el servidor responde exactamente con los datos que le pediste, sin ningún exceso.

Eche un vistazo a esta solicitud REST y su respuesta correspondiente. Esta solicitud está destinada a ver solo la biografía pública de un usuario.

Solicitud: OBTENER https: // api.github.com / users /
Respuesta:

"login": "octocat",
"id": 583231,
"node_id": "MDQ6VXNlcjU4MzIzMQ ==",
"avatar_url": "https: // avatars3.githubusercontent.com / u / 583231?v = 4 ",
"gravatar_id": "",
"url": "https: // api.github.com / users / octocat ",
"html_url": "https: // github.com / octocat ",
"Followers_url": "https: // api.github.com / users / octocat / Followers ",
"siguiente_url": "https: // api.github.com / users / octocat / following / other_user ",
"gists_url": "https: // api.github.com / users / octocat / gists / gist_id ",
"starred_url": "https: // api.github.com / users / octocat / starred / owner / repo ",
"subscriptions_url": "https: // api.github.com / users / octocat / subscriptions ",
"organization_url": "https: // api.github.com / users / octocat / orgs ",
"repos_url": "https: // api.github.com / users / octocat / repos ",
"events_url": "https: // api.github.com / users / octocat / events / privacy ",
"selected_events_url": "https: // api.github.com / users / octocat / selected_events ",
"type": "Usuario",
"site_admin": falso,
"name": "El Octocat",
"empresa": "GitHub",
"blog": "http: // www.github.com / blog ",
"ubicación": "San Francisco",
"correo electrónico": nulo,
"alquilable": nulo,
"bio": nulo,
"public_repos": 8,
"public_gists": 8,
"seguidores": 2455,
"siguiente": 9,
"created_at": "2011-01-25T18: 44: 36Z",
"updated_at": "2018-11-22T16: 00: 23Z"

He usado el nombre de usuario octocat, pero puede reemplazarlo con el nombre de usuario de su elección y usar cURL para realizar esta solicitud en la línea de comandos o Postman si necesita una GUI. Si bien la solicitud fue simple, piense en toda la información adicional que obtiene de esta respuesta. Si tuviera que procesar datos de un millón de estos usuarios y filtrar todos los datos innecesarios, entonces eso no es eficiente. Está desperdiciando ancho de banda, memoria y computación para obtener, almacenar y filtrar todos los millones de pares clave-valor adicionales que nunca obtendrá

Además, la estructura de la respuesta no es algo que sepa de antemano. Esta respuesta JSON es equivalente a un objeto de diccionario en Python, o un objeto en JavaScript. Otros puntos finales responderán con objetos JSON que pueden estar compuestos por objetos anidados, una lista anidada dentro del objeto o cualquier combinación arbitraria de tipos de datos JSON, y deberá consultar la documentación para obtener los detalles. Cuando procesa la solicitud, debe conocer este formato que cambia de un punto final a otro.

GraphQL no se basa en verbos HTTP como POST, GET, PUT y DELETE para realizar operaciones CRUD en el servidor. En cambio, solo hay un tipo de solicitud HTTP y endopint para todas las operaciones relacionadas con CRUD. En el caso de GitHub, esto implica solicitudes de tipo POST con un solo punto final https: // api.github.com / graphql

Al ser una solicitud POST, puede llevar consigo un cuerpo de texto tipo JSON a través del cual serán nuestras operaciones GraphQL. Estas operaciones pueden ser de typea consulta si todo lo que quiere hacer es leer alguna información, o puede ser un mutación en caso de que sea necesario modificar los datos.

Para realizar llamadas a la API GraphQL, puede usar el explorador GraphQL de GitHub. Eche un vistazo a este GraphQL consulta para obtener el mismo tipo de datos (biografía pública de un usuario) que hicimos anteriormente usando REST.

Solicitud: POST https: // api.github.com / graphql
consulta
usuario (inicio de sesión: "ranvo")
bio


 
Respuesta:
 

"datos":
"usuario":
"bio": "Entusiastas de la tecnología y la ciencia. Me gustan todo tipo de cosas no relacionadas
servidores a la física cuántica.\ r \ nOcasionalmente, escribo publicaciones de blog sobre los intereses anteriores."


Como puede ver, la respuesta consiste solo en lo que solicitó, esa es la biografía del usuario. Selecciona un usuario específico pasando el nombre de usuario (en mi caso, es ranvo) y luego solicita el valor de un atributo de ese usuario, en este caso ese atributo es bio. El servidor de API busca la información específica exacta y responde con eso y nada más.

Por otro lado, GraphQL también le permite realizar una sola solicitud y extraer información que le habría llevado varias solicitudes en la API REST tradicional. Recuerde que todas las solicitudes de GraphQL se realizan a un solo punto final de API. Tomemos, por ejemplo, el caso de uso en el que necesita pedirle al servidor API de GitHub la biografía del usuario y una de sus claves SSH. Requeriría dos solicitudes GET.

Solicitudes de REST: OBTENER https: // api.github.com //
OBTENER https: // api.github.com //llaves
 
Solicitud GraphQL: POST https: // api.github.com / graphql /
 
consulta
usuario (inicio de sesión: "ranvo")
bio
publicKeys (último: 1)
bordes
nodo
clave





 
Respuesta GraphQL:
 

"datos":
"usuario":
"bio": "Entusiastas de la tecnología y la ciencia. Me gustan todo tipo de cosas no relacionadas
servidores a la física cuántica.\ r \ nOcasionalmente, escribo publicaciones de blog sobre los intereses anteriores.",
"publicKeys":
"bordes": [

"nodo":
"clave": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH31mVjRYdzeh8oD8jvaFpRuIgL65SwILyKpeGBUNGOT"


]



Hay objetos anidados, pero si miras tu solicitud, coinciden prácticamente con tu solicitud para que puedas saber y, en cierto sentido, dar forma a la estructura de la respuesta que obtienes .

Conclusión

GraphQL viene con su propia curva de aprendizaje, que es muy empinada o nada empinada dependiendo de a quién le pregunte. Desde un punto de vista objetivo, puedo exponerle los siguientes hechos. Es flexible como ha visto anteriormente, es introspectivo, es decir, puede consultar la API GraphQL sobre la API en sí. Incluso si no va a construir su servidor API usándolo, es probable que tenga que interactuar con una API que solo permita GraphQL.

Puede aprender un poco más sobre sus aspectos técnicos aquí y si desea hacer llamadas a la API GraphQL desde su estación de trabajo local, use Graphiql.

Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....
Herramientas útiles para jugadores de Linux
Si le gusta jugar juegos en Linux, es probable que haya utilizado aplicaciones y utilidades como Wine, Lutris y OBS Studio para mejorar la experiencia...
Juegos HD remasterizados para Linux que nunca tuvieron un lanzamiento de Linux antes
Muchos desarrolladores y editores de juegos están creando una remasterización HD de juegos antiguos para extender la vida útil de la franquicia, por f...