Udostępnij za pośrednictwem


Samouczek: Tworzenie i publikowanie produktu

DOTYCZY: Wszystkie warstwy usługi API Management

W usłudze Azure API Management produkt zawiera co najmniej jeden interfejs API, limit przydziału użycia i warunki użytkowania. Po opublikowaniu produktu deweloperzy mogą subskrybować produkt i zacząć korzystać z interfejsów API produktu.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Tworzenie i publikowanie produktu
  • Dodawanie interfejsu API do produktu
  • Uzyskiwanie dostępu do interfejsów API produktów

Produkty usługi API Management w portalu

Wymagania wstępne

Tworzenie i publikowanie produktu

  1. Zaloguj się do witryny Azure Portal i przejdź do wystąpienia usługi API Management.

  2. W okienku nawigacji po lewej stronie wybierz pozycję Produkty>+ Dodaj.

    Dodawanie produktu w witrynie Azure Portal

  3. W oknie Dodawanie produktu wprowadź wartości opisane w poniższej tabeli, aby utworzyć produkt.

    Okno Dodawanie produktu

    Nazwa/nazwisko Opis
    Display name Nazwa, która ma być wyświetlana w portalu dla deweloperów.
    opis Podaj informacje o produkcie, takie jak jego przeznaczenie, interfejsy API, do których zapewnia dostęp, i inne szczegóły.
    Stan Wybierz pozycję Opublikowane , jeśli chcesz opublikować produkt w portalu deweloperów. Aby interfejsy API w produkcie mogły zostać odnalezione przez deweloperów, należy opublikować produkt. Domyślnie nowe produkty są nieopublikowane.
    Wymaga subskrypcji Wybierz, czy użytkownik musi subskrybować produkt (produkt jest chroniony), a klucz subskrypcji musi być używany do uzyskiwania dostępu do interfejsów API produktu. Jeśli subskrypcja nie jest wymagana (produkt jest otwarty), klucz subskrypcji nie jest wymagany do uzyskania dostępu do interfejsów API produktu. Zobacz Artykuł Access to product APIs (Dostęp do interfejsów API produktów) w dalszej części tego artykułu.
    Wymaga zatwierdzenia Wybierz, jeśli chcesz, aby administrator przeglądał i akceptował lub odrzucał próby subskrypcji tego produktu. Jeśli nie wybrano, próby subskrypcji są zatwierdzane automatycznie.
    Limit liczby subskrypcji Opcjonalnie ogranicz liczbę wielu równoczesnych subskrypcji.
    Postanowienia prawne Możesz uwzględnić warunki użytkowania produktu, które jego subskrybenci muszą zaakceptować, aby z niego korzystać.
    Interfejsy API Wybierz co najmniej jeden interfejs API. Interfejsy API można również dodawać po utworzeniu produktu. Aby uzyskać więcej informacji, zobacz Dodawanie interfejsów API do produktu w dalszej części tego artykułu.

    Jeśli produkt jest otwarty (nie wymaga subskrypcji), możesz dodać tylko ten interfejs API, który nie jest skojarzony z innym otwartym produktem.
  4. Wybierz pozycję Utwórz , aby utworzyć nowy produkt.

Uwaga

Podczas konfigurowania produktu, który nie wymaga subskrypcji, należy zachować ostrożność. Ta konfiguracja może być nadmiernie permisywna i może sprawić, że interfejsy API produktu będą bardziej narażone na niektóre zagrożenia bezpieczeństwa interfejsu API.

Dodawanie dodatkowych konfiguracji

Kontynuuj konfigurowanie produktu po jego zapisaniu. W wystąpieniu usługi API Management wybierz produkt w oknie Produkty . Dodaj lub zaktualizuj:

Produkt opis
Ustawienia Metadane i stan produktu
Interfejsy API Interfejsy API skojarzone z produktem
Zasady Zasady stosowane do interfejsów API produktów
Kontrola dostępu Widoczność produktu dla deweloperów lub gości
Subskrypcje Subskrybenci produktu

Dodawanie interfejsów API do produktu

Produkty to skojarzenia co najmniej jednego interfejsu API. Możesz dołączyć wiele interfejsów API i oferować je deweloperom za pośrednictwem portalu dla deweloperów. Podczas tworzenia produktu możesz dodać co najmniej jeden istniejący interfejs API. Interfejsy API można również dodać do produktu później na stronie Ustawienia produktów lub podczas tworzenia interfejsu API.

Dodawanie interfejsu API do istniejącego produktu

  1. W lewym obszarze nawigacji wystąpienia usługi API Management wybierz pozycję Produkty.
  2. Wybierz produkt, a następnie wybierz pozycję Interfejsy API.
  3. Wybierz pozycję + Dodaj interfejs API.
  4. Wybierz co najmniej jeden interfejs API, a następnie wybierz pozycję Wybierz.

Dodawanie interfejsu API do istniejącego produktu

Dostęp do interfejsów API produktów

Po opublikowaniu produktu deweloperzy mogą uzyskiwać dostęp do interfejsów API. W zależności od konfiguracji produktu może być konieczne subskrybowanie produktu w celu uzyskania dostępu.

  • Chroniony produkt — deweloperzy muszą najpierw zasubskrybować chroniony produkt, aby uzyskać dostęp do interfejsów API produktu. Po zasubskrybowaniu otrzymują klucz subskrypcji, który może uzyskiwać dostęp do dowolnego interfejsu API w tym produkcie. Jeśli utworzono wystąpienie usługi API Management, jesteś już administratorem, więc domyślnie subskrybujesz każdy produkt. Aby uzyskać więcej informacji, zobacz Subskrypcje w usłudze Azure API Management.

    Gdy klient wysyła żądanie interfejsu API z prawidłowym kluczem subskrypcji produktu, usługa API Management przetwarza żądanie i zezwala na dostęp w kontekście produktu. Można stosować zasady i reguły kontroli dostępu skonfigurowane dla produktu.

    Napiwek

    Możesz utworzyć lub zaktualizować subskrypcję użytkownika do produktu przy użyciu niestandardowych kluczy subskrypcji za pomocą interfejsu API REST lub polecenia programu PowerShell.

  • Otwarty produkt — deweloperzy mogą uzyskiwać dostęp do interfejsów API otwartego produktu bez klucza subskrypcji. Można jednak skonfigurować inne mechanizmy zabezpieczania dostępu klienta do interfejsów API, w tym protokołu OAuth 2.0, certyfikatów klienta i ograniczania adresów IP wywołującego.

    Uwaga

    Otwarte produkty nie są wymienione w portalu dla deweloperów, aby dowiedzieć się więcej o lub zasubskrybować. Są one widoczne tylko dla grupy Administratorzy . Należy użyć innego mechanizmu, aby poinformować deweloperów o interfejsach API, do których można uzyskać dostęp bez klucza subskrypcji.

    Gdy klient wysyła żądanie interfejsu API bez klucza subskrypcji:

    • Usługa API Management sprawdza, czy interfejs API jest skojarzony z otwartym produktem. Interfejs API może być skojarzony z co najwyżej jednym otwartym produktem.

    • Jeśli otwarty produkt istnieje, przetwarza żądanie w kontekście tego otwartego produktu. Zasady i reguły kontroli dostępu skonfigurowane dla otwartego produktu można zastosować.

Aby uzyskać więcej informacji, zobacz How API Management handles requests with or without subscription keys (Jak usługa API Management obsługuje żądania z kluczami subskrypcji lub bez ich użycia).

Następne kroki

W tym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Tworzenie i publikowanie produktu
  • Dodawanie interfejsu API do produktu
  • Uzyskiwanie dostępu do interfejsów API produktów

Przejdź do następnego samouczka:

W tym artykule użyjesz narzędzia Terraform do utworzenia wystąpienia usługi Azure API Management, interfejsu API, produktu, grupy i skojarzeń między produktem a interfejsem API oraz produktem i grupą.

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania, który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.

  • Określ wymaganą wersję programu Terraform i wymaganych dostawców.
  • Zdefiniuj zmienne dla prefiksu nazwy grupy zasobów, lokalizacji grupy zasobów oraz formatu zawartości i wartości importu definicji interfejsu API.
  • Utwórz grupę zasobów z losową nazwą.
  • Utwórz usługę API Management z losową nazwą.
  • Utwórz interfejs API z losową nazwą.
  • Utwórz produkt o losowej nazwie w usłudze API Management.
  • Utwórz grupę z losową nazwą.
  • Skojarz interfejs API z produktem.
  • Skojarz grupę z produktem.
  • Wyprowadź losowe wartości, takie jak nazwy grupy zasobów, usługi API Management, interfejsu API, produktu i grupy.

Wymagania wstępne

Implementowanie kodu narzędzia Terraform

Uwaga

Przykładowy kod tego artykułu znajduje się w repozytorium GitHub programu Azure Terraform. Możesz wyświetlić plik dziennika zawierający wyniki testu z bieżących i poprzednich wersji programu Terraform.

Zobacz więcej artykułów i przykładowego kodu pokazującego, jak zarządzać zasobami platformy Azure przy użyciu narzędzia Terraform.

  1. Utwórz katalog, w którym chcesz przetestować i uruchomić przykładowy kod programu Terraform i utworzyć go jako bieżący katalog.

  2. Utwórz plik o nazwie main.tfi wstaw następujący 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. Utwórz plik o nazwie outputs.tfi wstaw następujący 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. Utwórz plik o nazwie providers.tfi wstaw następujący 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. Utwórz plik o nazwie variables.tfi wstaw następujący 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     = "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."
    }
    

Inicjowanie narzędzia Terraform

Uruchom narzędzie terraform init , aby zainicjować wdrożenie narzędzia Terraform. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure.

terraform init -upgrade

Kluczowe punkty:

  • Parametr -upgrade uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.

Tworzenie planu wykonania programu Terraform

Uruchom plan terraform, aby utworzyć plan wykonania.

terraform plan -out main.tfplan

Kluczowe punkty:

  • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
  • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.

Stosowanie planu wykonywania narzędzia Terraform

Uruchom narzędzie terraform, aby zastosować plan wykonania do infrastruktury chmury.

terraform apply main.tfplan

Kluczowe punkty:

  • Przykładowe terraform apply polecenie zakłada, że wcześniej uruchomiono terraform plan -out main.tfplanpolecenie .
  • Jeśli określono inną nazwę pliku parametru -out , użyj tej samej nazwy pliku w wywołaniu metody terraform apply.
  • Jeśli parametr nie został użyty, wywołaj metodę -out terraform apply bez żadnych parametrów.

Weryfikowanie wyników

Uruchom polecenie az apim show , aby wyświetlić usługę Azure API Management:


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

Czyszczenie zasobów

Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:

  1. Uruchom plan terraform i określ flagę destroy .

    terraform plan -destroy -out main.destroy.tfplan
    

    Kluczowe punkty:

    • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
    • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
  2. Uruchom narzędzie terraform zastosuj, aby zastosować plan wykonania.

    terraform apply main.destroy.tfplan
    

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z programu Terraform na platformie Azure.

Następne kroki