Condividi tramite


Integrare Azure API Management con l'API Fabric per GraphQL

L'integrazione di Gestione API di Azure con l'API di Microsoft Fabric per GraphQL migliora significativamente le funzionalità dell'API offrendo funzionalità affidabili di scalabilità e sicurezza. Gestione API agisce come un gateway di livello aziendale che aggiunge funzionalità avanzate, tra cui la gestione delle identità, la limitazione del ritmo, la memorizzazione delle risposte nella cache, la protezione dalle minacce e il monitoraggio centralizzato, il tutto senza modificare la configurazione della tua API Fabric.

Instradando le richieste GraphQL tramite Gestione API, è possibile ridimensionare per gestire un maggiore traffico, implementare criteri di sicurezza sofisticati e ottenere visibilità sui modelli di utilizzo delle API nell'organizzazione.

Questo articolo guida l'integrazione di APIM con Fabric API per GraphQL, la configurazione dell'autenticazione dell'identità gestita e l'implementazione di politiche di caching e limitazione del rate.

Chi usa Gestione API di Azure con GraphQL

L'integrazione della Gestione delle API è utile per:

  • Architetti aziendali che espongono i dati di Fabric tramite un gateway API centralizzato e regolamentato per l'accesso a livello di organizzazione
  • Amministratori dell'infrastruttura che implementano criteri di limitazione della frequenza, memorizzazione nella cache e sicurezza per proteggere la capacità e i dati dell'infrastruttura
  • Team di sicurezza IT che richiedono l'autenticazione avanzata, l'autorizzazione e la protezione dalle minacce per l'accesso ai dati di Fabric
  • Team della piattaforma che gestiscono e governano più API GraphQL Fabric tra reparti e unità aziendali

Usa l'integrazione di API Management quando sono necessarie funzionalità di gestione API di livello aziendale, come la limitazione della velocità, il caching, i criteri di sicurezza e la governance centralizzata per le API GraphQL di Fabric.

Prerequisiti

Prima di iniziare, assicurarsi di disporre di:

  • API Fabric per GraphQL già creata. In caso contrario, vedere Creare un'API per GraphQL o usare Iniziare con il database SQL di esempio nell'API per il portale GraphQL
  • Un'istanza di Gestione API. Per istruzioni sull'installazione, vedere Creare un'istanza di Gestione API
  • Autorizzazioni per creare identità gestite e configurare politiche di gestione delle API

Aggiungere un'API GraphQL di Fabric a Gestione API di Azure

Il primo passaggio per l'integrazione di Gestione delle API con Fabric consiste nell'importare l'API GraphQL in Gestione delle API di Azure. Questo processo crea un proxy che instrada le richieste tramite APIM (Gestione API) mantenendo la connessione alle origini dati di Fabric. Importando l'API, si stabilisce la base per l'aggiunta di funzionalità aziendali come criteri di autenticazione, memorizzazione nella cache e limitazione della frequenza.

Il processo di importazione richiede due informazioni dall'API GraphQL di Fabric: l'URL dell'endpoint (in cui Gestione API invia le richieste) e il file di schema (che definisce la struttura API e le operazioni disponibili).

Esportare i dettagli dell'API GraphQL

Prima di tutto, raccogliere le informazioni necessarie dall'API GraphQL di Fabric:

  1. Aprire l'API GraphQL nel portale di Fabric

  2. Nella barra multifunzione selezionare Copia endpoint per ottenere l'URL dell'API

  3. Selezionare Esporta schema per scaricare il file di schema GraphQL nel dispositivo locale

    Screenshot della barra multifunzione di GraphQL API.

Importare l'API in APIM

Con l'URL dell'endpoint e il file di schema pronti, è ora possibile registrare l'API GraphQL in Gestione API. In questo modo viene creata una definizione API usata da Gestione API per convalidare le richieste, generare la documentazione e applicare i criteri. Lo schema caricato definisce le query e le mutazioni che i client possono eseguire.

  1. Passare all'istanza di Gestione API nel portale di Azure

  2. Selezionare API>+ Aggiungi API

  3. Selezionare l'icona GraphQL

  4. Nella schermata Crea da schema GraphQL specificare:

    • Nome visualizzato: nome descrittivo per l'API
    • Nome: identificatore DELL'API
    • Endpoint dell'API GraphQL: l'URL dell'endpoint copiato da Fabric
  5. Selezionare Carica schema e scegliere il file di schema scaricato

    Screenshot dalla schermata di creazione in APIM dalla pagina dello schema GraphQL.

Configurare l'autenticazione dell'identità gestita

Ora che l'API GraphQL è registrata in Gestione API, è necessario configurare la modalità di autenticazione di Gestione API con Fabric. Le identità gestite offrono un metodo di autenticazione sicuro e senza password che elimina la necessità di memorizzare le credenziali nella configurazione di Gestione API. Azure gestisce automaticamente il ciclo di vita dell'identità e gestisce l'acquisizione dei token, rendendo questo approccio più sicuro e più semplice da gestire rispetto ai metodi di autenticazione tradizionali.

La configurazione dell'autenticazione prevede tre passaggi principali: la creazione dell'identità gestita in Azure, la concessione delle autorizzazioni per accedere all'area di lavoro e alle origini dati dell'infrastruttura e la configurazione di Gestione API per l'uso di questa identità durante l'esecuzione di richieste a Fabric.

Creare e assegnare un'identità gestita

Per prima cosa, crea l'identità gestita che il Gestione API utilizza per l'autenticazione:

  1. Creare un'identità gestita assegnata dall'utente nel portale di Azure.
  2. Prendere nota dell'ID client dell'identità gestita. È necessario l'ID client per la configurazione dei criteri.

Concedere le autorizzazioni per l'identità gestita in Fabric

Dopo aver creato l'identità gestita, è necessario concedergli le autorizzazioni per accedere alle risorse di Fabric. L'identità gestita deve accedere sia all'elemento dell'API GraphQL che a tutte le origini dati a cui si connette ,ad esempio lakehouse o warehouse. L'aggiunta dell'identità come membro dell'area di lavoro è l'approccio più semplice perché concede l'accesso a tutti gli elementi dell'area di lavoro contemporaneamente.

  1. Aprire l'area di lavoro Fabric contenente l'API GraphQL
  2. Selezionare Gestisci accesso
  3. Aggiungere l'identità gestita, ad esempio apim-id, con almeno il ruolo Collaboratore

Screenshot dei permessi dell'area di lavoro.

Suggerimento

Per un controllo più granulare, è possibile concedere le autorizzazioni direttamente a singoli elementi dell'infrastruttura (l'API e le relative origini dati) anziché l'accesso a livello di area di lavoro. Il controllo granulare è particolarmente importante se l'API usa l'autenticazione Single Sign-On (SSO). Per altre informazioni, vedere Riepilogo delle autorizzazioni e dell'autenticazione.

Configurare APIM per utilizzare l'identità gestita

Con le autorizzazioni concesse in Fabric, è necessario specificare ad APIM quale identità gestita utilizzare. Questa associazione permette ad APIM di autenticarsi come quell'identità quando si effettuano richieste alla tua API GraphQL di Fabric.

  1. Nel portale di Azure, passa alla tua istanza di Gestione API
  2. Passare a Sicurezza>Identità gestite
  3. Aggiungere l'identità gestita assegnata dall'utente creata in precedenza

Aggiungere criteri di autenticazione

Il passaggio di autenticazione finale consiste nell'aggiungere un criterio APIM che ottiene un token di accesso utilizzando l'identità gestita e lo include nelle richieste a Fabric. Questa politica viene eseguita a ogni richiesta, gestendo automaticamente l'acquisizione e il rinnovo del token. Il criterio usa l'elemento authentication-managed-identity per ottenere un token per la risorsa Fabric API, quindi lo aggiunge all'intestazione Authorization.

  1. Nell'API GraphQL in APIM, selezionare la scheda Criteri API

  2. Modificare i criteri di elaborazione in ingresso

  3. Aggiungere il codice XML seguente in <inbound><base/>:

    <authentication-managed-identity 
        resource="https://analysis.windows.net/powerbi/api" 
        client-id="YOUR-MANAGED-IDENTITY-CLIENT-ID" 
        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>
    
  4. Sostituire YOUR-MANAGED-IDENTITY-CLIENT-ID con l'ID client dell'identità gestita

  5. Salvare la politica

Testare la connessione

Prima di procedere per aggiungere la memorizzazione nella cache e la limitazione della frequenza, verificare che l'installazione dell'autenticazione funzioni correttamente. Il test garantisce ora che eventuali problemi riscontrati in un secondo momento non siano correlati alla configurazione dell'autenticazione.

  1. In APIM, navigare alla tua API GraphQL
  2. Passare alla scheda Test
  3. Eseguire una query di esempio o una mutazione per confermare il funzionamento della connessione

Screenshot del test riuscito nel portale di Gestione API.

Configurare la memorizzazione nella cache delle risposte

La memorizzazione nella cache delle risposte riduce significativamente la latenza per i chiamanti API e riduce il carico back-end nelle origini dati di Fabric. APIM supporta la memorizzazione nella cache predefinita o le istanze Redis esterne. Per le API GraphQL, la memorizzazione nella cache usa il corpo della richiesta (la query GraphQL) come chiave della cache, assicurando che le query identiche restituiscono risposte memorizzate nella cache.

Vantaggi della memorizzazione nella cache delle risposte GraphQL:

  • Latenza ridotta: le risposte memorizzate nella cache restituiscono immediatamente senza eseguire query su Fabric
  • Minore consumo di capacità: meno richieste a Fabric riducono l'utilizzo di CU (unità di capacità)
  • Maggiore scalabilità: gestire più utenti simultanei senza aumentare il carico back-end

Aggiungere politica di memorizzazione nella cache

Per implementare la memorizzazione nella cache, modificare i criteri di autenticazione esistenti per aggiungere la logica di ricerca e archiviazione della cache. La politica controlla le risposte memorizzate nella cache prima di inoltrare le richieste a Fabric e memorizza le risposte riuscite per un uso futuro. Questo esempio completo di criteri mostra come interagiscono l'autenticazione e la memorizzazione nella cache:

<policies>
    <inbound>
        <base />
        <!-- Authenticate with managed identity -->
        <authentication-managed-identity 
            resource="https://analysis.windows.net/powerbi/api" 
            client-id="YOUR-MANAGED-IDENTITY-CLIENT-ID" 
            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>
        <!-- Check if response is cached -->
        <cache-lookup-value 
            key="@(context.Request.Body.As<String>(preserveContent: true))" 
            variable-name="cachedResponse" 
            default-value="not_exists" />
    </inbound>
    <backend>
        <!-- Only forward request if not cached -->
        <choose>
            <when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") == "not_exists")">
                <forward-request />
            </when>
        </choose>
    </backend>
    <outbound>
        <base />
        <choose>
            <!-- Return cached response if it exists -->
            <when condition="@(context.Variables.GetValueOrDefault<string>("cachedResponse") != "not_exists")">
                <set-body>@(context.Variables.GetValueOrDefault<string>("cachedResponse"))</set-body>
            </when>
            <!-- Cache successful responses for 60 seconds -->
            <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>
    <on-error>
        <base />
    </on-error>
</policies>

Funzionamento di questo criterio:

  1. In ingresso: esegue l'autenticazione con l'identità gestita e verifica se la risposta viene memorizzata nella cache in base alla query GraphQL
  2. Back-end: ignora l'inoltro della richiesta a Fabric se esiste una risposta memorizzata nella cache
  3. In uscita: restituisce risposte memorizzate nella cache o memorizza nella cache nuove risposte riuscite per 60 secondi

Verificare che la memorizzazione nella cache funzioni

Per confermare che le richieste vengono memorizzate nella cache:

  1. In APIM, eseguire la stessa query GraphQL due volte

  2. Tracciare la chiamata API per visualizzare i riscontri nella cache

    Screenshot di un hit della cache nel portale APIM.

Ottimizzare la durata della cache

Nell'esempio viene utilizzata una durata della cache di 60 secondi. Modificare la durata in base ai requisiti di aggiornamento dei dati:

  • Aggiornamenti ad alta frequenza: usare durate più brevi (10-30 secondi) per i dati che cambiano di frequente
  • Dati statici o di riferimento: usare durate più lunghe (5-60 minuti) per i dati che cambiano raramente
  • Requisiti in tempo reale: non memorizzare nella cache le query che devono restituire sempre i dati più recenti

Per scenari di caching avanzati, tra cui l'invalidazione della cache e la configurazione esterna di Redis, vedere Criteri di caching di APIM.

Limitazione della velocità

È possibile limitare il numero di chiamate API che un client può effettuare in un periodo di tempo specifico. Ecco una regola di limitazione della frequenza di esempio che puoi aggiungere sotto <inbound><base/> per applicare non più di due chiamate ogni 60 secondi per un determinato utente.

<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" />

Dopo l'invio di più di due chiamate API in un minuto, viene visualizzato un messaggio di errore:

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

Per ulteriori informazioni su come configurare i criteri di limitazione della velocità in Gestione delle API, vedere la documentazione.

Procedure consigliate

Quando si integra APIM con Fabric API per GraphQL, seguire queste raccomandazioni:

Security

  • Usare le identità gestite: preferisce le identità gestite rispetto alle chiavi API o alle stringhe di connessione per l'autenticazione
  • Implementare privilegi minimi: concedere solo le autorizzazioni minime necessarie per l'identità gestita
  • Abilitare solo HTTPS: Configurare APIM per rifiutare le richieste HTTP e forzare l'uso di HTTPS
  • Convalidare gli input: usare i criteri di APIM per convalidare le query GraphQL prima di inoltrarle a Fabric

Performance

  • Memorizzare nella cache i dati a cui si accede di frequente: identificare le query comuni e impostare le durate della cache appropriate
  • Monitorare il tasso di successo della cache: utilizzare le analisi di APIM per tenere traccia dell'efficacia della cache
  • Ottimizzare i limiti di velocità: bilanciare l'esperienza utente con la protezione della capacità
  • Usare la distribuzione regionale: Distribuire APIM nella stessa area della capacità del Fabric

Monitoraggio e governance

  • Abilitare la diagnostica: configurare il logging diagnostico di API Management per tenere traccia dell'utilizzo dell'API
  • Configurare gli avvisi: creare avvisi per le violazioni e gli errori del limite di frequenza
  • Versiona le tue API: usa la versione di APIM per gestire eventuali modifiche di rilievo
  • Documentare le API: usare il portale per sviluppatori di API Management per fornire la documentazione delle API

Ottimizzazione dei costi

  • Limiti di frequenza adeguati: Impostare limiti allineati al livello di capacità
  • Monitorare il consumo di capacità: Tenere traccia sia dell'utilizzo della capacità di Gestione API che della capacità di Fabric
  • Usare la memorizzazione nella cache in modo strategico: bilanciare i requisiti di aggiornamento con il risparmio di capacità
  • Esaminare i modelli di utilizzo: analizzare regolarmente le query che usano la maggior parte delle risorse

Riassunto

L'integrazione dell'API di Microsoft Fabric per GraphQL con Azure Gestione API unisce le potenti funzionalità di dati di Fabric con le caratteristiche avanzate di gateway API a livello aziendale di Azure Gestione API. Questa combinazione fornisce:

  • Sicurezza avanzata: autenticazione dell'identità gestita, protezione dalle minacce e controllo degli accessi basato su criteri
  • Scalabilità migliorata: memorizzazione nella cache delle risposte, limitazione della frequenza e distribuzione del carico tra più back-end
  • Prestazioni migliori: riduzione della latenza tramite la memorizzazione nella cache e il routing delle richieste ottimizzato
  • Governance centralizzata: monitoraggio unificato, controllo delle versioni e gestione in più API
  • Controllo dei costi: limitazione della velocità e memorizzazione nella cache per ridurre il consumo di capacità dell'infrastruttura

Seguendo i passaggi di configurazione e le procedure consigliate in questo articolo, è possibile creare un livello API affidabile, sicuro e scalabile che supporti i carichi di lavoro di produzione nell'organizzazione.