Propagación del contexto de la solicitud

Reflejar los encabezados y los parámetros de consulta de las solicitudes entrantes de la API de « HTTP » en las llamadas salientes a la API REST.

Visión general

OMS puede capturar los encabezados y los parámetros de consulta de las solicitudes entrantes de tipo « HTTP » y ponerlos a disposición durante toda la ejecución del servicio, lo que ofrece las siguientes ventajas:

  • Reutilización de tokens
  • Propagación del ID de correlación
  • Modelos de seguridad basados en puertas de enlace
  • Integraciones de MCP y API Gateway

Modelo de seguridad

La propagación del contexto de las solicitudes utiliza un modelo de seguridad basado en una lista blanca:

  • Propagación de encabezados basada en una lista blanca
  • Consentimiento explícito mediante la configuración
  • Acceso de solo lectura para los clientes
  • No se producen fugas automáticas en los colectores

Lista blanca de encabezados

Encabezados incluidos por defecto en la lista blanca :

Authorization, Content-Type, Accept, X-*

Estos encabezados están incluidos en la lista blanca de forma predeterminada:

  • Authorization - Tokens de autenticación
  • Content-Type - Solicitar tipo de contenido
  • Accept - Preferencia de tipo de contenido de la respuesta
  • X-* - Todos los encabezados que empiecen por X- como X-Correlation-ID, X-Request-ID, X-API-Key

Puedes anular la lista blanca predeterminada configurando la siguiente propiedad:

yfs.rest.allowed.headers=Authorization,Content-Type,Accept,X-*,Custom-Header
Nota: Solo los encabezados incluidos en la lista blanca están disponibles mediante #{h:} la sintaxis.

Propagación de encabezados

Puedes anular los encabezados entrantes especificando un valor diferente en la definición del servicio.

Ejemplo: Utiliza el encabezado de entrada :
<Header Name="Authorization" Value="#{h:authorization}"/>
Ejemplo: Sobrescribir con un valor estático :
<Header Name="Authorization" Value="Bearer my-static-token"/>
Ejemplo: Sobrescribir con la propiedad :
<Header Name="Authorization" Value="Bearer ${my.override.token}"/>
Lista blanca de encabezados

Encabezados incluidos por defecto en la lista blanca :

Authorization, Content-Type, Accept, X-*

Estos encabezados están incluidos en la lista blanca de forma predeterminada:

  • Authorization - Tokens de autenticación
  • Content-Type - Solicitar tipo de contenido
  • Accept - Preferencia de tipo de contenido de la respuesta
  • X-* - Todos los encabezados que empiecen por X- como X-Correlation-ID, X-Request-ID, X-API-Key

Puedes anular la lista blanca predeterminada configurando la siguiente propiedad:

yfs.rest.allowed.headers=Authorization,Content-Type,Accept,X-*,Custom-Header
Nota: Solo los encabezados incluidos en la lista blanca están disponibles mediante #{h:} la sintaxis.

Propagación de parámetros de consulta

Puedes pasar los parámetros de consulta entrantes a la llamada a la API REST saliente utilizando la #{q:paramName} sintaxis.

Ejemplos :
- `#{q:itemId}` - Propagates the `itemId` query parameter
- `#{q:page}` - Propagates the `page` query parameter
- `#{q:limit}` - Propagates the `limit` query parameter

También puedes utilizar valores estáticos («value»), propiedades ( ${property} ) o extraer datos de JSON/XML ($.json o /xpath) para los parámetros de consulta. Para obtener más información, consulte «Resolución dinámica de variables ».

Acceso programático

Puedes acceder a los encabezados de entrada y a los parámetros de consulta mediante código personalizado o extensiones de la interfaz de usuario utilizando la clase YCPRequestContextUtil de utilidad.

Métodos disponibles :

Obtener un encabezado específico :

String authHeader = YCPRequestContextUtil.getHeader(env, "Authorization");
Obtener todos los encabezados :
Map<String, String> allHeaders = YCPRequestContextUtil.getAllHeaders(env);

Obtener un parámetro de consulta específico :

String itemId = YCPRequestContextUtil.getQueryParameter(env, "itemId");
Obtener todos los parámetros de consulta :
Map<String, String> allParams = YCPRequestContextUtil.getAllQueryParameters(env);

Ejemplo de uso en código personalizado :

import com.yantra.yfs.japi.util.YCPRequestContextUtil;

public class MyCustomService {
    public void execute(YFSEnvironment env, Document input) {
        // Get Authorization header
        String authToken = YCPRequestContextUtil.getHeader(env, "Authorization");
        
        // Get correlation ID
        String correlationId = YCPRequestContextUtil.getHeader(env, "X-Correlation-ID");
        
        // Get query parameter
        String itemId = YCPRequestContextUtil.getQueryParameter(env, "itemId");
        
        // Use these values in your custom logic
        if (authToken != null) {
            // Process with auth token
        }
    }
}
Nota: Solo se puede acceder a los encabezados incluidos en la lista blanca. Los parámetros de consulta están siempre disponibles.

Ejemplo completo

Escenario : Transmitir el token de autenticación, el ID de correlación y el parámetro de consulta a una API de inventario externa.

Solicitud recibida :

POST /executeFlow/checkInventory?itemId=ITEM001
Authorization: Bearer abc123
X-Correlation-ID: corr-789

Configuración de la definición del servicio :

Las llamadas REST salientes incluyen automáticamente

  • El mismo token de autorización
  • El mismo ID de correlación
  • El mismo parámetro de consulta

No se necesita código Java. No es necesario manipular la carga útil.