Cómo comparar modelos de interacción, contratos, streaming y canales persistentes al construir plataformas modernas de APIs
Edición en profundidad - material de estudio y consulta profesional
Por João Ricardo Dutra••Material íntegro
Tres modelos, tres semánticas: consulta, y canal persistente
Figura inicial: el capítulo compara tres estilos que a menudo se combinan en arquitecturas y de integración.
Principio central
Elegir la interfaz adecuada requiere alinear el modelo de datos, el acoplamiento, la latencia, el y la gobernanza.
Edición en profundidad: material de estudio y consulta profesional.
Presentación del capítulo
Hasta ahora, el curso ha cubierto la comunicación clásica, el modelado y la descripción formal de contratos utilizando . Estos elementos siguen siendo fundamentales para las plataformas corporativas, pero no cubren todas las cuestiones de integración. Los sistemas distribuidos a menudo necesitan consultas flexibles de gráficos de datos, comunicación eficiente entre servicios y entrega de eventos en tiempo real. Es en este espacio donde , y cobran relevancia.
Aunque los tres nombres aparecen con frecuencia en las discusiones modernas, no son alternativas directas entre sí. es un modelo de ejecución y lenguaje de consulta basado en esquemas. es un marco de llamada a procedimientos remotos fuertemente tipado, generalmente compatible con y /2. es un protocolo para mantener un canal bidireccional persistente, dejando la semántica de la aplicación a una capa superior. Compararlos sólo por desempeño o popularidad lleva a decisiones superficiales.
Las arquitecturas maduras analizan qué problema debe resolverse: consulta agregada para el front-end, comunicación interna de baja latencia, unidireccional o bidireccional, push a interfaces enriquecidas o mediación a través de puertas de enlace. También analizan la gobernanza, la seguridad, la observabilidad, el , la curva de adopción, las herramientas y la compatibilidad heredada. En muchos escenarios, la mejor solución no es elegir un único modelo, sino combinar más de uno con roles bien definidos.
Este capítulo presenta los fundamentos, la semántica, los patrones operativos, los obstáculos y los criterios de selección. El objetivo es permitir al lector comprender cómo funciona cada tecnología, reconocer cuándo encaja bien e identificar riesgos operativos en , mallas de servicios y plataformas corporativas.
Cómo estudiar este capítulo
Al leer cada tecnología, responde cuatro preguntas: cuál es el contrato expuesto, quién controla la evolución del esquema o interfaz, cómo se realiza la observabilidad y qué intermediarios pueden participar correctamente en el flujo. Esta disciplina evita tratar soluciones de diferente naturaleza como si fueran sólo formatos de carga útil alternativos.
Objetivos de aprendizaje
Distinga las responsabilidades de , y y evite comparaciones simplistas.
Explique el modelo, la ejecución y la resolución del esquema .
Comprender consultas, mutaciones, suscripciones, tipos, fragmentos e introspección.
Reconozca problemas como la recuperación excesiva, la recuperación insuficiente, N+1, la profundidad excesiva y la complejidad de las consultas.
Explique el modelo de servicio , la función de y los cuatro patrones de llamada.
Relacione con /2, , deadlines, metadatos, códigos de estado y .
Describa el de de , los frames, ping/pong y el cierre.
Analice la escala, la afinidad, la autenticación y la observabilidad en conexiones persistentes.
Compare las implicaciones del , el control de versiones, las puertas de enlace, los cortafuegos y los equilibradores.
Aplicar criterios prácticos para elegir y combinar estas tecnologías en arquitecturas empresariales.
Estructura del capítulo
13.1 ¿Por qué existe este capítulo después de ?
13.2 : descripción general y motivación
13.3 Esquema, tipos, consultas, mutaciones y suscripciones
13.4 Resolvedores, , N+1 y federación
13.5 Seguridad, gobernanza y observabilidad en
13.6 : descripción general y de protocolo
13.7 Patrones de llamadas, deadlines y
13.8 Seguridad, malla y gobernanza en
13.9 : , frames y ciclo de vida
13.10 Funcionamiento, escalabilidad y seguridad en
13.11 Comparación práctica entre , y
13.12 Uso en , estudios de casos, resumen, ejercicios y referencias
13.1 Por qué este capítulo viene después de
describe muy bien las orientadas a recursos u operaciones. Sin embargo, no representa un gráfico consultable con tanta naturalidad como , llamadas binarias y bidireccional como en , ni un canal persistente orientado a mensajes como . El lector que domina ya tiene una base excelente para los contratos, la semántica y la gobernanza; ahora es necesario comprender dónde estos fundamentos siguen siendo válidos y dónde los nuevos modelos requieren otra forma de pensar.
En términos de arquitectura, este capítulo es una ampliación del repertorio y no una negación de lo que se ha estudiado antes. sigue siendo muy fuerte para la exposición pública y la integración entre organizaciones. Lo que cambia es que ciertas necesidades prácticas -como pantallas que requieren agregaciones muy variadas, microservicios internos con alta cadencia y aplicaciones que dependen de la push en tiempo real-pueden satisfacerse mejor mediante diferentes modelos.
También es importante comprender la diferencia entre tecnología de interfaz y tecnología de transporte. normalmente usa , pero su semántica de contrato no es la misma que . utiliza /2 como base, pero presenta al desarrollador la abstracción de métodos y mensajes. nace de un , pero luego abandona la lógica de solicitud/respuesta para operar con frames full-duplex. Esta distinción evita conclusiones incorrectas sobre el , la seguridad y la .
13.2 : descripción general y motivación
surgió para ofrecer a los consumidores un mayor control sobre la forma de los datos devueltos. En lugar de que la exponga una gran colección de con respuestas preformateadas, publica un tipado y permite al cliente declarar, en una consulta, exactamente qué campos desea obtener. Esto reduce la recuperación insuficiente, cuando el cliente necesita llamar a varios para ensamblar una pantalla, y puede reducir la recuperación excesiva, cuando la respuesta contiene una gran cantidad de datos que son irrelevantes para ese caso específico.
El modelo es particularmente atractivo en experiencias front-end con múltiples variaciones de composición: web, móvil, socios, paneles analíticos y diferentes recorridos en el mismo dominio. Una puerta de enlace basada en o puede recopilar datos de múltiples y bases de datos, dejando la tarea de componer el resultado a la capa de resolución. Sin embargo, esta flexibilidad traslada la complejidad al servidor, que necesita validar, ejecutar, limitar costos y observar el comportamiento de las consultas entrantes.
no es un lenguaje de acceso a bases de datos arbitrario. El contrato sigue siendo definido por el proveedor, a través de un esquema, y la ejecución está controlada por los resolvers. Esto significa que el hecho de que el cliente elija campos no elimina la necesidad de gobernanza. Al contrario: la autenticación, la autorización por campo, los límites de profundidad, la desactivación de la introspección en algunos escenarios, las persisted queries y las protecciones contra el abuso se vuelven esenciales en los entornos corporativos.
Tabla 1: El principal cambio en GraphQL es el modelo de contrato, no solo la sintaxis.
Aspecto
REST tradicional
GraphQL
Unidad principal
Recursos y endpoints.
Schema tipado y operaciones en un punto final lógico.
Forma de la respuesta
Predominantemente definido por el servidor.
Seleccionado por el cliente dentro del esquema.
Evolución
Nueva representación, nuevos campos o nuevos endpoints.
Evolución del esquema con deprecación de campos y tipos.
Riesgo característico
Endpoints insuficientes o explosivos.
Consultas caras, N+1 y control de complejidad.
13.3 Esquema, tipos, consultas, mutaciones y suscripciones
El esquema describe tipos escalares, objetos, enumeraciones, interfaces, uniones, entradas y operaciones raíz. La operación de consulta representa lectura; La mutación representa cambios de estado; La suscripción representa la recepción asincrónica de eventos bajo una relación en curso. El esquema funciona como un contrato de datos y también como un punto de introspección para herramientas, generación de tipos y experiencia de desarrollo.
Una Query se estructura como un documento declarativo en el que el consumidor especifica los campos deseados. Los fragmentos le permiten reutilizar selecciones, los cambian el nombre de los campos en la respuesta y las variables separan el documento de los valores dinámicos. En Mutation, el consumidor invoca un cambio de estado definido por el servidor, con tipos de entrada claros. En , el cliente se suscribe a un que se emitirá con el tiempo, generalmente a través de o tecnología equivalente.
A pesar de su apariencia compacta, la ejecución no es trivial. Cada campo de esquema se puede asociar con un . Una operación simple, desde el punto de vista del cliente, puede hacer que el servidor active múltiples . Por tanto, el esquema debe diseñarse con disciplina. Los tipos muy genéricos, los campos que ocultan operaciones pesadas y la falta de límites entre dominios dificultan la operación del contrato.
Figura 1: el runtime de ejecuta un árbol de resolvers según la operación solicitada.
Ejemplo de consulta
query ClienteDetallado($id: ID!) {
cliente(id: $id) {
id
nome
saldoActual
pedidos(limit: 5) {
numero
importeTotal
}
}
}
13.4 Resolvedores, , N+1 y federación
Los resolvers son funciones responsables de producir el valor de un campo. En un objeto de cliente, por ejemplo, el campo Saldo actual puede provenir de un núcleo bancario, mientras que los pedidos pueden provenir de una transaccional. Esta granularidad es poderosa, pero también crea el clásico problema N+1: al recuperar una lista de clientes y, para cada uno, obtener datos adicionales de otra fuente, el servidor puede desencadenar un número excesivo de llamadas.
La mitigación típica implica y de corta duración dentro del alcance de la solicitud. Bibliotecas como DataLoader agrupan múltiples solicitudes lógicas en una sola búsqueda en el . El equipo de arquitectura también debería preguntarse si el diseño del esquema induce un acceso ineficiente. En algunos casos, el problema no se puede únicamente con técnicas de ejecución; requiere revisar el modelo e introducir campos o agregados más apropiados.
En organizaciones grandes, la le permite componer un supergrafo a partir de subgrafos mantenidos por diferentes equipos. Este enfoque mejora la autonomía, pero introduce una gobernanza más sofisticada: propiedad de tipos y campos, composición segura, control de versiones de supergrafos, enrutamiento, observabilidad distribuida y protección contra la explosión de cardinalidad. Sin estas prácticas, la federación puede intercambiar el acoplamiento de por el acoplamiento de esquemas.
Punto crítico de operación
no elimina las llamadas entre sistemas; a menudo los esconde detrás del árbol de ejecución. En la , correlacione la consulta recibida con los resolvers activados, los consultados y el costo total de la operación.
13.5 Seguridad, gobernanza y observabilidad en
La seguridad en va más allá de controlar la autenticación de . A medida que el cliente elige la forma de la consulta, el servidor debe limitar la profundidad, la cardinalidad y el costo computacional. Las consultas recursivas, el uso abusivo de fragmentos, la introspección expuesta incorrectamente y los intentos de enumerar campos son vectores relevantes. Las persisted queries reducen el riesgo al permitir solo documentos previamente registrados e identificados mediante .
La autorización puede ocurrir en múltiples niveles: operación, tipo, campo e incluso valor devuelto. Es común que un mismo tipo tenga campos con diferentes sensibilidades, como saldo, límite, CPF enmascarado o historial completo. La política debe ser explícita, comprobable y observable. En las puertas de enlace, una práctica útil es propagar la identidad y el contexto al servidor , mientras que el control de campo detallado permanece en el runtime o en un PDP conectado a él.
La observabilidad también cambia. En , la ruta del punto final ya dice mucho. En , varias operaciones diferentes pueden viajar a través del mismo punto final. Por lo tanto, los nombres de las operaciones, el de persisted queries, el costo calculado, la profundidad, el tiempo de resolución y las llamadas posteriores se convierten en métricas esenciales. Registrar la consulta literal requiere cuidado con la privacidad y el volumen de registros.
Tabla 2: en GraphQL, la gobernanza del schema y la gobernanza de la ejecución van de la mano.
controlar
Objetivo
Ejemplo práctico
Límite de profundidad
Evite la navegación excesiva.
Rechazar consultas por encima de un umbral definido.
Cálculo de complejidad
Controlar el coste estimado.
Asigne pesos a campos costosos.
persisted query
Reducir la superficie de ataque y la carga útil.
Solo acepte hashes previamente registrados.
Autorización por campo
Proteja los datos confidenciales.
Los campos financieros requieren un alcance adicional.
13.6 : descripción general y de protocolo
es un marco moderno que enfatiza los contratos tipados, la generación de código y la comunicación eficiente. En lugar de modelar recursos y representaciones como en , el proveedor define servicios y métodos en archivos .proto. Estos archivos describen mensajes, campos y operaciones, y las herramientas generan stubs de cliente y servidor en varios idiomas.
, o Protobuf, es el mecanismo de serialización más asociado con . Codifica mensajes binarios tipados compactos, con evolución basada en números de campo. Esto produce cargas útiles más pequeñas y un parsing eficiente, especialmente útil en la comunicación interna de microservicios. Sin embargo, la ganancia de rendimiento no debe idealizarse: depende del caso de uso, la red, el idioma, el tamaño de los mensajes y el costo real de la lógica de negocios.
El acoplamiento al contrato es más explícito que en las integraciones puramente textuales. Esto es positivo para la seguridad y la productividad de los tipos, pero requiere disciplina en la evolución: los números de los campos no deben reutilizarse, se deben aplicar reservas cuando se elimina algo y los errores deben manejarse dentro de la semántica , que distingue el estado de transporte y el estado de la aplicación.
Ejemplo de definición de .proto
syntax = "proto3";
service ClienteService {
rpc ObtenerCliente (ClienteRequest) returns (ClienteResponse);
rpc ListarEventos (EventosRequest) returns (stream EventoResponse);
}
message ClienteRequest { string id = 1; }
message ClienteResponse { string id = 1; string nome = 2; }
13.7 Patrones de llamadas, deadlines y
ofrece cuatro patrones principales. En unary, una solicitud produce una respuesta. En el , el cliente envía una solicitud y recibe una secuencia de respuestas. En el client , el cliente envía varios mensajes antes de recibir el resultado consolidado. En el bidireccional, ambas partes intercambian mensajes continuamente, sin una relación uno a uno fija entre el envío y la recepción.
Estos patrones operan sobre /2, aprovechando la , los encabezados comprimidos y el full-duplex por . Aun así, el desarrollador debe comprender conceptos específicos de , como deadlines, cancelación, metadatos y códigos de estado. El es especialmente importante en producción: sin ella, las llamadas pueden permanecer pendientes más allá de lo razonable, consumiendo recursos y degradando cadenas de dependencia enteras.
El manejo de errores también cambia de matices. Una respuesta exitosa en el transporte puede llevar estados de aplicación como NOT_FOUND, PERMISSION_DENIED o UNAVAILABLE. La observabilidad y los reintentos deben considerar estas diferencias. En entornos empresariales, es común traducir parcial o totalmente las llamadas de a / en el borde, preservando solo entre servicios internos.
Figura 2: El contrato admite todo, desde llamadas simples hasta bidireccional completo.
Tabla 3: la eficiencia de gRPC depende de la disciplina operativa, no solo del uso de Protobuf.
Tema
Mejores prácticas
Riesgo si se ignora
Deadlines
Establezca deadlines por método y propague el contexto.
Llamadas atrapadas y saturación en cascada.
Versionado
Evoluciona mensajes con campos opcionales y reservas.
Ruptura de compatibilidad binaria.
Códigos de estado
Mapee cuidadosamente el status de aplicación.
Reintentos incorrectos o diagnósticos confusos.
Streaming
Controlar la backpressure y la cancelación.
Consumo excesivo de memoria y cola.
13.8 Seguridad, malla y gobernanza en
Como se adopta a menudo en la comunicación este-oeste, suele aparecer junto a las mallas de servicios. En este contexto, la malla o el pueden aplicar , identidad de carga de trabajo, reintentos, interrupción de circuitos y telemetría, mientras que el servicio mantiene la semántica del método. Esto simplifica ciertos controles, pero también introduce capas adicionales en el diagnóstico.
En seguridad, el contrato .proto debe tratarse como un artefacto gobernado. Los métodos administrativos, operaciones peligrosas y mensajes con datos confidenciales necesitan un control de autorización explícito. La presencia de conexión interna no implica confianza automática. Además, algunos servidores y puertas de enlace tienen soporte limitado para funciones más avanzadas, especialmente cuando se trata de o .
La gobernanza incluye catálogo de servicios, .proto linting, políticas de nomenclatura, control de versiones, compatibilidad, seguimiento distribuido y pruebas de contratos. En escenarios de integración con equipos front-end, se debe evaluar si la organización desea exponer directamente, utilizar -Web o traducir a / . Cada elección cambia las herramientas, la seguridad del navegador y las capacidades de intermediario.
13.9 : , frames y ciclo de vida
es un protocolo estandarizado para la comunicación persistente full-duplex entre cliente y servidor. El proceso comienza con una solicitud que contiene : y otros encabezados específicos. Si el servidor acepta, responde con el estado 101 Switching Protocols y la conexión comienza a operar con frames . A partir de entonces ya no existe la semántica clásica de una solicitud seguida de una única respuesta.
El protocolo es valioso en aplicaciones que requieren baja latencia y envío de servidor a cliente, como paneles en tiempo real, chats, seguimiento de pedidos, notificaciones operativas y paneles de observabilidad. Por sí solo, no define la semántica del mensaje. La aplicación puede enviar sobres , binarios, mecanografiados o protocolos más elaborados a través del canal. Esto proporciona flexibilidad, pero también requiere estandarización interna.
El ciclo de vida de una conexión incluye autenticación inicial, apertura, intercambio de frames, mantenimiento de la actividad mediante ping/pong y terminación controlada. En plataformas de escala horizontal, el diseño debe considerar la afinidad, la distribución en abanico, la distribución de eventos y la sincronización de estados. Es común utilizar un intermediario o pub/sub detrás del servidor para desacoplar la emisión de eventos del mantenimiento de la conexión.
Figura 3 - sólo participa en el establecimiento; el resto del ciclo ya pertenece al protocolo .
Ejemplo de resumen de apretón de manos de apertura
13.10 Funcionamiento, escalabilidad y seguridad en
Operar miles o millones de conexiones persistentes es muy diferente a operar solicitudes cortas. La infraestructura debe admitir abiertos prolongados, coherentes, protección contra clientes lentos y mecanismos de . Los servidores , firewalls y balanceadores deben configurarse para no finalizar la conexión debido a una inactividad indebida. Además, métricas como conexiones activas, tasa de mensajes, bytes por conexión y motivos de cierre se vuelven esenciales.
La autenticación generalmente ocurre en el inicial o en un primer mensaje de aplicación. Los caducan y es necesario planificar la estrategia de renovación. También debe decidir cómo manejar la autorización dinámica: una conexión abierta no debería garantizar un permiso eterno para todos los eventos futuros. En algunos escenarios, el servidor necesita volver a evaluar el contexto del cliente al publicar eventos confidenciales.
Desde una perspectiva de seguridad, amplía la importancia de la validación del origen, el control de la carga útil, la limitación del tamaño del marco, la serialización segura y la segregación de temas. A medida que la conexión persiste, un error de autorización o distribución puede filtrar rápidamente un gran volumen de información. Los registros estructurados, los ID de conexión, la correlación de identidades de usuarios y los registros de cierre ayudan a solucionar problemas.
Trampa común
Usar sólo porque la aplicación parece "moderna" puede aumentar los costos operativos innecesariamente. Si el caso de uso es una simple notificación unidireccional, el SSE o una encuesta bien diseñada pueden ser suficientes. Elija por comportamiento requerido, no por novedad.
13.11 Comparación práctica entre , y
La comparación más útil no pregunta qué tecnología es mejor en abstracto, sino qué semántica se adapta mejor al problema. es sólido cuando el desafío es brindar al consumidor flexibilidad de consulta sobre un modelo de datos complejo. es fuerte cuando el enfoque es la integración tipada entre servicios, especialmente con alto volumen, baja latencia y . es fuerte cuando el problema principal es mantener un canal abierto para el intercambio continuo de eventos o mensajes.
Estas fuerzas tienen costos. requiere un esquema detallado y una gobernanza de ejecución. requiere herramientas específicas, contratos .proto y comprensión de /2 y sus propios estados. requiere un funcionamiento cuidadoso de las conexiones persistentes, la afinidad y los canales de publicación. A cambio, cada uno resuelve con elegancia problemas que serían más difíciles o menos naturales en un modelo puramente .
Las arquitecturas híbridas son comunes. Un banco digital puede exponer / o a canales digitales, utilizar en servicios de dominio interno y emplear para actualizar posiciones de inversión en tiempo real en la interfaz del cliente. Lo importante es que la organización tenga criterios arquitectónicos claros y no permita la proliferación descontrolada de estándares incompatibles.
Tabla 4 - El mejor criterio de elección es la naturaleza del problema y la operación.
Criterio
GraphQL
gRPC
WebSocket
Problema central
Consulta de datos flexible.
RPC tipado y eficiente.
Canal persistente y full-duplex.
Contrato
Esquema GraphQL.
.proto/servicio y mensajes.
Contrato de aplicación definido externamente.
Transporte común
HTTP.
HTTP/2.
Protocolo WebSocket después de la upgrade HTTP.
Streaming
Suscripciones según implementación.
Nativo en varios modos.
Nativo del canal.
Caché e intermediarios
Menos trivial que REST.
Soporte variable en gateways.
Muy diferente del HTTP tradicional.
Uso recurrente
BFFs y agregación de datos.
Microservicios e integración interna.
Tiempo real, chat y notificaciones.
Figura 4: Muchas plataformas combinan más de una de estas tecnologías con funciones complementarias.
13.12 , estudios de casos y aplicación empresarial
Las puertas de enlace tradicionales se diseñaron principalmente para / , autenticación, transformación, enrutamiento y políticas perimetrales. Cuando una organización adopta , o , debe comprobar hasta qué punto la puerta de enlace puede comprender el protocolo o la semántica de la aplicación. En algunos casos, la puerta de enlace actúa teniendo en cuenta la tecnología; en otros, funciona sólo como o terminador .
Para , las plataformas maduras pueden aplicar autenticación, , limitación de velocidad y observabilidad básica en el borde, mientras que la gobernanza detallada del esquema y la ejecución permanece en el servidor . Para , el soporte debe considerar /2 de extremo a extremo, y . Para , la puerta de enlace debe gestionar el , prolongados, afinidad y políticas adecuadas para conexiones persistentes. En Axway, Azure , Envoy y otros productos, el nivel de soporte varía según la característica y la versión.
Como caso de estudio, imagine una plataforma de inversión. La aplicación móvil utiliza para crear un panel y una cartera. Los microservicios internos de computación y consolidación intercambian datos a través de . El módulo de cotización en tiempo real publica eventos a través de para los clientes conectados. La arquitectura es coherente porque cada elección responde a un comportamiento diferente, y no a un intento de estandarizarlo todo en un único mecanismo.
13.13 y diagnóstico
La de , y requiere separar la semántica de transporte, protocolo y aplicación. En , una respuesta 200 puede contener errores de negocio en el array errors, mientras que en el transporte puede estar en buen estado y el estado final indica PERMISSION_DENIED, DEADLINE_EXCEEDED o UNAVAILABLE. En , el análisis debe considerar el , la permanencia de la conexión, el ping/pong, los códigos de cierre y los mensajes de la aplicación.
Las herramientas y la evidencia también cambian. En , los nombres de las operaciones, la complejidad calculada, el tiempo de resolución y la correlación con los son más útiles que simplemente mirar la . En , los registros de métodos, los metadatos, los deadlines, los , las métricas por código de estado y los por ayudan a localizar cuellos de botella. En , el recuento de conexiones abiertas, la tasa de mensajes, la distribución, la duración promedio, los bytes por cliente y los códigos de cierre apuntan a problemas de escala y comportamiento anómalo.
Desde la perspectiva de la puerta de enlace y la red, es importante saber que pueden ocurrir fallas antes de que la tecnología de la aplicación entre en juego. Un sin compatibilidad total con /2 puede degradar . Un equilibrador de tiempo de espera agresivo puede derribar estables. Una política genérica puede interferir con las cargas útiles de . Es necesario identificar la capa correcta del problema para evitar cambios aleatorios de código.
Tabla 5 - El síntoma correcto depende de la semántica de cada tecnología.
Tecnología
Síntoma
Hipótesis iniciales
GraphQL
Query lenta o error parcial.
Resolver costoso, N+1, backend lento o límite de complejidad.
gRPC
Deadline excedido.
Deadline corto, backend saturado, flujo estancado o pérdida de capacidad.
WebSocket
Desconexiones frecuentes.
Idle timeout, falta de afinidad, ping/pong inadecuado o red inestable.
13.14 Estudios de casos y laboratorios
Caso de estudio 1: un portal de servicios necesita consolidar perfil, productos, límites y últimas interacciones en una única pantalla móvil. El equipo opta por para permitir que el front-end seleccione solo los datos necesarios para cada viaje. La ganancia proviene de la flexibilidad, pero el servidor necesita introducir , persisted queries y autorización por campo para evitar una explosión de costos y la exposición de datos confidenciales.
Estudio de caso 2: un conjunto de microservicios de pagos necesita intercambiar mensajes pequeños con alta cadencia y tipado fuerte. El equipo adopta con Protobuf entre servicios internos, mientras mantiene en el borde para socios externos. El éxito depende de la gestión de archivos .proto, deadlines coherentes, , observabilidad distribuida y una traducción adecuada cuando las llamadas deben atravesar capas de puerta de enlace.
Estudio de caso 3: una plataforma de cotizaciones en tiempo real envía actualizaciones continuas a paneles operativos y aplicaciones móviles. El canal push se implementa con , mientras que la consulta de posición inicial todavía usa . El diseño sólo es sostenible porque existe un intermediario de eventos, escalabilidad horizontal, afinidad de sesión, identificación de conexiones y una política de reautenticación clara cuando el expira.
Laboratorios sugeridos
1) Cree una consulta con fragmentos y observe el árbol de resolución. 2) Defina un servicio con un método unary y otro de , y pruebe los deadlines. 3) Abra un , envíe mensajes, simule ping/pong y observe el close . 4) En todos los casos, recopile evidencia de registros, métricas y .
13.15 Criterios de decisión arquitectónica
La decisión entre estas tecnologías debe institucionalizarse como un conjunto de criterios. Las preguntas útiles incluyen: ¿Necesita el consumidor elegir campos dinámicamente? ¿Existe una gran diversidad de pantallas y agregaciones? ¿El tráfico es predominantemente de servicio a servicio y requiere contratos tipados? ¿El caso de uso implica continuo o envío de eventos? ¿Las puertas de enlace actuales admiten el protocolo de forma nativa? ¿Tiene el equipo la madurez para operar el modelo elegido?
Los criterios no funcionan si son sólo técnicos. Es necesario considerar la incorporación del equipo, la generación de , la capacidad de soporte, la capacitación, la postura de seguridad, el costo de observabilidad, la curva de y el cumplimiento de los estándares corporativos. Una tecnología teóricamente excelente puede resultar inadecuada si la organización no cuenta con los procesos y herramientas para operarla de manera segura.
Por último, la decisión debe revisarse periódicamente. Los productos de puerta de enlace, las mallas de servicios, las plataformas en la nube y las bibliotecas evolucionan. Lo que era inviable en una versión antigua puede resultar sencillo más adelante. Aún así, el cambio tecnológico nunca debería ocurrir simplemente porque el mercado cambia de enfoque; necesita generar beneficios operativos o comerciales mensurables.
Resumen del capítulo
, y amplían el repertorio de integración, pero no compiten en el mismo plano semántico. es una consulta flexible y basada en esquemas; está orientado a servicios, métodos y mensajes tipados; está orientado en torno a un canal persistente full-duplex sobre el cual la aplicación define su propia semántica.
La decisión arquitectónica correcta debe considerar el problema empresarial, la forma del contrato, los requisitos de latencia y , la capacidad de gobernanza, el soporte de la puerta de enlace y la madurez operativa de la organización. Las decisiones tomadas únicamente por el desempeño teórico o las tendencias del mercado tienden a fallar cuando se topan con observabilidad, seguridad y mantenibilidad en el mundo real.
En entornos corporativos es habitual combinar estos modelos con y . Esta combinación funciona bien cuando la propiedad, los estándares contractuales, las políticas de seguridad y los criterios de son explícitos. El principal beneficio del capítulo es permitir al lector reconocer el papel apropiado de cada tecnología en una plataforma moderna.
Siguiente paso del curso
Con los modelos de comunicación alternativos presentados, el siguiente capítulo vuelve al eje de seguridad y gobernanza para diferenciar autenticación y autorización, base conceptual indispensable antes de pasar a las credenciales, 2.0, OpenID Connect y .
Lista de verificación de arquitectura y operación
La elección entre , y se basó en el comportamiento requerido, no solo en la preferencia tecnológica.
El contrato publicado está claramente identificado: esquema , .proto o protocolo de aplicación sobre .
Existe una estrategia de autenticación, autorización y auditoría compatible con el modelo elegido.
Las herramientas de observabilidad capturan la granularidad correcta: operación , método o evento/mensaje .
Los intermediarios de red y la puerta de enlace admiten correctamente , /2, , o conexiones persistentes.
Se definió el modelo de versionado y evolución para esquema, mensajes y clientes.
Existe protección contra el abuso: complejidad de consultas, límites de , cuotas y .
La considera toda la cadena: cliente, puerta de enlace, runtime de la tecnología, y transporte.
Ejercicios
Explique por qué no es simplemente " con un único punto final".
Diferenciar entre recuperación insuficiente, recuperación excesiva y N+1 en .
Describe los cuatro patrones de llamadas de y brinda un caso de uso para cada uno.
Explique el papel de los deadlines en y los riesgos de ignorarlos.
Describa qué cambios en la conexión después del estado 101 de .
Compare los requisitos operativos de y tradicional.
Proponer una arquitectura que utilice o en el borde, entre servicios y para eventos.
Enumere los controles de seguridad importantes para un servidor expuesto públicamente.
Explique cuándo una puerta de enlace actúa teniendo en cuenta el protocolo y cuándo actúa sólo como un genérico.
Analice por qué la comparación más útil entre estas tecnologías debería guiarse por la semántica del problema.
Glosario
Tabla 5 - Vocabulario esencial del capítulo.
Término
Definición
Alias
Función GraphQL para cambiar el nombre de un campo en la respuesta.
batching
Agrupación de múltiples búsquedas lógicas en una llamada más eficiente al backend.
Bidirectional streaming
Intercambio de mensajes bidireccional fluido en gRPC.
Deadline
Deadline máximo aceptado para completar una llamada de gRPC.
Federación GraphQL
Composición de un supergrafo a partir de subgrafos mantenidos por diferentes equipos.
Fragment
Fragment de selección de campos reutilizable en GraphQL.
Introspection
Capacidad para consultar su propio esquema GraphQL.
persisted query
Consulta previamente registrada y normalmente referenciada por hash.
Protocol Buffers
Formato tipado de serialización binaria que se utiliza con frecuencia en gRPC.
resolver
Función que produce el valor de un campo en el runtime de GraphQL.
Sec-WebSocket-Key
Encabezado utilizado en el handshake WebSocket.
Server streaming
Patrón en el que el cliente realiza una solicitud y recibe múltiples respuestas en gRPC.
Subscription
Operación GraphQL para la entrega continua de eventos al consumidor.
Trailer
Metadatos enviados al final de una secuencia HTTP/2, relevantes en gRPC.
Upgrade
Mecanismo HTTP utilizado para la transición inicial al protocolo WebSocket.
Referencias técnicas
Fundación . Especificación .
Fundación . Especificación sobre .
Autores de . Documentación .
Documentación de de protocolo.
. 6455: el protocolo .
. 8441: Arranque de con /2.
Microsoft aprende. Guía para , y en servicios de Azure.
Documentación de del enviado. Compatibilidad con , y /2.
. Hoja de referencia de y seguridad Top 10.
Nota de actualización
Las herramientas, puertas de enlace y mallas evolucionan rápidamente. Antes de publicar políticas o decisiones arquitectónicas, valide la versión específica del producto implementado en su organización que admita , , /2, y .