GraphQL para plataformas InterSystems


GraphQL es un estándar para declarar estructuras de datos y métodos para obtener datos, que actúa como una capa adicional entre el cliente y el servidor. Si es la primera vez que escucha sobre GraphQL, aquí hay un par de buenos recursos: uno y dos .


En este artículo te diré cómo puedes usar GraphQL en tus proyectos usando las tecnologías InterSystems.


Actualmente, hay varias formas de crear aplicaciones cliente-servidor en plataformas InterSystems :


  • DESCANSO
  • Zócalo web
  • Jabón

Pero, ¿por qué GraphQL es tan bueno? ¿Qué nuevas características ofrecerá en comparación, por ejemplo, con REST?


GraphQL tiene varios tipos de consultas:


  • Las consultas son solicitudes al servidor para recibir datos, al igual que en REST se recomienda utilizar solicitudes GET para recibir datos.
  • mutación : este tipo es responsable de cambiar los datos en el servidor. En REST, para cambiar las solicitudes de datos POST (PUT, DELETE).
    Las mutaciones , como la consulta, pueden devolver datos; esto es conveniente si desea solicitar información actualizada del servidor inmediatamente después de la mutación.
  • las suscripciones son el mismo tipo de consulta que generará datos. La única diferencia es que la consulta se activa al representar la página en el cliente, y las suscripciones se activan por mutaciones .

Las principales características de GraphQL y para qué sirve


El cliente decide lo que quiere recibir.


Una de las características principales de GraphQL es que la estructura y la cantidad de datos están determinados por la aplicación cliente. El cliente indica con precisión qué datos desea recibir, utilizando una estructura declarativa similar a un gráfico, que es muy similar al formato JSON. La estructura de la respuesta corresponde a la estructura de la solicitud.


Así es como se ve una consulta GraphQL simple:


{ Sample_Company { Name } } 

Responda en formato JSON:


 { "data": { "Sample_Company": [ { "Name": "CompuSoft Associates" }, { "Name": "SynerTel Associates" }, { "Name": "RoboGlomerate Media Inc." }, { "Name": "QuantaTron Partners" } ] } } 

Punto de entrada único


En GraphQL, para trabajar con datos, siempre recurrimos a un único punto de entrada ( punto final ): el servidor GQL. Cambiando la estructura, los campos, los parámetros de consulta, trabajamos con diferentes datos. El mismo REST tiene muchos puntos finales.


Compare REST con GraphQL con un ejemplo simple:



Suponga que desea cargar contenido de usuario, para REST necesita hacer tres solicitudes al servidor:


  1. Cargamos datos de usuario por su id.
  2. Por id obtenemos sus publicaciones
  3. Por id conseguimos sus suscriptores

La tarjeta REST que coincide con estas solicitudes:


  <Route Url="/user/:id" Method="GET" Call="GetUserByID"/> <Route Url="/user/:id/posts" Method="GET" Call="GetUserPostsByID"/> <Route Url="/user/:id/follovers" Method="GET" Call="GetUserFolloversByID"/> 

Para obtener un nuevo conjunto de datos, la tarjeta REST deberá complementarse con nuevos puntos finales.


GraphQL hace frente a esta tarea en una sola consulta. Para hacer esto, especifique lo siguiente en el cuerpo de la solicitud:


 { operationName: null, // query    ( query TestName(...){...} ) query: "query { User(id: "ertg439frjw") { name posts { title } followers(last: 3) { name } } }", variables: null //  ,    query* } 

Tarjeta REST que coincide con esta consulta:


  <Route Url="/graphql" Method="POST" Call="GraphQL"/> 

Además, este es el único punto final en el servidor.


Instalar GraphQL y GraphiQL


Para comenzar a usar GraphQL, debe seguir algunos pasos:


  1. Descargue la última versión de GitHub e impórtela en el área deseada
  2. Vaya al portal de administración del sistema y cree una nueva aplicación web para su producto desde InterSystems Data Platform (Caché, Ensemble o IRIS):
    • Nombre - /
    • Alcance: por ejemplo, MUESTRAS
    • Clase de controlador : GraphQL.REST.Main
  3. GraphiQL es un shell para probar consultas GraphQL. Descargue la última versión de GraphiQL ensamblada o compílela usted mismo
  4. Cree una nueva aplicación web:
    • Nombre - / graphiql
    • Alcance: por ejemplo, MUESTRAS
    • La ruta física a los archivos CSP es C: \ InterSystems \ GraphiQL \

Veamos el resultado.


Vaya al navegador en este enlace http: // localhost: 57772 / graphiql / index.html (localhost - servidor, 57772 - puerto)


GraphiQL


Creo que todo está claro con el área de Solicitud y Respuesta , y el Esquema es la documentación que se genera para todas las clases almacenadas en el área.


El circuito contiene:


  • Clases
  • Propiedades, argumentos y sus tipos
  • Descripción de todo lo anterior, que se genera a partir de los comentarios.

Considere el diagrama usando la clase Sample_Company como ejemplo :



GraphiQL también admite el autocompletado, que puede activarse con la combinación de teclas Ctrl + Espacio :



Consultas


Las consultas pueden ser simples o anidadas; puede consultar múltiples conjuntos de datos. A continuación se muestra un ejemplo de consulta de datos de dos clases diferentes Sample_Person y Sample_Company :



Filtrado


Por el momento, solo se admite la igualdad estricta:


filtro


Paginación


Se implementan 4 funciones para la paginación, si es necesario se pueden combinar:


  • after: n - todos los registros con id mayor que n
  • antes: n - todos los registros con id menor que n
  • primero: n - primeras n entradas
  • last: n - últimas n entradas

filtros


Alcance


En la mayoría de los casos, de acuerdo con la lógica empresarial de las aplicaciones para un cliente en particular, no todas las clases de la región deberían estar disponibles, sino aquellas a las que tiene derechos, según su función. En base a esto, es necesario limitar la visibilidad de las clases para el cliente:


  • Todas las clases en alcance ( GraphQL.Scope.All )
  • Clases heredadas de la superclase ( GraphQL.Scope.Superclass )
  • Clases que pertenecen a un paquete específico ( GraphQL.Scope.Package )

Para cambiar la forma en que la visibilidad es limitada, debe abrir el estudio, ir al área deseada y abrir la clase GraphQL.Settings . Tiene el parámetro SCOPECLASS , su valor predeterminado se establece en GraphQL.Scope.All : esta es una clase que describe la interfaz para restringir la visibilidad de las clases en el campo:
alcance
Para cambiar el límite de visibilidad de la clase, solo necesita establecer uno de los valores indicados anteriormente, GraphQL.Scope.Package o GraphQL.Scope.Superclass .


En el caso de GraphQL.Scope.Package , aún es necesario ir a esta clase y establecer el valor del parámetro Package con el nombre del paquete deseado, por ejemplo, Sample , entonces todas las clases almacenadas de este paquete estarán disponibles:



Y con GraphQL.Scope.Superclass, simplemente puede heredar adicionalmente de esta clase en las clases que necesita:



Actualmente soportado


Solicitudes:


  • Básico
  • Objetos anidados
    • Solo muchas actitudes
  • Hoja de tipos simples
  • Hoja de objetos

Está en implementación


Solicitudes:


  • Objetos anidados
    • Soporte para todo tipo de relaciones.
  • filtrado
    • Apoyo a la desigualdad

En los planes



Enlace al repositorio del proyecto
Enlace al servidor de demostración


Cuestiones Pull Requests son bienvenidas.
¡Sigue el desarrollo de nuestro proyecto!

Source: https://habr.com/ru/post/es413717/


All Articles