İş 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:
Yeniden Deneme Sonrası üst bilgisinde belirtilen saniye sayısını bekleyin.
İsteği yeniden deneyin.
İ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.
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"
}
}