Novedades de Spring framework

Spring GraphQL , un nuevo proyecto que integra GraphQL Java con Spring Framework, se ha presentado a la comunidad Java. Como sucesor del proyecto GraphQL Java Spring , Spring GraphQL proporcionará seguridad adicional, pruebas mejoradas y manejo de excepciones, métricas e integración con Querydsl . El proyecto se encuentra en una fase histórica hacia una versión 1.0, actualmente, y está buscando comentarios. 

SR12 del Spring Cloud Hoxton Release Train está disponible y presenta principalmente correcciones de errores. Esta será la última versión de servicio en este tren de versiones, pero se admitirá con correcciones de errores críticos y manejo de problemas de seguridad hasta finales de febrero de 2022. Se pueden encontrar más detalles en las notas de la versión .

Spring Authorization Server 0.1.2 ha sido lanzado con: la capacidad de configurar páginas de consentimiento de autorización personalizadas , puntos finales de autorización y puntos finales token ; e implementaciones JDBC de las interfaces 

<a href="https://www.docs4dev.com/javadoc/en/org/springframework/security/experimental/spring-security-oauth2-authorization-server/0.0.1/org/springframework/security/oauth2/server/authorization/client/RegisteredClientRepository.html">RegisteredClientRepository</a>
<a href="https://www.docs4dev.com/javadoc/en/org/springframework/security/experimental/spring-security-oauth2-authorization-server/0.0.1/org/springframework/security/oauth2/server/authorization/OAuth2AuthorizationService.html">OAuth2AuthorizationService</a>
<a href="https://github.com/spring-projects-experimental/spring-authorization-server/blob/main/oauth2-authorization-server/src/main/java/org/springframework/security/oauth2/server/authorization/OAuth2AuthorizationConsentService.java">OAuth2AuthorizationConsentService</a>
.

Introducción

Si está buscando comenzar, diríjase a la documentación de referencia y lea la sección “Boot Starter”, o ejecute las muestras .

Si no sabe mucho sobre GraphQL, hay muchos buenos recursos. Puede comenzar en graphql.org/learn .

GraphQL es ampliamente adoptado y en “Mayoría temprana” basado en las tendencias de arquitectura de InfoQ para 2020. Proporciona una alternativa a las API REST que se centra más en los datos y proporciona un esquema y un lenguaje de consulta para que los clientes lo utilicen. El atractivo desde la perspectiva del cliente es claro en este informe sobre el estado de JavaScript . Puede leer la historia de GitHub sobre por qué usa GraphQL.

Soporte fundamental

Spring GraphQL fue concebido como el sucesor del proyecto GraphQL Java Spring del equipo GraphQL Java. Es por eso que el enfoque inicial de nuestra colaboración fue igualar esa funcionalidad, así como integrar GraphQL Java y Spring de la mejor manera posible.

Para ello existe el siguiente soporte fundacional:

  • Controladores HTTP: disponibles para Spring MVC y WebFlux, construidos sobre API de punto final funcional de WebMvc y WebFlux .
  • Controladores WebSocket: siguiendo el protocolo de graphql-ws con soporte para flujos de suscripción GraphQL.
  • Intercepción web: capacidad para interceptar todas las solicitudes de GraphQL, inspeccionar los encabezados HTTP y modificar GraphQL 
    ExecutionInput
    ExecutionResult
    .
  • Iniciador de arranque: ponlo todo junto en una aplicación ejecutable.

Seguridad

La URL de un punto final GraphQL es fácil de proteger como de costumbre. Para una seguridad más detallada, las aplicaciones pueden usar las anotaciones de Spring Security en los métodos de recuperación de datos. Esto requiere que el contexto de Spring Security se propague a los métodos de recuperación de datos, y aunque GraphQL Java es neutral para los subprocesos , los componentes en la ejecución pueden ser asíncronos y provocar un cambio de subprocesos.

A través del motor GraphQL, y a los componentes de búsqueda de datos. Esto incluye tanto el 

ThreadLocal
contexto como Reactor 
Context
para las aplicaciones Spring MVC y WebFlux respectivamente. Una vez que esas características están implementadas, Spring Security funciona sin la necesidad de ninguna integración especializada adicional.

Los ejemplos de webmvc-http y webflux-security demuestran el uso de Spring Security.

Manejo de excepciones

Spring GraphQL permite que las aplicaciones creen múltiples 

GraphQlExceptionResolver
componentes independientes para resolver excepciones a errores GraphQL para su inclusión en la respuesta GraphQL. También proporciona un 
ErrorType
tipo a utilizar para errores Clasificar con categorías comunes, tales como 
BAD_REQUEST
UNAUTHORIZED
FORBIDDEN
NOT_FOUND
, o 
INTERNAL_ERROR
por defecto.

Pruebas

Puede probar las solicitudes GraphQL utilizando WebTestClient , simplemente envíe y reciba JSON. Sin embargo, los detalles específicos de GraphQL hacen que este enfoque sea más engorroso de lo que debería ser.

Es por eso que Spring GraphQL incluye 

WebGraphQlTester
que define un flujo de trabajo para probar solicitudes GraphQL. Proporciona los siguientes beneficios:

  • Verifique que las respuestas de GraphQL sean 200 (OK).
  • Verifique que no haya errores inesperados en la clave “errores” en la respuesta.
  • Decodifica bajo la tecla “datos” en la respuesta.
  • Utilice JsonPath para decodificar diferentes partes de la respuesta.
  • Probar suscripciones.

Todas las muestras usan 

GraphQlTester
.

Métrica

Cuando el iniciador 

spring-boot-starter-actuator
está presente, se recopilan métricas para las solicitudes GraphQL, incluidos los 
DataFetcher
temporizadores de solicitud y ejecución, y un contador de errores.

Integración Querydsl

Querydsl proporciona un enfoque flexible y seguro para expresar predicados de consulta. Spring GraphQL se basa en la extensión Spring Data Querydsl para facilitar la creación de un Querydsl respaldado 

DataFetcher
. Prepara un Querydsl a 
Predicate
partir de los parámetros de solicitud de GraphQL y lo usa para obtener datos y eso funciona para JPA, MongoDB y LDAP.

El ejemplo webmvc-http usa Querydsl.

Schema-First vs Object-First

GraphQL proporciona un lenguaje de esquema que ayuda a los clientes a crear solicitudes válidas, habilita el editor GraphiQL UI, promueve un vocabulario común entre los equipos, etc. También trae a colación el dilema del esquema antiguo frente al desarrollo del objeto primero.

Nuestra opinión es que debería preferirse el desarrollo basado en el esquema. Facilita una conversación entre personas con experiencia técnica y no técnica, ayuda con las herramientas, facilita el seguimiento de los cambios, etc. Tampoco existe un mapeo uno por uno entre el esquema GraphQL y los tipos de Java.

Dicho esto, también hay espacio para la generación de código, para comenzar, para que los clientes creen consultas, etc. Los marcos como Netflix DGS tienen un excelente soporte para esto que se puede usar con Spring GraphQL.

Hoja de ruta y comentarios

La intención es tener un segundo hito antes de SpringOne , del 2 al 3 de septiembre. Ya existe una serie de problemas para M2 en la cola debido a los comentarios iniciales, incluida la compatibilidad con un cliente GraphQL, registros de BatchLoader, carga de archivos y más.

La fase de hitos continuará hasta después de Spring Boot 2.6 en noviembre, momento en el que está programado que el iniciador de arranque se traslade al repositorio de Spring Boot, para su inclusión en Boot 2.7.

Recursos

Para obtener más detalles sobre las funciones de Spring GraphQL, consulte la documentación de referencia .

Los equipos GraphQL Java y Spring se presentarán conjuntamente en la conferencia SpringOne de este año , que vuelve a ser gratuita y en línea por segundo año consecutivo. Por favor, regístrese para asistir a nuestra charla e interactuar con ponentes y asistentes.

FUENTE: https://spring.io/