Compartir a través de


Integración de Azure API Management (APIM) con Fabric API for GraphQL

La integración de Azure API Management (APIM) con la API de Microsoft Fabric para GraphQL puede mejorar significativamente las funcionalidades de la API proporcionando una escalabilidad y características de seguridad sólidas, como la administración de identidades, la limitación de velocidad y el almacenamiento en caché. Le guiaremos a través del proceso de configuración y ajuste de estas características.

Adición de una API de Fabric GraphQL a Azure API Management

En esta sección, la suposición es que usted tiene una API de GraphQL en Fabric y una instancia de APIM que ya están en funcionamiento. Si no es así, puede seguir las instrucciones sobre cómo crear una API de GraphQL en Fabric o puede hacer clic en Iniciar con una base de datos SQL de ejemplo en el portal de API for GraphQL para empezar desde una nueva API.

Para empezar, obtenga su punto de conexión de API desde el portal de Fabric yendo a su elemento GraphQL y haciendo clic en el botón Copiar punto de conexión en la cinta de opciones. También deberá guardar el esquema de GraphQL en un archivo, lo que puede lograr haciendo clic en el botón Exportar esquema y guardarlo en un archivo en el dispositivo local:

Captura de pantalla de la barra de herramientas de API para GraphQL.

Ahora vaya a la instancia de API Management en Azure Portal y seleccione API>+ Agregar API.

Elija el icono GraphQL y, en la pantalla de APIM Crear desde el esquema de GraphQL, rellene los campos necesarios, como nombre para mostrar, nombre, y punto de conexión de la API GraphQL. Seleccione Cargar esquema y use el archivo de esquema que descargó anteriormente:

Captura de pantalla de la pantalla de creación de APIM desde el esquema GraphQL.

Uso de identidades administradas con APIM y API para GraphQL en Fabric

A continuación, es necesario configurar una directiva para la autenticación mediante una identidad administrada para controlar la autenticación de esta API. Puede crear una identidad administrada en Azure Portal o mediante cualquiera de las herramientas disponibles para hacerlo.

Ahora tenemos una credencial de identidad administrada que podemos usar para la autenticación, necesitamos concederle permisos al elemento GraphQL en Fabric. Por motivos de simplicidad, agregamos la identidad administrada (en este ejemplo, apim-id) como miembro del área de trabajo donde se encuentran graphQL API y su origen de datos:

Captura de pantalla de los permisos del área de trabajo.

Si prefiere habilitar el acceso directamente a los elementos de Fabric, como la PROPIA API y los orígenes de datos adjuntos a la API, como una base de datos LakeHouse o SQL, debe conceder los permisos adecuados para la identidad administrada en cada elemento, especialmente en caso de que se asociaran a la API mediante la autenticación Sign-On de inicio de sesión único (SSO). Puede encontrar más información en el resumen de permisos.

Una vez que haya concedido los permisos de credenciales al área de trabajo, Fabric GraphQL API o orígenes de datos asociados, deberá indicar a APIM que desea aprovechar esa credencial para realizar la autenticación. De vuelta a la consola de APIM, vaya aIdentidades administradas de > y agregue la misma identidad administrada asignada por el usuario que usa para acceder a Fabric GraphQL API.

A continuación, vaya a la pestaña "API Policies" (Directivas de API) de GraphQL API que creó anteriormente y, a continuación, edite la directiva de procesamiento de entrada agregando las siguientes entradas a continuación <inbound><base/>:

<authentication-managed-identity 
            resource="https://analysis.windows.net/powerbi/api" 
            client-id="MANAGED IDENTITY CLIENT ID GOES HERE" 
            output-token-variable-name="token-variable" 
            ignore-error="false" />
<set-header name="Authorization" exists-action="override">
            <value>@("Bearer " + (string)context.Variables["token-variable"])</value>
</set-header>

Asegúrese de reemplazar el identificador de cliente en el fragmento de código anterior por el identificador de cliente de la identidad administrada. Guarde la política para continuar.

Ahora, vuelva a la API, vaya a la pestaña Prueba y confirme que puede emitir consultas o mutaciones en los datos de Fabric a través de GraphQL:

Captura de pantalla de la prueba exitosa en el portal de APIM.

Prueba de la conexión correcta entre APIM y Fabric GraphQL

Almacenamiento en caché

Las API y operaciones de API Management pueden configurarse con almacenamiento en caché de respuesta. El almacenamiento en caché de respuesta puede reducir considerablemente la latencia de los llamadores de API y la carga de back-end de los proveedores de API. APIM admite el almacenamiento en caché integrado, o puede optar por usar su propia instancia de Redis. En cualquier caso, debe definir su política de almacenamiento en caché. Aquí tenemos la directiva anterior modificada con una configuración de almacenamiento en caché sencilla que funcionaría para la mayoría de los escenarios:

<policies>
    <inbound>
        <base />
        <authentication-managed-identity 
            resource="https://analysis.windows.net/powerbi/api" 
            client-id="MANAGED IDENTITY CLIENT ID GOES HERE" 
            output-token-variable-name="token-variable" 
            ignore-error="false" />
        <set-header name="Authorization" exists-action="override">
            <value>@("Bearer " + (string)context.Variables["token-variable"])</value>
        </set-header>
        <cache-lookup-value 
            key="@(context.Request.Body.As<String>(preserveContent: true))" 
            variable-name="cachedResponse" 
            default-value="not_exists" />
    </inbound>
    <!-- Control if and how the requests are forwarded to services  -->
    <backend>
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") == "not_exists")">
                <forward-request />
            </when>
        </choose>
    </backend>
    <!-- Customize the responses -->
    <outbound>
        <base />
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") != "not_exists")">
                <set-body>@(context.Variables.GetValueOrDefault<string>("cachedResponse"))</set-body>
            </when>
            <when condition="@((context.Response.StatusCode == 200) && (context.Variables.GetValueOrDefault<string>("cachedResponse") == "not_exists"))">
                <cache-store-value key="@(context.Request.Body.As<String>(preserveContent: true))" value="@(context.Response.Body.As<string>(preserveContent: true))" duration="60" />
            </when>
        </choose>
    </outbound>
    <!-- Handle exceptions and customize error responses  -->
    <on-error>
        <base />
    </on-error>
</policies>

Puede confirmar que las solicitudes se almacenan en caché mediante el seguimiento de una consulta de GraphQL API o una mutación en el portal de APIM:

Captura de pantalla del acierto de la caché en el portal de APIM.

Para ver escenarios avanzados de almacenamiento en caché, consulte la documentación de APIM sobre el almacenamiento en caché.

Limitación de frecuencia

Puede limitar el número de llamadas API que un cliente puede realizar en un período de tiempo específico. Esta es una entrada de directiva de limitación de frecuencia de muestreo que puede agregar a continuación <inbound><base/> que aplica no más de 2 llamadas cada 60 segundos para un usuario determinado:

<rate-limit-by-key 
    calls="2" 
    renewal-period="60" 
    counter-key="@(context.Request.Headers.GetValueOrDefault("Authorization"))" 
    increment-condition="@(context.Response.StatusCode == 200)" 
    remaining-calls-variable-name="remainingCallsPerUser" />

Después de enviar más de 2 llamadas API en un minuto, recibirá un mensaje de error:

{
    "statusCode": 429,
    "message": "Rate limit is exceeded. Try again in 58 seconds."
}

Para más información sobre cómo configurar directivas de limitación de velocidad en APIM, consulte la documentación.

La integración de Microsoft Fabric API para GraphQL con Azure API Management reúne lo mejor de ambos mundos: las funcionalidades de datos enriquecidas de Fabric y las características de puerta de enlace de nivel empresarial de APIM. Mediante la configuración de identidades administradas, se habilita la autenticación segura en Fabric. Con las directivas personalizadas de limitación de velocidad y almacenamiento en caché, obtiene un control específico sobre el rendimiento, el costo y la experiencia del usuario, adaptadas a las características únicas de las API de GraphQL.

Esta configuración no solo proporciona más opciones para proteger los datos de Fabric, sino que también proporciona la escalabilidad y la observabilidad necesarias para admitir cargas de trabajo de producción en equipos e inquilinos.