Error desconocido en el panel Prueba esta API

Estás viendo la documentación de Apigee Edge.
Ir a la documentación de Apigee X.
info

Síntoma

La llamada a la API desde el portal para desarrolladores integrado falla con Unknown Error o una respuesta vacía en el Probar esta API panel.

Mensajes de error

Es posible que veas una respuesta vacía o el siguiente mensaje de error para las solicitudes a la API en el portal integrado:

Unknown Error

En la pestaña Herramientas para desarrolladores > Consola, verás el siguiente error:

Access to XMLHTTPRequest at 'API_URL' from origin 'URL_of_Integrated_DevPortal'
has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is
present on the requested resource.

Un mensaje de error genérico como se ve en la pestaña Herramientas para desarrolladores > Consola es el siguiente:

mensaje de error genérico, haz clic para obtener una imagen más grande Mensaje de error genérico

Causas posibles

Causa Descripción Instrucciones de solución de problemas aplicables para
Falla de política no controlada La respuesta de error predeterminada se envía sin encabezados de CORS cuando falla alguna política en el flujo de tiempo de ejecución de la solicitud a la API. Usuarios de la nube pública de Edge
Valores múltiples para Access-Control-Allow-Origin Usa Add en lugar de Set en la política AssignMessage. Usuarios de la nube pública de Edge

Causa: Falla de política no controlada

Diagnóstico

  1. Verifica que el problema solo ocurra si se espera una respuesta que no sea 2XX.
  2. Para las solicitudes con errores, verifica que haya políticas en el flujo del proxy.
  3. Realiza un seguimiento de la solicitud y verifica si una política con continueOnError="false" falla y genera una falla.
    1. Si es así, verifica si la política AssignMessage CORS se ejecutó o no en el flujo de respuesta de error.
    2. Si no es así, esa es la causa de este problema.
      Esto se debe a que, cuando falla alguna política con el elemento continueOnError="false" , la solicitud ingresa al flujo de respuesta de error. Si no hay un manejo de fallas explícito en el flujo de respuesta de error, se envía la respuesta de error predeterminada correspondiente a la política. Esta respuesta de error no tiene encabezados de CORS. Como resultado, la llamada a la API desde el portal para desarrolladores integrado falla con Unknown error.

En las siguientes capturas de pantalla, se muestra un ejemplo de mensaje de error y un ejemplo de mensaje de éxito.

Ejemplo de mensaje de error en el panel Probar esta API del portal integrado y en la ventana Trace del proxy:

ejemplo de mensaje de error, haz clic para obtener una imagen más grande ejemplo de mensaje de error

Ejemplo de mensaje de éxito en el panel Probar esta API del portal integrado y en la ventana Trace del proxy:

Ejemplo de mensaje de éxito, haz clic para obtener una imagen más grande Ejemplo de mensaje de éxito

Solución

  1. En lugar de depender del mensaje de error predeterminado, se debe implementar una regla de falla para controlar la respuesta de error. Incluye una política AssignMessage CORS con los encabezados adecuados y la invoca en FaultRule.
  2. A veces, es posible que no sea factible tener una regla de falla definida para cada falla; por lo tanto, se puede implementar una regla de falla predeterminada para ejecutar la política AssignMessage CORS:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="proxy-endpoint-name">
    <Description/>
    <!-- Add a default fault rule to add CORS -->
    <DefaultFaultRule name="fault-rule">
        <Step>
            <Name>add-cors</Name>
        </Step>
    </DefaultFaultRule>
    <FaultRules/>
    <!--
    <Flows />
    Rest of the proxy definition
    -->
</ProxyEndpoint>

Causa: Valores múltiples para Access-Control-Allow-Origin

Diagnóstico

  1. Verifica el valor del encabezado Access-Control-Allow-Origin en una sesión de seguimiento.
  2. El encabezado Access-Control-Allow-Origin solo permite establecer un valor único para ser establecido. Si se establece más de un valor, se puede causar un problema de CORS y el portal para desarrolladores no podrá renderizar ninguna respuesta.
  3. Si el valor del encabezado Access-Control-Allow-Origin en el seguimiento se ve de la siguiente manera:
    *,*
    eso significa que tanto el servidor de destino como la política AssignMessage CORS establecen su valor.
  4. Esto podría suceder cuando un usuario usó el <Add> element para Access-Control-Allow-Origin en una política, o el backend establece varios valores.

Ejemplo de Access-Control-Allow-Origin igual a *,*:

ejemplo de varios valores utilizados, haz clic para obtener una imagen más grande ejemplo de varios valores usados

Ejemplo de Access-Control-Allow-Origin igual a *:

ejemplo de valor único utilizado, haz clic para obtener una imagen más grande Ejemplo de valor único utilizado

Ejemplo con <Add>:

Ejemplo de uso de Agregar, haz clic para obtener una imagen más grande Ejemplo: Uso de la adición

Ejemplo con <Set>:

Ejemplo con Set, haz clic para obtener una imagen más grande Ejemplo con Set

Solución

  1. El enfoque recomendado es usar el <Set> element (en lugar del <Add> element) para Access-Control-Allow-Origin ya que solo se permite un valor único.
  2. Como alternativa, establece el encabezado Access-Control-Allow-Origin en un solo lugar: la política AssignMessage CORS o el servidor de destino.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="set-cors">
    <DisplayName>Set CORS</DisplayName>
    <FaultRules/>
    <Properties/>
    <Set>
        <Headers>
            <Header name="Access-Control-Allow-Origin">*</Header>
        </Headers>
    </Set>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

Si aún necesitas asistencia de Apigee, consulta Se debe recopilar información de diagnóstico.

Se debe recopilar información de diagnóstico

Recopila la siguiente información de diagnóstico y, luego, comunícate con Asistencia de Apigee Edge:

  • Nombre de la organización
  • Nombre del entorno
  • Nombre del proxy de API
  • Comando curl completo que se usó para reproducir el error
  • Archivo de seguimiento de las solicitudes a la API
  • Resultado completo de la respuesta del servidor de destino o backend junto con el tamaño de la carga útil