Dela via


Självstudier: Skapa och publicera en produkt

GÄLLER FÖR: Alla API Management-nivåer

I Azure API Management innehåller en produkt en eller flera API:er, en användningskvot och användningsvillkoren. När en produkt har publicerats kan utvecklare prenumerera på produkten och börja använda produktens API:er.

I den här självstudien lär du dig att:

  • Skapa och publicera en produkt
  • Lägga till ett API till produkten
  • Åtkomst till produkt-API:er

API Management-produkter i portalen

Förutsättningar

Skapa och publicera en produkt

  1. Logga in på Azure Portal och gå till din API Management-instans.

  2. I det vänstra navigeringsfönstret väljer du Produkter>+ Lägg till.

    Lägg till produkt i Azure Portal

  3. I fönstret Lägg till produkt anger du värden som beskrivs i följande tabell för att skapa produkten.

    Lägg till produktfönster

    Name beskrivning
    Display name Namnet som du vill att det ska visas i utvecklarportalen.
    beskrivning Ange information om produkten, till exempel dess syfte, de API:er som den ger åtkomst till och annan information.
    Tillstånd Välj Publicerad om du vill publicera produkten på utvecklarportalen. Innan API:erna i en produkt kan identifieras av utvecklare måste produkten publiceras. Som standard avpubliceras nya produkter.
    Prenumeration krävs Välj om en användare måste prenumerera för att använda produkten (produkten är skyddad) och en prenumerationsnyckel måste användas för att få åtkomst till produktens API:er. Om en prenumeration inte krävs (produkten är öppen) krävs ingen prenumerationsnyckel för att få åtkomst till produktens API:er. Se Åtkomst till produkt-API:er senare i den här artikeln.
    Godkännande krävs Välj om du vill att en administratör ska granska och godkänna eller avvisa prenumerationsförsök till den här produkten. Om du inte har valt det godkänns prenumerationsförsök automatiskt.
    Antal tillåtna prenumerationer Du kan också begränsa antalet samtidiga prenumerationer.
    Juridiska villkor Du kan inkludera användningsvillkor för produkten som prenumeranter måste godkänna för att kunna använda produkten.
    API:er Välj en eller flera API:er. Du kan också lägga till API:er när du har skapat produkten. Mer information finns i Lägga till API:er i en produkt senare i den här artikeln.

    Om produkten är öppen (kräver ingen prenumeration) kan du bara lägga till ett API som inte är associerat med en annan öppen produkt.
  4. Välj Skapa för att skapa din nya produkt.

Varning

Var försiktig när du konfigurerar en produkt som inte kräver en prenumeration. Den här konfigurationen kan vara alltför tillåtande och kan göra produktens API:er mer sårbara för vissa API-säkerhetshot.

Lägga till fler konfigurationer

Fortsätt att konfigurera produkten när du har sparat den. I din API Management-instans väljer du produkten i fönstret Produkter . Lägg till eller uppdatera:

Objekt beskrivning
Inställningar Produktmetadata och tillstånd
API:er API:er som är associerade med produkten
Principer Principer som tillämpas på produkt-API:er
Åtkomstkontroll Produktsynlighet för utvecklare eller gäster
Prenumerationer Produktprenumeranter

Lägga till API:er till en produkt

Produkter är associationer med en eller flera API:er. Du kan inkludera flera API:er och erbjuda dem till utvecklare via utvecklarportalen. När produkten skapas kan du lägga till en eller flera befintliga API:er. Du kan också lägga till API:er i produkten senare, antingen från sidan Produktinställningar eller när du skapar ett API.

Lägga till en API till en befintlig produkt

  1. I det vänstra navigeringsfältet för din API Management-instans väljer du Produkter.
  2. Välj en produkt och välj sedan API:er.
  3. Välj + Lägg till API.
  4. Välj en eller flera API:er och sedan Välj.

Lägga till en API till en befintlig produkt

Åtkomst till produkt-API:er

När du har publicerat en produkt kan utvecklare komma åt API:erna. Beroende på hur produkten har konfigurerats kan de behöva prenumerera på produkten för åtkomst.

  • Skyddad produkt – Utvecklare måste först prenumerera på en skyddad produkt för att få åtkomst till produktens API:er. När de prenumererar får de en prenumerationsnyckel som kan komma åt alla API:er i produkten. Om du har skapat API Management-instansen är du redan administratör, så du prenumererar som standard på varje produkt. Mer information finns i Prenumerationer i Azure API Management.

    När en klient gör en API-begäran med en giltig produktprenumerationsnyckel bearbetar API Management begäran och tillåter åtkomst i produktens kontext. Principer och åtkomstkontrollregler som konfigurerats för produkten kan tillämpas.

    Dricks

    Du kan skapa eller uppdatera en användares prenumeration till en produkt med anpassade prenumerationsnycklar via ett REST-API eller PowerShell-kommando.

  • Öppna produkt – Utvecklare kan komma åt en öppen produkts API:er utan en prenumerationsnyckel. Du kan dock konfigurera andra mekanismer för att skydda klientåtkomsten till API:erna, inklusive OAuth 2.0, klientcertifikat och begränsa anroparens IP-adresser.

    Kommentar

    Öppna produkter visas inte i utvecklarportalen där utvecklare kan lära sig mer om eller prenumerera på. De är bara synliga för gruppen Administratörer . Du måste använda en annan mekanism för att informera utvecklare om API:er som kan nås utan en prenumerationsnyckel.

    När en klient gör en API-begäran utan en prenumerationsnyckel:

    • API Management kontrollerar om API:et är associerat med en öppen produkt. Ett API kan associeras med högst en öppen produkt.

    • Om den öppna produkten finns bearbetas begäran i kontexten för den öppna produkten. Principer och åtkomstkontrollregler som konfigurerats för den öppna produkten kan tillämpas.

Mer information finns i Hur API Management hanterar begäranden med eller utan prenumerationsnycklar.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa och publicera en produkt
  • Lägga till ett API till produkten
  • Åtkomst till produkt-API:er

Gå vidare till nästa kurs:

I den här artikeln använder du Terraform för att skapa en Azure API Management-instans, ett API, en produkt, en grupp och associationer mellan produkten och API:et samt produkten och gruppen.

Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du körningsplanen för att distribuera infrastrukturen.

  • Ange den version av Terraform som krävs och vilka leverantörer som krävs.
  • Definiera variabler för resursgruppens namnprefix, resursgruppsplats och innehållsformat och värde för API-definitionsimporten.
  • Skapa en resursgrupp med ett slumpmässigt namn.
  • Skapa en API Management-tjänst med ett slumpmässigt namn.
  • Skapa ett API med ett slumpmässigt namn.
  • Skapa en produkt med ett slumpmässigt namn i API Management-tjänsten.
  • Skapa en grupp med ett slumpmässigt namn.
  • Associera API:et med produkten.
  • Associera gruppen med produkten.
  • Mata ut de randomiserade värdena, till exempel namnen på resursgruppen, API Management-tjänsten, API, produkten och gruppen.

Förutsättningar

Implementera Terraform-koden

Kommentar

Exempelkoden för den här artikeln finns på Azure Terraform GitHub-lagringsplatsen. Du kan visa loggfilen som innehåller testresultaten från aktuella och tidigare versioner av Terraform.

Se fler artiklar och exempelkod som visar hur du använder Terraform för att hantera Azure-resurser.

  1. Skapa en katalog där du kan testa och köra Terraform-exempelkoden och göra den till den aktuella katalogen.

  2. Skapa en fil med namnet main.tfoch infoga följande kod:

    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. Skapa en fil med namnet outputs.tfoch infoga följande kod:

    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. Skapa en fil med namnet providers.tfoch infoga följande kod:

    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. Skapa en fil med namnet variables.tfoch infoga följande kod:

    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."
    }
    

Initiera Terraform

Kör terraform init för att initiera Terraform-distributionen. Det här kommandot laddar ned den Azure-provider som krävs för att hantera dina Azure-resurser.

terraform init -upgrade

Viktiga punkter:

  • Parametern -upgrade uppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.

Skapa en Terraform-körningsplan

Kör terraform-planen för att skapa en körningsplan.

terraform plan -out main.tfplan

Viktiga punkter:

  • Kommandot terraform plan skapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
  • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.

Tillämpa en Terraform-körningsplan

Kör terraform gäller för att tillämpa körningsplanen på din molninfrastruktur.

terraform apply main.tfplan

Viktiga punkter:

  • terraform apply Exempelkommandot förutsätter att du tidigare körde terraform plan -out main.tfplan.
  • Om du har angett ett annat filnamn för parametern -out använder du samma filnamn i anropet till terraform apply.
  • Om du inte använde parametern -out anropar terraform apply du utan några parametrar.

Verifiera resultatet

Kör az apim show för att visa Azure API Management:


az apim show --<apim_service_name> --<resource_group_name>

Rensa resurser

Gör följande när du inte längre behöver de resurser som skapats via Terraform:

  1. Kör terraform-plan och ange destroy flaggan.

    terraform plan -destroy -out main.destroy.tfplan
    

    Viktiga punkter:

    • Kommandot terraform plan skapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om körningsplanen matchar dina förväntningar innan du gör några ändringar i faktiska resurser.
    • Med den valfria -out parametern kan du ange en utdatafil för planen. Med hjälp av parametern -out ser du till att planen du granskade är exakt vad som tillämpas.
  2. Kör terraform tillämpa för att tillämpa körningsplanen.

    terraform apply main.destroy.tfplan
    

Felsöka Terraform i Azure

Felsöka vanliga problem när du använder Terraform i Azure.

Nästa steg