Öğ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
Önkoşullar
- Azure API Management terminolojisini öğrenin.
- Şu hızlı başlangıcı tamamlayın: Azure API Management örneği oluşturma.
- Ayrıca, şu öğreticiyi tamamlayın: İlk API'nizi içeri aktarma ve yayımlama.
Ürün oluşturma ve yayımlama
Azure portalında oturum açın ve API Management örneğine gidin.
Sol gezinti bölmesinde Ürünler>+ Ekle'yi seçin.
Ürün ekle penceresinde, aşağıdaki tabloda açıklanan değerleri girerek ürününüzü oluşturun.
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.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
- API Management örneğinizin sol gezinti bölmesinde Ürünler'i seçin.
- Bir ürün seçin ve ardından API'ler'i seçin.
- + API Ekle'yi seçin.
- Bir veya daha fazla API'yi ve ardından Seç'i seçin.
Ü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
Etkin aboneliği olan bir Azure hesabı oluşturun. Ücretsiz bir hesap oluşturabilirsiniz.
Terraform’u yükleyin ve yapılandırın.
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.
Örnek Terraform kodunu test edip çalıştırmak ve geçerli dizin yapmak için bir dizin oluşturun.
adlı
main.tf
bir 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 }
adlı
outputs.tf
bir 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 }
adlı
providers.tf
bir 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 {} }
adlı
variables.tf
bir 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.tfplan
varsayar. - parametresi için
-out
farklı bir dosya adı belirttiyseniz, çağrısındaterraform apply
aynı dosya adını kullanın. - parametresini
-out
kullanmadıysanız, parametresiz olarak çağırınterraform 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:
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.
- komutu
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
Boş API ve sahte API yanıtları oluşturun.