En este artículo, compararemos la arquitectura RESTful y la arquitectura GraphQL. GraphQL es nuevo en el campo y RESTful estaba funcionando bien antes del nacimiento de GraphQL.
REST: Es un acrónimo de Representational State Transfer. REST es una arquitectura de estilo de diseño de API para crear servicios web (API).
Características de la arquitectura RESTful:
- La implementación del servidor REST es más simple que su contraparte SOAP, es decir, una de las razones por las que es popular entre los nuevos desarrolladores.
- REST no tiene estado, el servidor no almacena el estado de un cliente en forma de sesiones ni nada más. Cada petición es una nueva petición.
- REST es compatible con JSON y XML, ambos compatibles ayudan al desarrollador a aquellos que se sienten cómodos con un XML o JSON.
- La ocurrencia del mensaje de error es significativa, el desarrollador puede adivinar fácilmente la falla.
GraphQL: GraphQL fue desarrollado inicialmente por Facebook internamente para su propio uso y luego se lanzó a las personas en 2015. Es un lenguaje de manipulación y consulta de datos para API. Es un tiempo de ejecución para responder a las requests de API entrantes.
Características de la arquitectura GraphQL:
- GraphQL tiene solo 1 punto final, por lo tanto, es fácil de administrar.
- Obtención precisa de datos. Como los campos se pasan junto con la operación de GraphQL, solo se devuelven los campos que son obligatorios.
- Enviar diferentes versiones de API es tan simple como editar el código anterior.
- Las API de GraphQL están impulsadas por el cliente. Esto significa que el cliente decide la estructura de la API, en contraste con REST, donde el servidor decide la implementación de la API.
Similitudes entre REST y GraphQL:
- Ambos tienen la capacidad de devolver datos con formato JSON.
- REST y GraphQL pueden obtener datos con un método HTTP GET. Sin embargo, el servidor API de GraphQL generalmente tiene solo un punto final POST. Sin embargo, es posible usar GET con GraphQL para obtener datos.
- REST y GraphQL identifican cada entidad como un recurso. Cada recurso tiene un ID asociado.
Comparación entre REST y GraphQL:
estructura de la API:
- REST: en las llamadas RESTful, podemos usar diferentes tipos de métodos HTTP como GET, POST, DELETE. La llamada también forma parte del punto final que debe llamarse.
GET /api/v1/users/geeksforgeeks
- GraphQL: en la llamada GraphQL, solo se permite el método POST. El punto final también permanece constante para una aplicación. Para dar servicio a diferentes tipos de requests, se crea una «consulta» y se envía con la solicitud.
POST /graphql {query {users(id:"geeksforgeeks") { firstName lastName dateCreated }}}
Ejemplo de consulta:
- REST: REST define el ‘qué’. Las API escritas en REST se enfocan en ‘qué’ debe ser la Respuesta.
GET /users/:id
- GraphQL: en la llamada GraphQL, solo se permite el método POST. El punto final también permanece constante para una aplicación. Para dar servicio a diferentes tipos de requests, se crea una «consulta» y se envía con la solicitud.
POST /graphql {query (name:"geeksforgeeks") { id dateCreated }}
Número de puntos finales:
- REST: en REST, un punto final de alguna manera se vincula con el método/recurso en particular. Para acceder a diferentes recursos, se crean diferentes puntos finales.
Makes a new user: POST /users/GFG Get user with id: GET /users/id
- GraphQL: en GraphQL, solo se crea un punto final que sirve a todo tipo de recursos.
Fetches datecreated and numberofarticles for a user with id gfg: POST /graphql/{user(id:"gfg") {datecreated numberofarticles}} Gets title of the blog with id 53289: POST /graphql/{blog(id:"53289") {title}}
Documentación:
- REST: en REST, los desarrolladores de puntos finales mantienen la documentación, los recursos a los que se utilizan para acceder, los parámetros (si los hay) que toman, el tipo de valor que toma cada campo y otras especificaciones.
- GraphQL: en GraphQL, la documentación está en el cuadro en el sentido de que la información sobre qué consultas admite el esquema de GraphQL se proporciona o se puede obtener. Esto conduce a un menor número de referencias a la documentación por parte del desarrollador.
Banda ancha:
- REST: En REST, el recurso seleccionado se envía al cliente y el filtrado de la información requerida debe realizarse en el lado del cliente. Esto consume un gran ancho de banda ya que también se envía información que el cliente no necesita.
- GraphQL: GraphQL proporciona una forma de identificar los campos obligatorios y solo enviarlos al cliente. Esto provoca un bajo consumo de ancho de banda.
Tipo de datos:
- REST: el servicio RESTful también puede devolver datos escritos débilmente. El tipo de datos es un dato crucial en la documentación. No proporcionar esta información porque no está presente puede causarle dificultades a un cliente cuando llama al punto final.
- GraphQL: mientras que GraphQL es predominantemente fuertemente tipado debido al esquema que debe crearse antes de que se pueda llamar a la consulta.
Comunicación:
- REST: REST solo se comunica en el protocolo HTTP/HTTPS.
- GraphQL: el servidor GraphQL puede comunicarse a través de HTTP, HTTPS, TCP, WebSockets, UDP, FTP.
Manejo de errores:
- REST: en REST, el estado de la respuesta se indica mediante HTTPStatusCode en los encabezados HTTP. Estos códigos de estado están estandarizados e indican al cliente sobre el tipo de error.
- GraphQL: GraphQL siempre devuelve 200 como estado de respuesta a través de HTTP. Los errores que ocurren durante el procesamiento de consultas, si los hay, se envían como «mensajes de error» con la respuesta.
Números de solicitud:
- REST: En REST, puede haber múltiples requests a los recursos debido a la virtud de cómo están estructurados. Por ejemplo, para recuperar los detalles de un estudiante, primero OBTENER el estudiante con id , luego obtenga los detalles de la tarifa de los estudiantes usando el campo feeid
- GraphQL: en GraphQL, se puede acceder a múltiples recursos en una sola llamada, lo que reduce la cantidad de requests que realiza una aplicación y, por lo tanto, consume menos datos.
Almacenamiento en caché:
- REST: en REST, el almacenamiento en caché HTTP se aprovecha e implementa mediante HTTP. En los encabezados HTTP, dicha información de control se transmite junto con la respuesta. El encabezado es ‘Cache-Control’ y el servidor puede decidir cómo usarlo.
- GraphQL: en GraphQL, no existe tal mecanismo de almacenamiento en caché. Por lo tanto, la responsabilidad recae en los clientes para almacenar en caché los recursos de su parte.
Conclusión: REST es un antiguo enfoque estable que funciona muy bien hasta la fecha. GraphQL está aumentando y ganó mucho impulso. Si cree que GraphQL es una opción solo para nuevos productos y nuevos códigos, está equivocado. Puede funcionar en sistemas antiguos que usan REST, aún puede integrar GraphQL para obtener datos de los sistemas REST antiguos. Esto ayudará a mejorar la capa de cliente. Puede escribir consultas en el nuevo servidor GraphQL para comunicarse con los sistemas REST.
Publicación traducida automáticamente
Artículo escrito por Parikshit Hooda y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA