Aracılığıyla paylaş


Öğretici: Ürün oluşturma ve yayımlama

UYGULANANLAR: Tüm API Management katmanları

Azure API Management'ta bir ürün bir veya daha fazla API, kullanım kotası ve kullanım koşulları içerir. Bir ürün yayımlandıktan sonra geliştiriciler ürüne abone olabilir ve ürünün API'lerini kullanmaya başlayabilir.

Bu öğreticide aşağıdakilerin nasıl yapılacağını öğreneceksiniz:

  • Ürün oluşturma ve yayımlama
  • Ürüne API ekleme
  • Ürün API'lerine erişme

Portalda API Management ürünleri

Önkoşullar

Ürün oluşturma ve yayımlama

  1. Azure portalında oturum açın ve API Management örneğine gidin.

  2. Sol gezinti bölmesinde Ürünler>+ Ekle'yi seçin.

    Azure portalında ürün ekleme

  3. Ürün ekle penceresinde, aşağıdaki tabloda açıklanan değerleri girerek ürününüzü oluşturun.

    Ürün ekle penceresi

    Veri Akışı Adı Açıklama
    Görünen ad Geliştirici portalında gösterilmesini istediğiniz ad.
    Açıklama Ürün hakkında amacı, erişim sağladığı API'ler ve diğer ayrıntılar gibi bilgileri sağlayın.
    State Ürünü geliştirici portalında yayımlamak istiyorsanız Yayımlandı'yı seçin. Bir üründeki API'lerin geliştiriciler tarafından bulunabilmesi için önce ürünün yayımlanması gerekir. Varsayılan olarak, yeni ürünler yayımdan kaldırılır.
    Abonelik gerektirir Kullanıcının ürünü kullanmak için abone olması gerekip gerekmediğini (ürün korunuyor) ve ürünün API'lerine erişmek için bir abonelik anahtarı kullanılması gerekip gerekmediğini seçin. Abonelik gerekmiyorsa (ürün açıksa), ürünün API'lerine erişmek için abonelik anahtarı gerekmez. Bu makalenin devamında ürün API'lerine erişim konusuna bakın.
    Onay gerekiyor Bir yöneticinin bu ürüne yönelik abonelik girişimlerini gözden geçirmesini ve kabul edip reddetmesini istiyorsanız seçin. Seçili değilse abonelik denemeleri otomatik olarak onaylanmıştır.
    Abonelik sayısı limiti İsteğe bağlı olarak birden çok eşzamanlı aboneliğin sayısını sınırlayın.
    Yasal koşullar Abonelerin ürünü kullanmak için kabul etmek zorunda olduğu ürün kullanım koşullarını ekleyebilirsiniz.
    API'ler Bir veya daha fazla API seçin. Ürünü oluşturduktan sonra API'ler de ekleyebilirsiniz. Daha fazla bilgi için bu makalenin devamında bir ürüne API ekleme bölümüne bakın.

    Ürün açıksa (abonelik gerektirmez), yalnızca başka bir açık ürünle ilişkili olmayan bir API ekleyebilirsiniz.
  4. Yeni ürününüzü oluşturmak için Oluştur'u seçin.

Dikkat

Abonelik gerektirmeyen bir ürünü yapılandırırken dikkatli olun. Bu yapılandırma fazla izin verebilir ve ürünün API'lerini belirli API güvenlik tehditlerine karşı daha savunmasız hale getirebilir.

Daha fazla yapılandırma ekleme

Ürünü kaydettikten sonra yapılandırmaya devam edin. API Management örneğinizde Ürünler penceresinden ürünü seçin. Ekle veya güncelleştir:

Öğe Açıklama
Ayarlar Ürün meta verileri ve durumu
API'ler Ürünle ilişkili API'ler
İlkeler Ürün API'lerine uygulanan ilkeler
Erişim denetimi Geliştiriciler veya konuklar için ürün görünürlüğü
Abonelikler Ürün aboneleri

Ürüne API ekleme

Ürünler bir veya daha fazla API arasındaki ilişkilendirmelerdir. Birçok API ekleyebilir ve bunları geliştirici portalı aracılığıyla geliştiricilere sunabilirsiniz. Ürün oluşturma sırasında bir veya daha fazla mevcut API ekleyebilirsiniz. Daha sonra Ürün Ayarları sayfasından veya API oluştururken ürüne API'ler de ekleyebilirsiniz.

Mevcut bir ürüne API ekleme

  1. API Management örneğinizin sol gezinti bölmesinde Ürünler'i seçin.
  2. Bir ürün seçin ve ardından API'ler'i seçin.
  3. + API Ekle'yi seçin.
  4. Bir veya daha fazla API'yi ve ardından Seç'i seçin.

Mevcut bir ürüne API ekleme

Ürün API'lerine erişim

Bir ürünü yayımladıktan sonra geliştiriciler API'lere erişebilir. Ürünün nasıl yapılandırıldığına bağlı olarak, ürüne erişim için abone olmaları gerekebilir.

  • Korumalı ürün - Geliştiricilerin ürünün API'lerine erişmek için önce korumalı bir ürüne abone olması gerekir. Abone olduklarında, bu üründeki herhangi bir API'ye erişebilen bir abonelik anahtarı alır. API Management örneğini oluşturduysanız zaten bir yöneticisinizdir, bu nedenle varsayılan olarak her ürüne abone olursunuz. Daha fazla bilgi için bkz . Azure API Management'ta abonelikler.

    İstemci geçerli bir ürün abonelik anahtarına sahip bir API isteğinde bulunursa, API Management isteği işler ve ürün bağlamında erişime izin verir. Ürün için yapılandırılan ilkeler ve erişim denetimi kuralları uygulanabilir.

    İpucu

    Rest API veya PowerShell komutu aracılığıyla özel abonelik anahtarlarıyla bir kullanıcının aboneliğini oluşturabilir veya bir ürüne güncelleştirebilirsiniz.

  • Açık ürün - Geliştiriciler açık bir ürünün API'lerine abonelik anahtarı olmadan erişebilir. Ancak, OAuth 2.0, istemci sertifikaları ve çağıran IP adreslerini kısıtlama gibi API'lere istemci erişiminin güvenliğini sağlamak için başka mekanizmalar yapılandırabilirsiniz.

    Not

    Geliştiricilerin öğrenmesi veya abone olması için açık ürünler geliştirici portalında listelenmez. Bunlar yalnızca Yöneticiler grubu tarafından görülebilir. Geliştiricileri abonelik anahtarı olmadan erişilebilen API'ler hakkında bilgilendirmek için başka bir mekanizma kullanmanız gerekir.

    İstemci abonelik anahtarı olmadan BIR API isteğinde bulunursa:

    • API Management, API'nin açık bir ürünle ilişkili olup olmadığını denetler. Bir API en fazla bir açık ürünle ilişkilendirilebilir.

    • Açık ürün varsa, isteği bu açık ürün bağlamında işler. Açık ürün için yapılandırılan ilkeler ve erişim denetimi kuralları uygulanabilir.

Daha fazla bilgi için bkz . API Management abonelik anahtarlarıyla veya abonelik anahtarları olmadan istekleri nasıl işler?

Sonraki adımlar

Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:

  • Ürün oluşturma ve yayımlama
  • Ürüne API ekleme
  • Ürün API'lerine erişme

Sonraki öğreticiye ilerleyin:

Bu makalede Terraform'u kullanarak Azure API Management örneği, API, ürün, grup ve ürün ile API ile ürün ile grup arasında ilişkilendirmeler oluşturacaksınız.

Terraform , bulut altyapısının tanımlanmasını, önizlemesini ve dağıtımını sağlar. Terraform kullanarak HCL söz dizimlerini kullanarak yapılandırma dosyaları oluşturursunuz. HCL söz dizimi, Azure gibi bulut sağlayıcısını ve bulut altyapınızı oluşturan öğeleri belirtmenize olanak tanır. Yapılandırma dosyalarınızı oluşturduktan sonra, altyapı değişikliklerinizin dağıtılmadan önce önizlemesini görüntülemenizi sağlayan bir yürütme planı oluşturursunuz. Değişiklikleri doğruladıktan sonra, altyapıyı dağıtmak için yürütme planını uygularsınız.

  • Terraform'un gerekli sürümünü ve gerekli sağlayıcıları belirtin.
  • Kaynak grubu adı ön eki, kaynak grubu konumu ve API tanımı içeri aktarma için içerik biçimi ve değeri için değişkenleri tanımlayın.
  • Rastgele bir ada sahip bir kaynak grubu oluşturun.
  • Rastgele bir ada sahip bir API Management hizmeti oluşturun.
  • Rastgele bir ada sahip bir API oluşturun.
  • API Management hizmetinde rastgele bir ada sahip bir ürün oluşturun.
  • Rastgele bir ada sahip bir grup oluşturun.
  • API'yi ürünle ilişkilendirin.
  • Grubu ürünle ilişkilendirin.
  • Kaynak grubunun adları, API Management hizmeti, API, ürün ve grup gibi rastgele değerlerin çıktısını alma.

Önkoşullar

Terraform kodunu uygulama

Not

Bu makalenin örnek kodu Azure Terraform GitHub deposunda bulunur. Terraform'un geçerli ve önceki sürümlerinden test sonuçlarını içeren günlük dosyasını görüntüleyebilirsiniz.

Azure kaynaklarını yönetmek için Terraform'un nasıl kullanılacağını gösteren diğer makalelere ve örnek koda bakın.

  1. Örnek Terraform kodunu test edip çalıştırmak ve geçerli dizin yapmak için bir dizin oluşturun.

  2. adlı main.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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. adlı outputs.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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. adlı providers.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:

    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. adlı variables.tfbir dosya oluşturun ve aşağıdaki kodu ekleyin:

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

Terraform'u başlatma

Terraform dağıtımını başlatmak için terraform init komutunu çalıştırın. Bu komut, Azure kaynaklarınızı yönetmek için gereken Azure sağlayıcısını indirir.

terraform init -upgrade

Önemli noktalar:

  • -upgrade parametresi, gerekli sağlayıcı eklentilerini yapılandırmanın sürüm kısıtlamalarına uygun en yeni sürüme yükseltir.

Terraform yürütme planı oluşturma

Terraform planını çalıştırarak yürütme planı oluşturun.

terraform plan -out main.tfplan

Önemli noktalar:

  • komutu terraform plan bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.
  • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin -out kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.

Terraform yürütme planı uygulama

Yürütme planını bulut altyapınıza uygulamak için terraform apply komutunu çalıştırın.

terraform apply main.tfplan

Önemli noktalar:

  • Örnek terraform apply komut, daha önce komutunu çalıştırdığınızı terraform plan -out main.tfplanvarsayar.
  • parametresi için -out farklı bir dosya adı belirttiyseniz, çağrısında terraform applyaynı dosya adını kullanın.
  • parametresini -out kullanmadıysanız, parametresiz olarak çağırın terraform apply .

Sonuçları doğrulama

Azure API Management'ı görüntülemek için komutunu çalıştırın az apim show :


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

Kaynakları temizleme

Terraform aracılığıyla oluşturulan kaynaklara artık ihtiyacınız kalmadığında aşağıdaki adımları uygulayın:

  1. terraform planını çalıştırın ve bayrağını destroy belirtin.

    terraform plan -destroy -out main.destroy.tfplan
    

    Önemli noktalar:

    • komutu terraform plan bir yürütme planı oluşturur ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu düzen, gerçek kaynaklarda değişiklik yapmadan önce yürütme planının beklentilerinizle eşleşip eşleşmediğini doğrulamanızı sağlar.
    • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. parametresinin -out kullanılması, gözden geçirdiğiniz planın tam olarak uygulanan plan olmasını sağlar.
  2. Yürütme planını uygulamak için terraform apply komutunu çalıştırın.

    terraform apply main.destroy.tfplan
    

Azure'da Terraform sorunlarını giderme

Azure'da Terraform kullanırken karşılaşılan yaygın sorunları giderme.

Sonraki adımlar