Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
A integração do Gerenciamento de API do Azure (APIM) com a API do Microsoft Fabric para GraphQL pode melhorar significativamente os recursos da sua API, fornecendo escalabilidade robusta e recursos de segurança, como gerenciamento de identidade, limitação de taxa e cache. Vamos guiá-lo através do processo de instalação e configuração desses recursos.
Adicionar uma API Fabric GraphQL ao Gerenciamento de API do Azure
Para esta seção, assumimos que você tenha uma API GraphQL no Fabric e uma instância APIM já em execução. Caso contrário, pode seguir as instruções sobre como criar uma API GraphQL na Fabric ou pode clicar em Iniciar com uma base de dados SQL de exemplo no portal API para GraphQL para iniciar a partir de uma nova API.
Para começar, recupere o seu endpoint da API no portal do Fabric, acessando o item GraphQL e clicando no botão Copiar endpoint na barra de ferramentas. Você também precisará salvar seu esquema GraphQL em um arquivo, o que você pode fazer clicando no botão Exportar esquema e salvando-o em um arquivo em seu dispositivo local:
Agora navegue até sua instância de Gerenciamento de API no portal do Azure e selecione APIs>+ Adicionar API.
Escolha o ícone GraphQL e, na tela APIM Create from GraphQL schema , preencha os campos obrigatórios, como Nome para exibição, Nome e ponto de extremidade da API GraphQL. Selecione Carregar esquema e use o arquivo de esquema que você baixou anteriormente:
Usando identidades gerenciadas com APIM e API para GraphQL no Fabric
Em seguida, precisamos configurar uma política para autenticação usando uma identidade gerenciada para lidar com a autenticação dessa API. Você pode criar uma identidade gerenciada no portal do Azure ou usando qualquer uma das ferramentas disponíveis para fazer isso.
Agora temos uma credencial de identidade gerenciada que podemos usar para autenticação, precisamos conceder permissões para o item GraphQL no Fabric. Para simplificar, adicionamos a identidade gerenciada (neste exemplo, apim-id) como um membro do espaço de trabalho onde a API GraphQL e sua fonte de dados estão localizadas:
Se preferir ativar o acesso diretamente aos itens do Fabric, como a própria API e as fontes de dados associadas à API, como um banco de dados LakeHouse ou SQL, necessita conceder as permissões adequadas para a identidade gerida em cada item, especialmente no caso de terem sido associados à API usando autenticação única Sign-On (SSO). Você pode encontrar mais informações no resumo de permissões.
Depois de conceder suas permissões de credencial para seu espaço de trabalho, API Fabric GraphQL e/ou fontes de dados anexadas a ele, você precisará indicar ao APIM que deseja aproveitar essa credencial para executar a autenticação. De volta ao console do APIM, vá paraIdentidades gerenciadas> e adicione a mesma identidade gerenciada atribuída ao usuário que você está usando para acessar a API do Fabric GraphQL.
Em seguida, vá para a guia "Políticas de API" na API do GraphQL que você criou anteriormente e, em seguida, edite a política de processamento de entrada adicionando as seguintes entradas abaixo <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>
Certifique-se de substituir o ID do cliente no trecho acima pelo ID do cliente da identidade gerenciada. Guarde a política para continuar.
Agora, de volta à API, vá para a guia Teste e confirme que você pode emitir consultas e/ou mutações nos dados do Fabric via GraphQL:
Testando a conexão bem-sucedida entre o APIM e o Fabric GraphQL
Armazenamento em cache
APIs e operações no Gerenciamento de API podem ser configuradas com cache de resposta. A colocação em cache de respostas pode reduzir significativamente a latência dos autores de chamadas à API e a carga de back-end dos fornecedores de API. O APIM tem suporte para cache interno ou você pode optar por usar sua própria instância do Redis. Em ambos os casos, você precisa definir sua política de cache. Aqui temos a política anterior alterada com uma configuração de cache simples que funcionaria para a maioria dos cenários:
<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>
Você pode confirmar que as solicitações estão sendo armazenadas em cache rastreando uma consulta ou mutação da API do GraphQL no portal do APIM:
Para cenários avançados de cache, consulte a documentação do APIM sobre cache.
Limitação de Velocidade
Você pode limitar o número de chamadas de API que um cliente pode fazer em um período de tempo específico. Aqui está uma entrada de política de limitação de taxa que pode ser adicionada abaixo de <inbound><base/>
e que impõe um máximo de 2 chamadas a cada 60 segundos para um determinado utilizador:
<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" />
Depois de enviar mais de 2 chamadas de API em um minuto, você receberá uma mensagem de erro:
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 58 seconds."
}
Para obter mais detalhes sobre como configurar políticas de limitação de taxa no APIM, consulte a documentação.
A integração da API do Microsoft Fabric para GraphQL com o Gerenciamento de API do Azure reúne o melhor dos dois mundos: os recursos de dados avançados do Fabric e os recursos de gateway de nível empresarial do APIM. Ao configurar identidades gerenciadas, você habilita a autenticação segura no Fabric. Com o cache personalizado e as políticas de limitação de taxa, você ganha um controle refinado sobre o desempenho, o custo e a experiência do usuário, adaptado às características exclusivas das APIs do GraphQL.
Essa configuração não apenas fornece mais opções para proteger seus dados de malha, mas também fornece a escalabilidade e a observabilidade necessárias para dar suporte a cargas de trabalho de produção entre equipes e locatários.