Respuestas:
Desventajas:
Pero, esos son más que contrarrestados por estos:
graphql-spring-boot-starter
y graphql-java-tools
comenzar. Cree su esquema en el recurso .graphqls y cree clases de resolución y listo. Para obtener un ejemplo de prueba funcional y en funcionamiento, tomó aproximadamente 10 minutos.
He encontrado algunas preocupaciones importantes para cualquiera que esté considerando usar GraphQL , y hasta ahora los puntos principales son:
Consulta en profundidad indefinida : GraphQL no puede realizar consultas en profundidad indefinida, por lo que si tiene un árbol y desea devolver una rama sin conocer la profundidad, tendrá que hacer una paginación.
Estructura de respuesta específica : en GraphQL, la respuesta coincide con la forma de la consulta, por lo que si necesita responder en una estructura muy específica, tendrá que agregar una capa de transformación para remodelar la respuesta.
Caché a nivel de red : debido a la forma común en que GraphQL se usa a través de HTTP (un POST en un solo punto final), el caché a nivel de red se vuelve difícil. Una forma de resolverlo es utilizar consultas persistentes.
Manejo de la carga de archivos: no hay nada sobre la carga de archivos en la especificación GraphQL y las mutaciones no aceptan archivos en los argumentos. Para resolverlo, puede cargar archivos usando otro tipo de API (como REST) y pasar la URL del archivo cargado a la mutación GraphQL, o inyectar el archivo en el contexto de ejecución, por lo que tendrá el archivo dentro de las funciones de resolución.
Ejecución impredecible : la naturaleza de GraphQL es que puede realizar consultas combinando los campos que desee, pero esta flexibilidad no es gratuita. Hay algunas preocupaciones que conviene conocer, como el rendimiento y las consultas N + 1.
API súper simples : en caso de que tenga un servicio que exponga una API realmente simple, GraphQL solo agregará una complejidad adicional, por lo que una API REST simple puede ser mejor.
El mayor problema que veo con graphQL, es decir, si está utilizando una base de datos relacional, es con uniones .
El hecho de que pueda permitir / no permitir algunos campos hace que las uniones no sean triviales (no simples). Lo que conduce a consultas adicionales.
Además, las consultas anidadas en graphql conducen a consultas circulares y pueden bloquear el servidor . Se debe tener especial cuidado.
La limitación de la velocidad de las llamadas se vuelve difícil porque ahora el usuario puede realizar múltiples consultas en una llamada.
SUGERENCIA : Utilice el cargador de datos de Facebook para reducir la cantidad de consultas en el caso de javascript / node
cost
a la solicitud. Además, esto no es un problema si está utilizando consultas predefinidas, donde el cliente solo envía la ID.
Es cada vez mejor y mejor cada año y, por ahora, la comunidad de GraphQL está creciendo y, como resultado, hay muchas más soluciones para muchos problemas que se destacaron en otras respuestas antes. Pero para admitir lo que todavía impide que las empresas arrojen todos los recursos a GraphQL, me gustaría enumerar algunos problemas y soluciones seguidos de otros sin resolver.
Pero hay un par de casos más que pueden contarse como desventajas:
En resumen, GraphQL es solo una herramienta para objetivos específicos y seguro que no es una solución mágica para todos los problemas y, por supuesto, no reemplaza a REST.
Es realmente genial tener un solo punto final y exponer todos los datos. A continuación, encuentro los puntos a considerar para GraphQL:
Además, se deben considerar los Pros después de su implementación:
Fácil de agregar condiciones usando argumentos y orden personalizado una vez implementado
Use muchos filtros personalizados y elimine todas las acciones que deben crearse, por ejemplo, un usuario puede tener ID, nombre, etc. como argumentos y realizar el filtrado. Además, los filtros también se pueden aplicar a los grupos de los usuarios.
Creo que, por el momento, graphql debe ser parte de la arquitectura de backend, para la carga de archivos, todavía tienes una API normal.