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
Förutsättningar
- Lär dig Azure API Management-terminologin.
- Slutför följande snabbstart: Skapa en Azure API Management-instans.
- Slutför även följande självstudie: Importera och publicera ditt första API.
Skapa och publicera en produkt
Logga in på Azure Portal och gå till din API Management-instans.
I det vänstra navigeringsfönstret väljer du Produkter>+ Lägg till.
I fönstret Lägg till produkt anger du värden som beskrivs i följande tabell för att skapa produkten.
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.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
- I det vänstra navigeringsfältet för din API Management-instans väljer du Produkter.
- Välj en produkt och välj sedan API:er.
- Välj + Lägg till API.
- Välj en eller flera API:er och sedan Välj.
Å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
Skapa ett Azure-konto med en aktiv prenumeration. Du kan skapa ett konto kostnadsfritt.
Installera och konfigurera Terraform.
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.
Skapa en katalog där du kan testa och köra Terraform-exempelkoden och göra den till den aktuella katalogen.
Skapa en fil med namnet
main.tf
och 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 }
Skapa en fil med namnet
outputs.tf
och 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 }
Skapa en fil med namnet
providers.tf
och 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 {} }
Skapa en fil med namnet
variables.tf
och 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ördeterraform plan -out main.tfplan
.- Om du har angett ett annat filnamn för parametern
-out
använder du samma filnamn i anropet tillterraform apply
. - Om du inte använde parametern
-out
anroparterraform 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:
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.
- Kommandot
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.