Compartir vía


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

Productos de API Management en el portal

Requisitos previos

Crear y publicar un producto

  1. Inicie sesión en Azure Portal y vaya a la instancia de API Management.

  2. En el panel de navegación izquierdo, seleccione Productos>+ Agregar.

    Adición de un producto en Azure Portal

  3. En la ventana Agregar producto, escriba los valores que se describen en la tabla siguiente para crear el producto.

    Adición de una ventana del 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.
  4. 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

  1. En el panel de navegación izquierdo de la instancia de API Management, seleccione Productos.
  2. Seleccione un producto y luego API.
  3. Seleccione + Agregar API.
  4. Seleccione una o varias API y luego Seleccionar.

Adición de una API a un producto existente

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

Implementación del código de Terraform

  1. Cree un directorio en el que probar y ejecutar el código de ejemplo de Terraform y conviértalo en el directorio actual.

  2. 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
    }
    
  3. 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
    }
    
  4. 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 {}
    }
    
  5. 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     = "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."
    }
    

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 a terraform apply.
  • Si no ha utilizado el parámetro -out, llame a terraform 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:

  1. 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.
  2. 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.

Pasos siguientes