Iş Ortağı Merkezi API 'Lerini çağıran iş ortakları için API azaltma Kılavuzu

Microsoft, Iş Ortağı Merkezi API 'Lerini çağıran iş ortakları için zaman dilimi içinde daha tutarlı performans sağlamak üzere API daraltma işlemi yapıyor. Azaltma, kaynakların aşırı kullanımını engellemek için bir zaman dilimi içindeki bir hizmete yönelik isteklerin sayısını sınırlar. Iş ortağı merkezi yüksek bir istek hacmi işleyecek şekilde tasarlandığından, birkaç iş ortağı tarafından çok sayıda istek oluşursa, azaltma işlemi tüm iş ortakları için en iyi performansı ve güvenilirliği korumanıza yardımcı olur.

Azaltma limitleri senaryoya göre farklılık gösterir. Örneğin, büyük bir yazma hacmi gerçekleştiriyorsanız, yalnızca okuma işlemi gerçekleştirmekten daha yüksektir.

Kısıtlama gerçekleştiğinde ne olur?

Bir azaltma eşiği aşıldığında, Iş ortağı merkezi bir süre için o istemciden gelen diğer istekleri sınırlandırır. Kısıtlama davranışı, istek türüne ve sayısına bağlıdır.

Yaygın kısıtlama senaryoları

İstemcilerin azaltmasının en yaygın nedenleri şunlardır:

  • BIR API Için Iş ortağı KIRACı kimliği başına çok sayıda istekvardır: bazı Iş Ortağı Merkezi API 'leri Için azaltma Iş ortağı kiracı kimliğine göre belirlenir, aynı Iş ortağı kiracı kimliğinde bu API 'lere çok fazla çağrı azaltma eşiğini aşarak sonuçlanır.

  • Her Müşteri KIRACı kimliği Için Iş ortağı KIRACı kimliği başına BIR API için çok sayıda istekvardır: diğer API 'ler için, azaltma Iş ortağı Kiracı kimliği/MÜŞTERI Kiracı kimliği birleşimine göre belirlenir; Bu durumlarda, aynı müşteri kiracı KIMLIĞINE karşı çok fazla çağrı yapmak, diğer müşterilerle yapılan çağrıların başarılı olabileceği azaltma ile sonuçlanır.

Azaltmayı önlemek için en iyi uygulamalar

Güncelleştirmeleri denetlemek için bir kaynağı sürekli yoklamak ve yeni veya silinmiş kaynakları denetlemek için düzenli olarak kaynak koleksiyonlarını taramak, azaltmaya neden olabilir ve genel performansı düşürür. Eşzamanlı API çağrıları, birim zamanı başına yüksek sayıda isteğe yol açabilir, bu da isteklerin kısıtlanmasına neden olur. Bunun yerine değişiklik izleme ve değişiklik bildirimlerini kullanmanız gerekir. Ayrıca, değişiklikleri algılamak için etkinlik günlüklerini kullanabilmeniz gerekir. Daha fazla bilgi için bkz. Iş ortağı merkezi etkinlik günlükleri. İş ortaklarının, daha fazla verimlilik için etkinlik günlüğü API 'sini kullanmayı ve azaltmasını önlemek için kullanılması önerilir. Ayrıca aşağıdaki etkinlik günlüklerini kullanma örneğine bakın.

Azaltmayı işlemek için en iyi uygulamalar

Azaltma işlemi için en iyi uygulamalar şunlardır:

  • Paralellik derecesini azaltın.
  • Çağrıların sıklığını azaltın.
  • Tüm istekler kullanım sınırlarınıza göre tahakkuk ettiğinden anında denemeler yapmaktan kaçının.

Hata işleme uyguladığınızda, azaltmayı algılamak için HTTP hata kodu 429’u kullanın. Başarısız yanıtı Sonra Yeniden Dene yanıt üst bilgisini içerir. Sonra yeniden deneme gecikme süresini kullanarak istekleri geri çekmek, azaltmadan kurtulmanın en hızlı yoludur.

Retry-After gecikmesini kullanmak için şunları yapın:

  1. Retry-After üstbilgisinde belirtilen saniye sayısını bekleyin.

  2. İsteği yeniden deneyin.

  3. İstek bir 429 hata koduyla yeniden başarısız olursa, hala kısıtlanıyor olursunuz. Üstel geri alma ile yeniden deneyin, önerilen Retry-After gecikmesini kullanın ve başarılı olana kadar isteği yeniden deneyin.

  4. SDK kullanıyorsanız, isteğiniz kısıtlandığınızda 429 durum koduyla bir özel durum alırsınız. Özel durumda RetryAfter özelliğini kullanın ve zaman geçtikten sonra isteği yeniden deneyin.

Daraltma tarafından şu anda etkilenen API 'Ler

Sonunda, "api.partnercenter.microsoft.com/" uç noktasını çağıran her tek Iş Ortağı Merkezi API 'SI kısıtlanacak. Şu anda azaltma sınırları yalnızca aşağıda listelenen API 'lerde zorlanır. İş Ortağı Merkezi, her API için telemetri toplar ve azaltma sınırlarını dinamik olarak ayarlar. Aşağıdaki tabloda, azaltma 'nın Şu anda zorlandığı API 'Ler listelenmektedir.

İşlem İş Ortağı Merkezi belgeleri
{baseURL}/v1/Customers/{customer_id}/Orders sipariş oluşturma
{baseURL}/v1/Customers/{Customer-Tenant-ID}/Subscriptions/{ID-for-Subscription}/yükseltmeler abonelik geçişi
{baseURL}/v1/Customers/{Customer-Tenant-id}/Orders/{Order-ID} bir aboneliğe eklenti satın alma
{baseURL}/v1/Customers/{Customer-id}/Carts/{cart-id} sepet oluşturma
{baseURL}/v1/Customers/{Customer-id}/Carts/{cart-id}/Checkout sepet kullanıma alma
{baseURL}/v1/Customers/{Customer-id}/Carts/{cart-id} sepetini güncelleştirme
{baseURL}/v1/Customers/{Customer-id}/Subscriptions/{Subscription-ID}/kayıtları abonelik kaydetme
{baseURL}/v1/productyükseltmeleri ürün yükseltme varlığı oluştur
{baseURL}/v1/Customers/{Customer-id}/Subscriptions/{Subscription-ID}/dönüşümler deneme aboneliğini ücretli olarak dönüştürme
{baseURL}/v1/Customers/{Customer-Tenant-ID} KIMLIĞE göre müşteri al
{baseURL}/v1/productupgrades/uygunluk ürün yükseltmesine uygunluk sağlayın
{baseURL}/v1/Customers/{Customer-Tenant-ID}/Subscriptions/{ID-for-Subscription} aboneliği Yönet
{baseURL}/v1/Customers/{customer_id}/abonelikler tüm a-a-a-a-
{baseURL}/v1/Customers/{customer_id}/Subscriptions/{subscription_id} Kimliğe göre bir abonelik alma
{baseURL}/v1/Customers/{customer_id}/Orders Tüm müşteri siparişlerini al
{baseURL}/v1/Customers/{customer_id}/Orders/{order_id} Kimliğe göre bir sipariş alma
{baseURL}/v1/Customers/{customer_id}/Orders/{order_id}/provisioningstatus Abonelik sağlama durumunu alma
{baseURL}/v1/Customers/{customer_id}/Subscriptions/{subscription_id} Siparişleri yönetme ve bir aboneliği yönetme
{baseURL}/v1/Customers/{customer_id}/Subscriptions/{subscription_id}/addons Bir abonelik için eklentilerin bir listesini alma
{baseURL}/v1/Customers/{customer_id}/Subscriptions/{subscription_id}/azureEntitlements Bir abonelik için Azure yetkilendirmeleri listesini alma
{baseURL}/v1/Customers/{customer_id}/Subscriptions/{subscription_id}/registrationstatus Abonelik kayıt durumunu alma
{baseURL}/v1/Customers/{Customer-Tenant-ID}/aktarmaları Müşterinin tüm aktarımlarını al
{baseURL}/v1/productUpgrades/{upgrade-id}/status Ürün yükseltme durumunu alma
{baseURL}/v1/Customers/{Customer-id}/Subscriptions/{Subscription-ID}/dönüşümler Deneme dönüştürme tekliflerinin bir listesini alma

Hata kodu yanıtı:

HTTP/1.1 429 Too Many Requests 

Content-Length: 84 

Content-Type: application/json 

Retry-After: 57 

Date: Tue, 21 Jul 2020 04:10:58 GMT 

{ "statusCode": 429, "message": "Rate limit is exceeded. Try again in 57 seconds." } 

Etkinlik günlüğü örneği

Günlük değişiklikleri çözümlemede en iyi yöntem için, belirli bir gün için denetim kaydını sorgulamanızı öneririz. 

Yanıtta, belirli işlem türünde değişikliklerle bir sonuç alacaksınız.  İlgilendiğiniz işleme göre filtreleyebilirsiniz.  Örneğin, yeni oluşturulan bir müşteriyle ilgileniyorsanız, operationType = "add_customer" adresinden bakabilirsiniz.  

OperationType/Resources listesi aşağıdaki API belgeleri altında bulunabilir.

Yanıt örneği

İstek:

Http Get call:  https://api.partnercenter.microsoft.com/v1/auditrecords?startDate=2020-09-02&endDate=2020-09-02&size=50 

Authorization: Bearer <token> 

Accept: application/json 

MS-RequestId: 127facaa-e389-41f8-8bb7-1d1af99db893 

MS-CorrelationId: de9c2ccc-40dd-4186-9660-65b9b64c3d14 

X-Locale: en-US 

Host: api.partnercenter.microsoft.com 

Connection: Keep-Alive 

Yanıt:

{ 

    "totalCount": 17, 

    "items": [ 

        { 

            "id": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d_e905b566-4779-4e57-944c-7b1b5312705b_updatecustomeruserlicenses_637346859797753934", 

            "partnerId": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d", 

            "participants": [ 

                "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d" 

            ], 

            "customerId": "e905b566-4779-4e57-944c-7b1b5312705b", 

            "userPrincipalName": "admin@testsw09.onmicrosoft.com", 

            "applicationId": "FulfillmentService", 

            "resourceType": "license", 

            "operationType": "update_customer_user_licenses", 

            "operationDate": "2020-09-02T23:26:19.7753934Z", 

            "operationStatus": "succeeded", 

            "customizedData": [ 

                { 

                    "key": "CustomerUserId", 

                    "value": "933808c7-b165-496c-a24e-1a4b7846fab4" 

                } 

            ], 

            "attributes": { 

                "objectType": "AuditRecord" 

            } 

        }, 

        { 

            "id": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d_86bddccf-9a53-40c6-907c-08067a3f8da7_ia80zlkxp6ewoqpp35pbqjlhqv9iigvz1_createorder_637346662909268372", 

            "partnerId": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d", 

            "participants": [ 

                "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d" 

            ], 

            "customerId": "86bddccf-9a53-40c6-907c-08067a3f8da7", 

            "customerName": "CustomMetersStagingTest", 

            "userPrincipalName": "admin@testsw09.onmicrosoft.com", 

            "applicationId": "4990cffe-04e8-4e8b-808a-1175604b879f", 

            "resourceType": "order", 

            "resourceNewValue": "{\"Id\":\"Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1\",\"AlternateId\":\"64144d300bde\",\"ReferenceCustomerId\":\"86bddccf-9a53-40c6-907c-08067a3f8da7\",\"BillingCycle\":\"monthly\",\"CurrencyCode\":\"USD\",\"CurrencySymbol\":\"$\",\"LineItems\":[{\"LineItemNumber\":0,\"ProvisioningContext\":null,\"OfferId\":\"DZH318Z0C964:0001:DZH318Z0BZDG\",\"SubscriptionId\":\"f428d44a-d08b-348b-579e-ce92a6362c7b\",\"ParentSubscriptionId\":null,\"TermDuration\":\"P1M\",\"TransactionType\":\"New\",\"FriendlyName\":\"SaaS custom meter offer - Bronze\",\"Quantity\":1,\"Pricing\":null,\"PartnerIdOnRecord\":null,\"RenewsTo\":null,\"Links\":{\"Product\":{\"Uri\":\"/products/DZH318Z0C964?country=US\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]},\"Sku\":{\"Uri\":\"/products/DZH318Z0C964/skus/0001?country=US\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]},\"Availability\":{\"Uri\":\"/products/DZH318Z0C964/skus/0001/availabilities/DZH318Z0BZDG?country=US\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]},\"ActivationLinks\":{\"Uri\":\"/customers/86bddccf-9a53-40c6-907c-08067a3f8da7/orders/Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1/lineitems/0/activationlinks\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]}}}],\"CreationDate\":\"2020-09-02T17:58:01.7755853Z\",\"Status\":\"pending\",\"TransactionType\":\"UserPurchase\",\"Links\":{\"Self\":{\"Uri\":\"/customers/86bddccf-9a53-40c6-907c-08067a3f8da7/orders/Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]},\"ProvisioningStatus\":{\"Uri\":\"/customers/86bddccf-9a53-40c6-907c-08067a3f8da7/orders/Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1/provisioningstatus\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]},\"PatchOperation\":{\"Uri\":\"/customers/86bddccf-9a53-40c6-907c-08067a3f8da7/orders/Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1\",\"Method\":\"PATCH\",\"Body\":null,\"Headers\":[]}},\"Client\":{\"marketplaceCountry\":\"US\",\"deviceFamily\":\"UniversalStore-PartnerCenter\",\"name\":\"Partner Center Web\"},\"Attributes\":{\"ObjectType\":\"Order\"}}", 

            "operationType": "create_order", 

            "originalCorrelationId": "96514ebe-c1b2-4865-cb46-2c2d20a2e911", 

            "operationDate": "2020-09-02T17:58:10.9268372Z", 

            "operationStatus": "succeeded", 

            "customizedData": [ 

                { 

                    "key": "OrderId", 

                    "value": "Ia80ZLkXp6eWOqpp35pBQJLhqv9IiGVZ1" 

                }, 

                { 

                    "key": "AlternateId", 

                    "value": "64144d300bde" 

                }, 

                { 

                    "key": "BillingCycle", 

                    "value": "Monthly" 

                }, 

                { 

                    "key": "OfferId-0", 

                    "value": "DZH318Z0C964:0001:DZH318Z0BZDG" 

                }, 

                { 

                    "key": "SubscriptionId-0", 

                    "value": "f428d44a-d08b-348b-579e-ce92a6362c7b" 

                }, 

                { 

                    "key": "SubscriptionName-0", 

                    "value": "SaaS custom meter offer - Bronze" 

                }, 

                { 

                   "key": "Quantity-0", 

                    "value": "1" 

                }, 

                { 

                    "key": "PartnerOnRecord-0", 

                    "value": null 

                } 

            ], 

            "attributes": { 

                "objectType": "AuditRecord" 

            } 

        }, 

                           { 

            "id": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d_86bddccf-9a53-40c6-907c-08067a3f8da7_86bddccf-9a53-40c6-907c-08067a3f8da7_addcustomer_637346648528069005", 

            "partnerId": "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d", 

            "participants": [ 

                "9daaeb1c-4195-4db5-9f1d-509eb70c8c2d" 

            ], 

            "customerId": "86bddccf-9a53-40c6-907c-08067a3f8da7", 

            "customerName": "CustomMetersStagingTest", 

            "userPrincipalName": "admin@testsw09.onmicrosoft.com", 

            "applicationId": "4990cffe-04e8-4e8b-808a-1175604b879f", 

            "resourceType": "customer", 

            "resourceNewValue": "{\"Id\":\"86bddccf-9a53-40c6-907c-08067a3f8da7\",\"CommerceId\":\"9dd78b4f-f98a-44b4-a2fa-2b82ac58d24c\",\"CompanyProfile\":{\"TenantId\":\"86bddccf-9a53-40c6-907c-08067a3f8da7\",\"Domain\":\"CustomMetersStagingTest.onmicrosoft.com\",\"CompanyName\":\"CustomMetersStagingTest\",\"Address\":null,\"Email\":null,\"OrganizationRegistrationNumber\":null,\"Links\":{\"Self\":{\"Uri\":\"/customers/86bddccf-9a53-40c6-907c-08067a3f8da7/profiles/company\",\"Method\":\"GET\",\"Body\":null,\"Headers\":[]}},\"Attributes\":{\"ObjectType\":\"CustomerCompanyProfile\"}},\"BillingProfile\":{\"Id\":\"4beafd7b-cdab-5bdc-52ed-02e16edf2e7a\",\"FirstName\":\"CustomMetersStagingTest\",\"LastName\":\"CustomMetersStagingTest\",\"Email\":\"CustomMetersStagingTest@CustomMetersStagingTest.com\",\"Culture\":\"en-US\",\"Language\":\"en\",\"CompanyName\":\"CustomMetersStagingTest\",\"DefaultAddress\":{\"Id\":null,\"Country\":\"US\",\"Region\":null,\"City\":\"Seattle\",\"State\":\"WA\",\"District\":null,\"AddressLine1\":\"CustomMetersStagingTest\",\"AddressLine2\":null,\"AddressLine3\":null,\"PostalCode\":\"98122\",\"FirstName\":\"CustomMetersStagingTest\",\"LastName\":\"CustomMetersStagingTest\",\"EmailAddress\":null,\"PhoneNumber\":null,\"MiddleName\":null},\"Attributes\":{\"Etag\":\"-2279334701316321663\",\"ObjectType\":\"CustomerBillingProfile\"}},\"RelationshipToPartner\":\"reseller\",\"AllowDelegatedAccess\":true,\"UserCredentials\":{\"userName\":\"admin\",\"password\":\"\"},\"AssociatedPartnerId\":null,\"CustomDomains\":null,\"Attributes\":{\"ObjectType\":\"Customer\"}}", 

            "operationType": "add_customer", 

            "originalCorrelationId": "7550d9ea-e64a-416f-e49b-3670c516cf69", 

            "operationDate": "2020-09-02T17:34:12.8069005Z", 

            "operationStatus": "succeeded", 

            "customizedData": [ 

                { 

                    "key": "PrimaryDomainName", 

                    "value": "CustomMetersStagingTest.onmicrosoft.com" 

                }, 

                { 

                    "key": "Relationship", 

                    "value": "Reseller" 

                } 

            ], 

            "attributes": { 

                "objectType": "AuditRecord" 

            } 

        }, 

                            

        ... 

    ], 

    "links": { 

        "self": { 

            "uri": "/auditrecords?startDate=2020-09-02&endDate=2020-09-02&size=50", 

            "method": "GET", 

            "headers": [] 

        } 

    }, 

    "attributes": { 

        "objectType": "Collection" 

    } 

}