İş Ortağı Merkezi API'lerini çağıran iş ortakları için API azaltma kılavuzu

Microsoft, İş Ortağı Merkezi API'lerini çağıran iş ortaklarının zaman aralığı içinde daha tutarlı bir performans elde etmek için API azaltmayı uyguluyor. Azaltma, kaynakların aşırı kullanımını önlemek için hizmete gelen isteklerin sayısını sınırlar. İş Ortağı Merkezi çok fazla sayıda isteği işleyecek şekilde tasarlanmış olsa da, birkaç iş ortağından aşırı fazla sayıda istek gelmesi durumunda bu azaltma tüm iş ortakları için en iyi performans ve güvenilirliği sürdürmeye yardımcı olur.

Azaltma sınırları senaryoya göre değişir. Örneğin, büyük miktarda yazma işlemi gerçekleştiriyorsanız, azaltma olasılığı yalnızca okuma işlemleri gerçekleştirdiğinizden daha yüksektir.

Azaltma gerçekleştiğinde ne olur?

Azaltma eşiği aşıldığında, İş Ortağı Merkezi bu istemciden gelen diğer istekleri belirli bir süre için sınırlar. Azaltma davranışı, isteklerin türüne ve sayısına bağlıdır.

Yaygın Azaltma Senaryoları

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

  • İş Ortağı Kiracı Kimliği başına API için çok sayıda istek: Bazı İş Ortağı Merkezi API'leri için azaltma, İş Ortağı Kiracı Kimliği tarafından belirlenir. Aynı İş Ortağı Kiracı Kimliği'nde bu API'lere çok fazla çağrı olması azaltma eşiğinin aşılmasıyla sonuçlanıyor.

  • Müşteri Kiracı Kimliği başına İş Ortağı Kiracı Kimliği başına çok sayıda API isteği: Diğer API'ler için azaltma, İş Ortağı Kiracı Kimliği/Müşteri Kiracı Kimliği bileşimine göre belirlenir; bu durumlarda aynı müşteri kiracı kimliğine karşı çok fazla çağrı yapılması azaltmaya neden olur ve diğer müşterilere yapılan çağrılar başarılı olabilir.

Azaltmayı önlemek için en iyi deneyimler

Güncelleştirmeleri denetlemek için bir kaynağı sürekli yoklama ve yeni veya silinmiş kaynakları denetlemek için kaynak koleksiyonlarını düzenli olarak tarama gibi programlama uygulamaları, azaltmaya ve genel performansı düşürmeye neden olabilir. Eşzamanlı API çağrıları birim süresi başına çok sayıda isteğe yol açabilir ve bu da isteklerin kısıtlanmasına neden olabilir. Bunun yerine değişiklik izleme ve değişiklik bildirimlerini kullanmalısınız. Ayrıca, değişiklikleri algılamak için etkinlik günlüklerini kullanabilmeniz gerekir. Daha fazla bilgi için bkz . İş Ortağı Merkezi etkinlik günlükleri. İş ortaklarının daha fazla verimlilik ve azaltmayı önlemek için etkinlik günlüğü API'sini kullanmayı düşünmelerini kesinlikle öneririz. Ayrıca aşağıdaki etkinlik günlüklerini kullanma örneğine de bakın.

Azaltmayı işlemek için en iyi deneyimler

Azaltmayı işlemeye yönelik en iyi yöntemler ş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 hemen yeniden denemelerden 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.

Yeniden deneme sonrası gecikmesini kullanmak için:

  1. Yeniden Deneme Sonrası üst bilgisinde belirtilen saniye sayısını bekleyin.

  2. İsteği yeniden deneyin.

  3. İstek 429 hata koduyla yeniden başarısız olursa, azaltma işlemine devam edersiniz. Ü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ıtlanırken durum kodu 429 olan bir özel durum alırsınız. Özel durumda RetryAfter özelliğini kullanın ve süre dolduktan sonra isteği yeniden deneyin.

Şu anda azaltmadan etkilenen API'ler

Sonunda uç noktayı "api.partnercenter.microsoft.com/" çağıran her bir İş Ortağı Merkezi API'si kısıtlanır. Şu anda azaltma sınırları yalnızca aşağıda listelenen API'lerde zorunlu kılınır. İş Ortağı Merkezi, API'lerin her birinde telemetriyi toplar ve azaltma sınırlarını dinamik olarak ayarlar. Aşağıdaki tabloda azaltmanın şu anda zorlandığı API'ler listeleniyor.

İşlem İş Ortağı Merkezi belgeleri
{baseURL}/v1/customers/{customer_id}/orders sipariş oluşturma
{baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{id-for-subscription}/upgrades aboneliği geçiş
{baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} 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 sepeti kullanıma alma
{baseURL}/v1/customers/{customer-id}/carts/{cart-id} sepeti güncelleştirme
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/registrations abonelik kaydetme
{baseURL}/v1/productupgrades ürün yükseltme varlığı oluşturma
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/conversions deneme aboneliğini ücretliye dönüştürme
{baseURL}/v1/customers/{customer-tenant-id} kimliğine göre müşteri alma
{baseURL}/v1/productUpgrades/eligibility ürün yükseltmesi için uygunluk elde edin
{baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{id-for-subscription} aboneliği yönetme
{baseURL}/v1/customers/{customer_id}/subscriptions müşteri aboneliklerinin tümünü alma
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id} Kimliğine göre abonelik alma
{baseURL}/v1/customers/{customer_id}/orders Tüm müşteri siparişlerini alma
{baseURL}/v1/customers/{customer_id}/orders/{order_id} Kimliğine göre 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 aboneliği yönetme
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/addons Abonelik için eklentilerin listesini alma
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/azureEntitlements Abonelik için Azure yetkilendirmelerinin listesini alma
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/registrationstatus Abonelik kayıt durumunu alma
{baseURL}/v1/customers/{customer-tenant-id}/transfers Müşterinin tüm transferlerini alma
{baseURL}/v1/productUpgrades/{upgrade-id}/status Ürün yükseltme durumunu alma
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/conversions Deneme dönüştürme tekliflerinin listesini alma
{baseURL}/v1/customers/{customer-tenant-id}/migrations/newcommerce/validate Aboneliği geçiş için doğrulama
{baseURL}/v1/customers/{customer-tenant-id}/migrations/newcommerce Yeni ticaret geçişi oluşturma

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 analiz etme konusunda en iyi uygulama için denetim kaydını belirli bir gün için sorgulamanızı öneririz.

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

operationtype/resources listesini bu API belgelerinde bulabilirsiniz.

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" 

    } 

}