API-torlódási útmutató a Partner Center API-kat hívó partnerek számára
A Microsoft API-szabályozást implementál, hogy konzisztensebb teljesítményt biztosítson a Partnerközpont API-kat hívogató partnerek számára. A szabályozás korlátozza a szolgáltatáshoz egy adott időintervallumon belül beérkező kérelmek számát, így megakadályozza az erőforrások túlzott mértékű felhasználását. Bár a Partnerközpont nagy mennyiségű kérelem kezelésére lett tervezve, ha túl sok kérelem érkezik be kevés partnertől, a szabályozás segít fenntartani az optimális teljesítményt és a megbízható működést az összes partner számára.
A szabályozási korlátok a forgatókönyvtől függően eltérőek lehetnek. Ha például nagy mennyiségű írást végez, a szabályozás lehetősége magasabb, mint ha csak olvasásokat végez.
Mi történik, ha szabályozás történik?
Ha túllép egy szabályozási küszöbértéket, a Partnerközpont egy időre korlátozza az ügyféltől érkező további kéréseket. A szabályozás viselkedése a kérelmek típusától és számától függ.
Gyakori szabályozási forgatókönyvek
Az ügyfelek szabályozásának leggyakoribb okai a következők:
- Egy API-ra vonatkozó kérések nagy száma partnerbérlő-azonosítónként: egyes Partnerközpont API-k esetében a szabályozást a partnerbérlő azonosítója határozza meg. Ha túl sok hívás egyazon partnerbérlő-azonosítón lévő API-khoz, az túllépi a szabályozási küszöbértéket.
- Az API-k ügyfélbérlő-azonosítónkénti azonosítónkénti nagyszámú kérése van: más API-k esetében a szabályozást a partnerbérlő-azonosító/ügyfélbérlő-azonosító kombináció határozza meg; ezekben az esetekben az ugyanazon ügyfél-bérlőazonosítón túl sok hívás szabályozást eredményez , míg a többi ügyféllel szembeni hívások sikeresek lehetnek.
A szabályozás elkerülésének ajánlott eljárásai
Az olyan programozási eljárások, mint például az erőforrások folyamatos lekérdezése frissítések keresése és az erőforrásgyűjtemények rendszeres ellenőrzése új vagy törölt erőforrások keresése érdekében, nagyobb valószínűséggel vezetnek szabályozáshoz, és csökkentik az általános teljesítményt. Az egyidejű API-hívások nagy számú kérést eredményezhetnek egységenként, ami a kérések szabályozását eredményezi. Ehelyett a változáskövetést és a változásértesítéseket kell használnia. Emellett képesnek kell lennie tevékenységnaplók használatára a változások észleléséhez. További információt a Partnerközpont tevékenységnaplóiban talál. Javasoljuk a partnereknek, hogy a hatékonyabb működés és a szabályozás elkerülése érdekében fontolja meg a tevékenységnapló API használatát. Lásd alább a tevékenységnaplók használatára vonatkozó példát is.
A szabályozás kezelésének ajánlott eljárásai
A szabályozás kezelésének ajánlott eljárásai a következők:
- Csökkentse a párhuzamosság mértékét.
- Csökkentse a hívások gyakoriságát.
- Kerülje az azonnali újrapróbálkozást, mert minden kérés a használati korlátokon belül keletkezik.
Hibakezelés implementálásakor használja a 429-es HTTP-hibakódot a szabályozásészleléshez. A meghiúsult művelet válasza tartalmazza a „Retry-After” válaszfejlécet. A kérések „Retry-after” késleltetéssel való háttérbe küldése a szabályozásból történő helyreállítás leggyorsabb módja.
Az újrapróbálkozást követő késleltetés használata:
- Várja meg az Újrapróbálkozás után fejlécben megadott másodpercek számát.
- Ismételje meg a kérést.
- Ha a kérés ismét meghiúsul egy 429-re vonatkozó hibakóddal, akkor továbbra is szabályozva lesz. Próbálkozzon újra exponenciális visszalépéssel, használja az ajánlott újrapróbálkozási késleltetést, és próbálkozzon újra a kéréssel, amíg sikeres nem lesz.
- Ha az SDK-t használja, kivételt kap a 429-re vonatkozó állapotkóddal, amikor a kérés szabályozása folyamatban van. Használja a RetryAfter tulajdonságot a kivételben, és próbálkozzon újra a kéréssel az idő leteltét követően.
A szabályozás által jelenleg érintett API-k
A végpontot "api.partnercenter.microsoft.com/" hívásokat hívó összes Partner Center API szabályozás alatt áll. Jelenleg a szabályozási korlátok csak az alább felsorolt API-kra vonatkoznak. A Partnerközpont összegyűjti az egyes API-k telemetriáját, és dinamikusan módosítja a szabályozási korlátokat. Az alábbi táblázat azokat az API-kat sorolja fel, amelyeken a szabályozás jelenleg kényszerítve van.
Művelet | Partnerközpont dokumentációja |
---|---|
{baseURL}/v1/customers/{customer_id}/orders | rendelés létrehozása |
{baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{id-for-subscription}/upgrades | előfizetés áttűnés |
{baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} | bővítmény vásárlása előfizetéshez |
{baseURL}/v1/customers/{customer-id}/carts/{cart-id} | kosár létrehozása |
{baseURL}/v1/customers/{customer-id}/carts/{cart-id}/checkout | kosár kivétele |
{baseURL}/v1/customers/{customer-id}/carts/{cart-id} | kosár frissítése |
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/registrations | előfizetés regisztrálása |
{baseURL}/v1/productupgrades | termékfrissítési entitás létrehozása |
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/conversions | próbaverziós előfizetés konvertálása fizetőssé |
{baseURL}/v1/customers/{customer-tenant-id} | ügyfél lekérése azonosító alapján |
{baseURL}/v1/productUpgrades/eligibility | termékfrissítésre való jogosultság lekérése |
{baseURL}/v1/customers/{customer-tenant-id}/subscriptions/{id-for-subscription} | előfizetés kezelése |
{baseURL}/v1/customers/{customer_id}/subscriptions | teljes körű ügyfél-előfizetések lekérése |
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id} | Előfizetés lekérése azonosító alapján |
{baseURL}/v1/customers/{customer_id}/orders | Az összes ügyfélrendelés lekérése |
{baseURL}/v1/customers/{customer_id}/orders/{order_id} | Rendelés lekérése azonosító alapján |
{baseURL}/v1/customers/{customer_id}/orders/{order_id}/provisioningstatus | Előfizetés kiépítési állapotának lekérése |
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id} | Rendelések kezelése és előfizetés kezelése |
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/addons | Előfizetés bővítményeinek listájának lekérése |
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/azureEntitlements | Az előfizetésHez tartozó Azure-jogosultságok listájának lekérése |
{baseURL}/v1/customers/{customer_id}/subscriptions/{subscription_id}/registrationstatus | Előfizetés-regisztráció állapotának lekérése |
{baseURL}/v1/customers/{customer-tenant-id}/transfers | Az ügyfél összes átvitelének lekérése |
{baseURL}/v1/productUpgrades/{upgrade-id}/status | Termékfrissítés állapotának lekérése |
{baseURL}/v1/customers/{customer-id}/subscriptions/{subscription-id}/conversions | Próbakonverziós ajánlatok listájának lekérése |
{baseURL}/v1/customers/{customer-tenant-id}/migrations/newcommerce/validate | Előfizetés ellenőrzése a migráláshoz |
{baseURL}/v1/customers/{customer-tenant-id}/migrations/newcommerce | Új kereskedelmi felületi migrálás létrehozása |
{baseURL}/v1/customers/{customerId}/promotionEligibilities | Promóciós jogosultság ellenőrzése |
Hibakód válasza:
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." }
Példa tevékenységnaplóra
A napi változások elemzésének ajánlott eljárásaihoz javasoljuk, hogy egy adott napra vonatkozóan kérdezze le az auditrekordot.
A válaszban egy adott művelettípus módosításait tartalmazó eredményt kap. A kívánt művelet alapján szűrhet. Ha például egy újonnan létrehozott ügyfél érdekli, tekintse meg az operationType = "add_customer" elemet.
Az operationtype/resources listája ezekben az API-dokumentumokban található.
Példa válaszra
Kérelem:
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
Válasz:
{
"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"
}
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: