Tutorial: Criar e publicar um produto
APLICA-SE A: todas as camadas do Gerenciamento de API
No Gerenciamento de API do Azure, um produto contém uma ou mais APIs, uma cota de uso e os termos de uso. Uma vez publicado o produto, os desenvolvedores podem assinar o produto e começar a usar as APIs dele.
Neste tutorial, você aprende a:
- Criar e publicar um produto
- Adicionar uma API ao produto
- Acessar APIs do produto
Pré-requisitos
- Conheça a terminologia do Gerenciamento de API do Azure.
- Conclua o seguinte guia de início rápido: Criar uma instância do Gerenciamento de API do Azure.
- Além disso, conclua o seguinte tutorial: Importar e publicar sua primeira API.
Criar e publicar um produto
Entre no portal do Azure e navegue até sua instância do Gerenciamento de API.
No painel de navegação esquerdo, selecione Produtos>+ Adicionar.
Na janela Adicionar produto, insira os valores descritos na tabela a seguir para criar seu produto.
Nome Descrição Nome de exibição O nome que você deseja que seja mostrado no portal do desenvolvedor. Descrição Forneça informações sobre o produto, como sua finalidade, as APIs a que ele fornece acesso, entre outros detalhes. Estado Selecione Publicado se você quiser publicar o produto no portal do desenvolvedor. Antes que as APIs em um produto possam ser descobertas pelos desenvolvedores, o produto deve ser publicado. Por padrão, novos produtos não são publicados. Exige assinatura Selecione se um usuário precisa assinar para usar o produto (o produto está protegido) e uma chave de assinatura precisa ser usada para acessar as APIs do produto. Se uma assinatura não for necessária (se o produto estiver aberto), uma chave de assinatura não será necessária para acessar as APIs do produto. Confira Acesso a APIs de produto mais adiante neste artigo. Requer aprovação Selecione se desejar que um administrador analise e aceite ou rejeite as tentativas de assinatura para o produto. Se não for selecionado, as tentativas de assinatura serão aprovadas automaticamente. Limite de contagem de assinaturas Opcionalmente, limite a contagem de várias assinaturas simultâneas. Termos legais Você pode incluir os termos de uso para o produto que os assinantes devem aceitar a fim de usá-lo. APIs Selecione uma ou mais APIs. Você também pode adicionar APIs após criar o produto. Para obter mais informações, confira Adicionar APIs a um produto mais adiante neste artigo.
Se o produto estiver aberto (não exigir uma assinatura), você só poderá adicionar uma API que não estiver associada a outro produto aberto.Selecione Criar para criar o novo produto.
Cuidado
Tenha cuidado ao configurar um produto que não exija uma assinatura. Essa configuração pode ser excessivamente permissiva e deixar as APIs do produto mais vulneráveis a determinadas ameaças à segurança da API.
Adicionar mais configurações
Continue configurando o produto depois de salvá-lo. Na instância do Gerenciamento de API, selecione o produto na janela Produtos. Adicione ou atualize:
Item | Descrição |
---|---|
Configurações | Metadados e estado do produto |
APIs | APIs associadas ao produto |
Políticas | Políticas aplicadas às APIs do produto |
Controle de acesso | Visibilidade do produto para desenvolvedores ou convidados |
Assinaturas | Assinantes do produto |
Adicionar APIs a um produto
Os produtos são associações de uma ou mais APIs. Você pode incluir muitas APIs e oferecê-las aos desenvolvedores no portal do desenvolvedor. Durante a criação do produto, você pode adicionar uma ou mais APIs existentes. Você também pode adicionar uma API ao produto mais tarde, seja na página Configurações do produto ou durante a criação de uma API.
Adicionar uma API a um produto existente
- No painel de navegação esquerdo da sua instância do Gerenciamento de API, selecione Produtos.
- Selecione um produto e escolha APIs.
- Selecione + Adicionar API.
- Selecione uma ou mais APIs e escolha Selecionar.
Acesso a APIs de produto
Depois de publicar um produto, os desenvolvedores podem acessar as APIs. Dependendo de como o produto está configurado, talvez seja necessário assinar o produto para obter acesso.
Produto protegido – os desenvolvedores devem primeiro assinar um produto protegido para obter acesso às APIs do produto. Quando eles assinam, recebem uma chave de assinatura que pode acessar qualquer API nesse produto. Se você criou a instância do Gerenciamento de API, você já é um administrador, portanto, está inscrito em cada produto, por padrão. Para obter mais informações, confira Assinaturas no Gerenciamento de API do Azure.
Quando um cliente faz uma solicitação de API com uma chave de assinatura de produto válida, o Gerenciamento de API processa a solicitação e permite o acesso no contexto do produto. As políticas e as regras de controle de acesso configuradas para o produto podem ser aplicadas.
Dica
Você pode criar ou atualizar a assinatura de um usuário para um produto com chaves de assinatura personalizadas por meio de uma API REST ou de um comando do PowerShell.
Produto aberto – os desenvolvedores podem acessar as APIs de um produto aberto sem uma chave de assinatura. No entanto, você pode configurar outros mecanismos para proteger o acesso de cliente às APIs, incluindo OAuth 2.0, certificados do cliente e restrição de endereços IP do chamador.
Observação
Os produtos abertos não estão listados no portal do desenvolvedor para que os desenvolvedores aprendam mais sobre ele ou os assinem. Elas só são visíveis para o grupo Administradores. Você precisará usar outro mecanismo para informar os desenvolvedores sobre as APIs que podem ser acessadas sem uma chave de assinatura.
Quando um cliente faz uma solicitação de API sem uma chave de assinatura:
O Gerenciamento de API verifica se a API está associada a um produto aberto. Uma API pode ser associada a, no máximo, um produto aberto.
Se o produto aberto existir, ele processará a solicitação no contexto desse produto aberto. As políticas e as regras de controle de acesso configuradas para o produto aberto podem ser aplicadas.
Para obter mais informações, confira Como o Gerenciamento de API lida com solicitações com ou sem chaves de assinatura.
Próximas etapas
Neste tutorial, você aprendeu a:
- Criar e publicar um produto
- Adicionar uma API ao produto
- Acessar APIs do produto
Prosseguir para o próximo tutorial:
Neste artigo, você usará o Terraform para criar uma instância de Gerenciamento de API do Azure, uma API, um produto, um grupo e associações entre o produto e a API e o produto e o grupo.
O Terraform permite a definição, a visualização e a implantação da infraestrutura de nuvem. Usando o Terraform, você cria arquivos de configuração usando sintaxe de HCL. A sintaxe da HCL permite que você especifique o provedor de nuvem, como o Azure, e os elementos que compõem sua infraestrutura de nuvem. Depois de criar os arquivos de configuração, você cria um plano de execução que permite visualizar as alterações de infraestrutura antes de serem implantadas. Depois de verificar as alterações, aplique o plano de execução para implantar a infraestrutura.
- Especifique a versão necessária do Terraform e dos provedores necessários.
- Defina variáveis para o prefixo do nome do grupo de recursos, o local do grupo de recursos e o formato e o valor do conteúdo para a importação de definição de API.
- Crie um grupo de recursos com um nome aleatório.
- Crie um serviço de Gerenciamento de API com um nome aleatório.
- Crie uma API com um nome aleatório.
- Crie um produto com um nome aleatório no serviço de Gerenciamento de API.
- Crie um grupo com um nome aleatório.
- Associe a API ao produto.
- Associe o grupo ao produto.
- Gera os valores aleatórios, como os nomes do grupo de recursos, serviço de Gerenciamento de API, API, produto e grupo.
Pré-requisitos
Criar uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.
Instale e configure o Terraform.
Implementar o código do Terraform
Observação
O código de exemplo deste artigo está localizado no repositório do GitHub do Azure Terraform. Você pode exibir o arquivo de log que contém os resultados do teste das versões atuais e anteriores do Terraform.
Veja mais artigos e exemplos de código mostrando como usar o Terraform para gerenciar recursos do Azure.
Crie um diretório no qual testar e executar o código de exemplo do Terraform e faça dele o diretório atual.
Crie um arquivo chamado
main.tf
, depois insira o código a seguir:resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_string" "apim_service_name" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_api_management" "apim_service" { name = "${random_string.apim_service_name.result}-apim-service" location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name publisher_name = "Example Publisher" publisher_email = "publisher@example.com" sku_name = "Developer_1" tags = { Environment = "Example" } policy { xml_content = <<XML <policies> <inbound /> <backend /> <outbound /> <on-error /> </policies> XML } } resource "random_string" "api_name" { length = 8 lower = true numeric = false special = false upper = false } resource "random_string" "content_value" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_api_management_api" "api" { name = "${random_string.api_name.result}-api" resource_group_name = azurerm_resource_group.rg.name api_management_name = azurerm_api_management.apim_service.name revision = "1" display_name = "${random_string.api_name.result}-api" path = "example" protocols = ["https", "http"] description = "An example API" import { content_format = var.open_api_spec_content_format content_value = var.open_api_spec_content_value } } resource "random_string" "product_name" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_api_management_product" "product" { product_id = "${random_string.product_name.result}-product" resource_group_name = azurerm_resource_group.rg.name api_management_name = azurerm_api_management.apim_service.name display_name = "${random_string.product_name.result}-product" subscription_required = true approval_required = false published = true description = "An example Product" } resource "random_string" "group_name" { length = 8 lower = true numeric = false special = false upper = false } resource "azurerm_api_management_group" "group" { name = "${random_string.group_name.result}-group" resource_group_name = azurerm_resource_group.rg.name api_management_name = azurerm_api_management.apim_service.name display_name = "${random_string.group_name.result}-group" description = "An example group" } resource "azurerm_api_management_product_api" "product_api" { resource_group_name = azurerm_resource_group.rg.name api_management_name = azurerm_api_management.apim_service.name product_id = azurerm_api_management_product.product.product_id api_name = azurerm_api_management_api.api.name } resource "azurerm_api_management_product_group" "product_group" { resource_group_name = azurerm_resource_group.rg.name api_management_name = azurerm_api_management.apim_service.name product_id = azurerm_api_management_product.product.product_id group_name = azurerm_api_management_group.group.name }
Crie um arquivo chamado
outputs.tf
, depois insira o código a seguir:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "apim_service_name" { value = azurerm_api_management.apim_service.name } output "api_name" { value = azurerm_api_management_api.api.name } output "product_name" { value = azurerm_api_management_product.product.product_id } output "group_name" { value = azurerm_api_management_group.group.name } output "service_id" { description = "The ID of the API Management Service created" value = azurerm_api_management.apim_service.id } output "gateway_url" { description = "The URL of the Gateway for the API Management Service" value = azurerm_api_management.apim_service.gateway_url } output "service_public_ip_addresses" { description = "The Public IP addresses of the API Management Service" value = azurerm_api_management.apim_service.public_ip_addresses } output "api_outputs" { description = "The IDs, state, and version outputs of the APIs created" value = { id = azurerm_api_management_api.api.id is_current = azurerm_api_management_api.api.is_current is_online = azurerm_api_management_api.api.is_online version = azurerm_api_management_api.api.version version_set_id = azurerm_api_management_api.api.version_set_id } } output "product_id" { description = "The ID of the Product created" value = azurerm_api_management_product.product.id } output "product_api_id" { description = "The ID of the Product/API association created" value = azurerm_api_management_product_api.product_api.id } output "product_group_id" { description = "The ID of the Product/Group association created" value = azurerm_api_management_product_group.product_group.id }
Crie um arquivo chamado
providers.tf
, depois insira o código a seguir:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Crie um arquivo chamado
variables.tf
, depois insira o código a seguir:variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "open_api_spec_content_format" { type = string default = "swagger-link-json" description = "The format of the content from which the API Definition should be imported. Possible values are: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link." validation { condition = contains(["openapi", "openapi+json", "openapi+json-link", "openapi-link", "swagger-json", "swagger-link-json", "wadl-link-json", "wadl-xml", "wsdl", "wsdl-link"], var.open_api_spec_content_format) error_message = "open_api_spec_content_format must be one of the following: openapi, openapi+json, openapi+json-link, openapi-link, swagger-json, swagger-link-json, wadl-link-json, wadl-xml, wsdl and wsdl-link." } } variable "open_api_spec_content_value" { type = string default = "https://petstore3.swagger.io/api/v3/openapi.json" description = "The Content from which the API Definition should be imported. When a content_format of *-link-* is specified this must be a URL, otherwise this must be defined inline." }
Inicializar Terraform
Execute terraform init para inicializar a implantação do Terraform. Esse comando baixa o provedor do Azure necessário para gerenciar seus recursos do Azure.
terraform init -upgrade
Pontos principais:
- O parâmetro
-upgrade
atualiza os plug-ins do provedor necessários para a versão mais recente que esteja em conformidade com as restrições de versão da configuração.
Criar um plano de execução Terraform
Execute o comando terraform plan para criar um plano de execução.
terraform plan -out main.tfplan
Pontos principais:
- O comando
terraform plan
cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer qualquer alteração nos recursos reais. - O parâmetro opcional
-out
permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-out
garante que o plano que você examinou seja exatamente o que é aplicado.
Aplicar um plano de execução do Terraform
Execute terraform apply para aplicar o plano de execução à sua infraestrutura de nuvem.
terraform apply main.tfplan
Pontos principais:
- O exemplo de comando do
terraform apply
pressupõe que você executou oterraform plan -out main.tfplan
anteriormente. - Se você especificou um nome de arquivo diferente para o parâmetro
-out
, use esse mesmo nome de arquivo na chamada paraterraform apply
. - Se você não usou o parâmetro
-out
, chameterraform apply
sem nenhum parâmetro.
Verifique os resultados
Execute az apim show
para exibir o Gerenciamento de API do Azure:
az apim show --<apim_service_name> --<resource_group_name>
Limpar os recursos
Quando você não precisar mais dos recursos criados por meio o Terraform, execute as seguintes etapas:
Execute terraform plan e especifique o sinalizador
destroy
.terraform plan -destroy -out main.destroy.tfplan
Pontos principais:
- O comando
terraform plan
cria um plano de execução, mas não o executa. Em vez disso, ele determina quais ações são necessárias para criar a configuração especificada em seus arquivos de configuração. Esse padrão permite que você verifique se o plano de execução corresponde às suas expectativas antes de fazer qualquer alteração nos recursos reais. - O parâmetro opcional
-out
permite que você especifique um arquivo de saída para o plano. Usar o parâmetro-out
garante que o plano que você examinou seja exatamente o que é aplicado.
- O comando
Execute a aplicação do Terraform para aplicar o plano de execução.
terraform apply main.destroy.tfplan
Solucionar problemas do Terraform no Azure
Solucionar problemas comuns ao usar o Terraform no Azure.