Tutorial: Crear y publicar un producto
SE APLICA A: todos los niveles de API Management
En Azure API Management, un producto contiene una o varias API, una cuota de uso y las condiciones de uso. Una vez publicado un producto, los desarrolladores pueden suscribirse y comenzar a usar las API del producto.
En este tutorial, aprenderá a:
- Crear y publicar un producto
- Agregar una API al producto
- Acceder a las API de productos
Requisitos previos
- Conocer la terminología de API Management de Azure.
- Complete el siguiente inicio rápido: Creación de una instancia de Azure API Management.
- Además, realice el siguiente tutorial: Importación y publicación de la primera API.
Crear y publicar un producto
Inicie sesión en Azure Portal y vaya a la instancia de API Management.
En el panel de navegación izquierdo, seleccione Productos>+ Agregar.
En la ventana Agregar producto, escriba los valores que se describen en la tabla siguiente para crear el producto.
Nombre Descripción Nombre para mostrar El nombre que desea que aparezca en el portal para desarrolladores. Descripción Proporcione información sobre el producto, como su finalidad, las API a las que proporciona acceso y otros detalles. Valor Seleccione Publicado si quiere publicar el producto en el portal para desarrolladores. Para que los desarrolladores puedan detectar las API de un producto, el producto debe publicarse. De forma predeterminada, los nuevos productos no están publicados. Requiere suscripción Seleccione si un usuario debe suscribirse para usar el producto (el producto está protegido) y si se debe usar una clave de suscripción para acceder a las API del producto. Si no se requiere una suscripción (el producto está abierto), no se requiere una clave de suscripción para acceder a las API del producto. Consulte Acceder a las API de producto más adelante en este artículo. Requiere aprobación Seleccione si quiere que un administrador revise y acepte o rechace los intentos de suscripción a este producto. Si no se selecciona, los intentos de suscripción se aprueban automáticamente. Límite de recuento de suscripciones Tiene la opción de limitar el número de varias suscripciones simultáneas. Términos legales Puede incluir los términos de uso del producto que deben aceptar los suscriptores para usarlo. API existentes Seleccione una o varias API. También puede agregar las API después de crear el producto. Para más información, consulte Incorporación de las API a un producto más adelante en este artículo.
Si el producto está abierto (no requiere una suscripción), solo puede agregar una API que no esté asociada ya a otro producto abierto.Seleccione Crear para crear el producto.
Precaución
Tenga cuidado al configurar un producto que no requiera una suscripción. Esta configuración puede ser excesivamente permisiva y hacer que la API del producto sea más vulnerable a determinadas amenazas de seguridad de API.
Adición de más configuraciones
Siga configurando el producto después de guardarlo. En la instancia de API Management, seleccione el producto en la ventana Productos. Agregue o actualice:
Elemento | Descripción |
---|---|
Configuración | Los metadatos y el estado del producto |
API existentes | Las API asociadas al producto. |
Directivas | Las directivas aplicadas a las API de producto |
Control de acceso | La visibilidad del producto para desarrolladores o invitados |
Suscripciones | Los suscriptores a los productos |
Incorporación de API a un producto
Los productos son asociaciones de una o varias API. Puede incluir muchas API y ofrecerlas a los desarrolladores mediante el portal para desarrolladores. Durante la creación del producto, puede agregar una o varias API existentes. También puede agregar las API al producto más adelante, bien desde la página Configuración de los productos o durante la creación de una API.
Adición de una API a un producto existente
- En el panel de navegación izquierdo de la instancia de API Management, seleccione Productos.
- Seleccione un producto y luego API.
- Seleccione + Agregar API.
- Seleccione una o varias API y luego Seleccionar.
Acceder a las API de productos
Después de que se publique un producto, los desarrolladores pueden acceder a las API. Dependiendo de cómo se configure el producto, es posible que deban suscribirse al producto para acceder.
Producto protegido: los desarrolladores deben suscribirse primero a un producto protegido para obtener acceso a las API del producto. Cuando se suscriben, obtienen una clave de suscripción que puede acceder a cualquier API de ese producto. Si creó la instancia de API Management, ya es un administrador, así que de forma predeterminada está suscrito a todos los productos. Para más información, consulte Suscripciones en Azure API Management.
Cuando un cliente realiza una solicitud de API con una clave de suscripción de producto válida, API Management procesa la solicitud y permite el acceso en el contexto del producto. Es posible aplicar directivas y reglas de control de acceso configuradas para el producto.
Sugerencia
Puede crear o actualizar la suscripción del usuario a un producto con claves de suscripción personalizadas mediante la API REST o un comando de PowerShell.
Abrir producto: los desarrolladores pueden acceder a las API de un producto abierto sin una clave de suscripción. Sin embargo, puede configurar otros mecanismos para proteger el acceso del cliente a las API, como OAuth 2.0, certificados de cliente y restricción de las direcciones IP del autor de la llamada.
Nota
Los productos abiertos no aparecen en el portal para desarrolladores para que puedan obtener información sobre los mismos o suscribirse a ellos. Solo son visibles para el grupo Administradores. Deberá usar otro mecanismo para informar a los desarrolladores sobre las API a las que se puede acceder sin una clave de suscripción.
Cuando un cliente realiza una solicitud de API sin tener una clave de suscripción:
API Management comprueba si la API está asociada a un producto abierto. Una API se puede asociar como máximo a un producto abierto.
Si el producto abierto existe, procesa la solicitud en el contexto de ese producto abierto. Se pueden aplicar directivas y reglas de control de acceso configuradas para el producto abierto.
Para más información, vea Cómo gestiona API Management solicitudes con o sin claves de suscripción.
Pasos siguientes
En este tutorial, ha aprendido a:
- Crear y publicar un producto
- Agregar una API al producto
- Acceder a las API de productos
Avance hasta el siguiente tutorial:
Create blank API and mock API responses (Creación de una API en blanco y simulación de respuestas de API)
En este artículo, usará Terraform para crear una instancia de Azure API Management, una API, un producto, un grupo y asociaciones entre el producto y la API, y el producto y el grupo.
Terraform habilita la definición, vista previa e implementación de la infraestructura en la nube. Con Terraform, se crean archivos de configuración mediante la sintaxis de HCL. La sintaxis de HCL permite especificar el proveedor de la nube, como Azure, y los elementos que componen la infraestructura de la nube. Después de crear los archivos de configuración, se crea un plan de ejecución que permite obtener una vista previa de los cambios de infraestructura antes de implementarlos. Una vez que compruebe los cambios, aplique el plan de ejecución para implementar la infraestructura.
- Especifique la versión necesaria de Terraform y los proveedores necesarios.
- Defina variables para el prefijo del nombre del grupo de recursos, la ubicación del grupo de recursos y el formato de contenido y el valor de la importación de la definición de API.
- Cree un grupo de recursos con un nombre aleatorio.
- Cree un servicio de API Management con un nombre aleatorio.
- Cree una API con un nombre aleatorio.
- Cree un producto con un nombre aleatorio en el servicio API Management.
- Cree un grupo con un nombre aleatorio.
- Asocie la API al producto.
- Asocie el grupo al producto.
- Genera los valores aleatorios, como los nombres del grupo de recursos, el servicio API Management, la API, el producto y el grupo.
Requisitos previos
Cree una cuenta de Azure con una suscripción activa. También puede crear una cuenta de forma gratuita.
Instale y configure Terraform.
Implementación del código de Terraform
Nota
El código de ejemplo de este artículo se encuentra en el repositorio de GitHub de Azure Terraform. Puedes ver el archivo de registro que contiene los resultados de las pruebas de las versiones actuales y anteriores de Terraform.
Consulte más artículos y código de ejemplo sobre el uso Terraform para administrar recursos de Azure.
Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.
Cree un archivo llamado
main.tf
e inserte el siguiente código: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 }
Cree un archivo llamado
outputs.tf
e inserte el siguiente código: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 }
Cree un archivo llamado
providers.tf
e inserte el siguiente código:terraform { required_version = ">=1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }
Cree un archivo llamado
variables.tf
e inserte el siguiente código: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 = "http://conferenceapi.azurewebsites.net/?format=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." }
Inicialización de Terraform
Para inicializar la implementación de Terraform, ejecute terraform init. Este comando descarga el proveedor de Azure necesario para administrar los recursos de Azure.
terraform init -upgrade
Puntos clave:
- El parámetro
-upgrade
actualiza los complementos de proveedor necesarios a la versión más reciente que cumpla con las restricciones de versión de la configuración.
Creación de un plan de ejecución de Terraform
Ejecute terraform plan para crear un plan de ejecución.
terraform plan -out main.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
Aplicación de un plan de ejecución de Terraform
Ejecute terraform apply para aplicar el plan de ejecución a su infraestructura en la nube.
terraform apply main.tfplan
Puntos clave:
- El comando
terraform apply
de ejemplo asume que ejecutóterraform plan -out main.tfplan
previamente. - Si especificó un nombre de archivo diferente para el parámetro
-out
, use ese mismo nombre de archivo en la llamada aterraform apply
. - Si no ha utilizado el parámetro
-out
, llame aterraform apply
sin ningún parámetro.
Verificación de los resultados
Ejecute az apim show
para ver Azure API Management:
az apim show --<apim_service_name> --<resource_group_name>
Limpieza de recursos
Cuando ya no necesite los recursos creados a través de Terraform, realice los pasos siguientes:
Ejecute el comando terraform plan y especifique la marca
destroy
.terraform plan -destroy -out main.destroy.tfplan
Puntos clave:
- El comando
terraform plan
crea un plan de ejecución, pero no lo ejecuta. En su lugar, determina qué acciones son necesarias para crear la configuración especificada en los archivos de configuración. Este patrón le permite comprobar si el plan de ejecución coincide con sus expectativas antes de realizar cambios en los recursos reales. - El parámetro
-out
opcional permite especificar un archivo de salida para el plan. El uso del parámetro-out
garantiza que el plan que ha revisado es exactamente lo que se aplica.
- El comando
Ejecute terraform apply para aplicar el plan de ejecución.
terraform apply main.destroy.tfplan
Solución de problemas de Terraform en Azure
Solución de problemas comunes al usar Terraform en Azure.