Verziószámozási műveletek megvalósítása
Egyéni összekötők Azure Logic Apps, Microsoft Power Automate, vagy Microsoft Power Apps specifikációs OpenAPI fájlt kell biztosítaniuk. Ez a OpenAPI specifikáció egyes belépési pontokat, más néven műveleteket határoz meg. Minden műveletnek egyedi operationId
és egyedi urlPath
kombinációja HttpVerb
van.
{
"/items": {
"get": {
"summary": "Get rows",
"description": "This operation gets a list of items.",
"operationId": "GetItems"
},
"post": {
"summary": "Insert row",
"description": "This operation inserts an item.",
"operationId": "PostItem"
}
}
}
Ezek a műveletek az idővel növekedhetnek és változhatnak a funkciók hozzáadásakor vagy bővítésekor. Bizonyos változások csupán additívak, és nem feltétlenül bontják fel az ügyfelek és a kiszolgálók közötti szerződést. Az új paraméterek hozzáadása, a további adatok visszaadása vagy a rugalmasabb bemenetek engedélyezése ebbe a kategóriába tartozik.
Számos módosítás azonban ténylegesen megszakíthatja a OpenAPI specifikációban leírt szerződést. A paraméterek eltávolítása, egyes bemenetek támogatásának megszüntetése, illetve a bemenet, a kimenet vagy a művelet jelentésének és viselkedésének módosítása a felbontást eredményező kategóriába tartozik.
Az API-k biztonságos fejlesztése érdekében fontos, hogy az ügyfelek értsék a követett mintát. Az API feladata a visszamenőleges kompatibilitás fenntartása, a szándékok közlése és a verziószámozási attribútumok leírása. Az ügyfél felelőssége, hogy megjelenítse vagy elrejtse az elavult, lejárt vagy az újabb verziókkal rendelkező műveleteket. Így a műveletek idővel anélkül növekedhetnek és fejlődhetnek, hogy indokolatlanul törékennyé tennék a rájuk támaszkodó alkalmazásokat.
API annotáció
OpenAPI nem támogatja az operatív verziószámozást. A cél eléréséhez a munka nagy része az x-ms-api-annotation
objektumon keresztül történik, amely a globális hatókörre és a műveleti hatókörre is alkalmazható. A globális objektum olyan tulajdonságokat tartalmaz, amelyek az API egészére vonatkoznak:
{
"x-ms-api-annotation": {
"status": "Preview"
}
}
Tulajdonság | Értékek | Default | Description |
---|---|---|---|
állapot | "Preview" "Production" |
"Preview" |
Az API egészének állapota – először előzetes verzióban, majd éles környezetben a használat és a stabilitás alapján |
A működési hatókörben ez az objektum részletesebb tulajdonságokat tartalmaz. Az objektumon kívül további tulajdonságok is találhatók, amelyek érvényesek és részt vesznek a verziószámozás evolúciós folyamatában:
{
"deprecated": true,
"x-ms-api-annotation": {
"status": "Production",
"family": "MyOperation",
"revision": 2
}
}
Tulajdonság | Értékek | Default | Ismertetés |
---|---|---|---|
elavult | null false true |
false |
Jelzi, hogy a művelet elavult-e |
x-ms-visibility | null "" "Important" "Advanced" "Internal" |
"" |
A művelet kívánt láthatósága és jelentősége, ahol a null vagy a "" Normál állapotot jelez |
állapot | "Preview" "Production" |
"Production" |
A művelet állapota – ez eltérő lehet magától az API állapotától, de ha nincs megadva, a rendszer örökli a legfelső szintű API-állapotot |
család | {gyakori műveletnév} | operationName | Egy név, amely a művelet minden változatára vonatkozik |
javítás | numerikus (1,2,3…) | 1 |
A megadott operatív család változata |
lejárat | ISO8601 dátuma | (nincs) | Opcionális tipp az ügyfél számára a támogatás végének előrejelzésére |
Az elavult beállítás akkor állítható be, true
ha már nem kívánatos, hogy az ügyfelek használják ezt a műveletet. Ez a OpenAPI tulajdonság a Rögzített mezők specifikációban található.
A Láthatóság a művelet szándékolt relatív jelentőségének jelzője. Az "Important"
láthatóság azt jelzi, hogy a műveletnek a lista tetején kell lennie, jól látható helyen. A normál láthatóság (amelyet null
vagy üres karakterlánc ""
jelez) az alapértelmezett, és azt jelenti, hogy a művelet megjelenik a listában, valószínűleg a Fontos műveletek után. Az "Advanced"
(speciális) láthatóság azt jelzi, hogy a műveletnek a lista alján kell lennie, vagy elrejtve egy kibontható vezérlőelem mögé. Előfordulhat, hogy a speciális műveletek nehezebben használhatók, kevésbé népszerűek vagy szűkebben alkalmazhatók. A "Internal"
láthatóság azt jelzi, hogy a műveletet nem szabad elérhetővé tenni a felhasználók számára, és csak belsőleg szabad használni. A belső műveletek programozott módon hasznosak és értékesek, de nem végfelhasználók számára készültek. A belső műveletek is meg vannak jelölve ilyenként, hogy elrejtsék őket bármilyen felhasználói felületről az elalasztási folyamat során anélkül, hogy ténylegesen eltávolítanák őket az API-ból, ami egyébként feltörési változást okozna.
Az Állapot az API vagy a művelet stabilitását jelzi. A "Preview"
(előzetes verzió) azt jelzi, hogy a művelet vagy az API új, és még nem bizonyított a használatban. Az előzetes verzió azt jelzi, hogy az éles rendszereknek óvatosan kell eljárniuk a függőség feltételezésekor. Amint a művelet vagy az API jobban elterjedt, és bizonyosodott, hogy megfelel a megbízhatóság, a sikerességi arány és a méretezhetőség standardjainak, szándékosan "Production"
(éles) állapotra frissíthető.
A következő metrikai követelmények általánosságban vonatkoznak a "Production"
(éles) állapotot elérni kívánó műveletekre:
- 80%-os sikerességi arány három hét alatt
- a HTTP-válaszkódok százalékaként megadva a 2xx tartományban
- 99,9%-os megbízhatóság három héten keresztül
- a HTTP-válaszkódok százalékaként megadva nem az 5xx tartományban (az 502, 504 és 520 nem tartoznak bele ebbe a számításba)
A Család azon műveletek közötti kapcsolatot jelzi, amelyek fogalmilag egy művelethez tartoznak, de különböző változatok és esetleg kompatibilitástörő változások vannak közöttük. Több művelet is ugyanazzal a családnévvel fog rendelkezni, ha egymás változatainak kell tekinteni őket, és az egyedi változatszámuk alapján vannak sorba állítva.
A Változat művelet evolúciós sorrendjét jelzi a műveletek családján belül. A családon belül minden egyes művelet rendelkezik egy olyan változattal, amely a sorrendet jelző belső index része. Az üres változatot a rendszer az 1
. változatként kezeli. Ha egy művelet újabb változatai érhetők el, az ügyfeleknek szembetűnőbben kell megjeleníteniük őket, és szándékosabban kell ajánlaniuk őket, de továbbra is lehetővé kell tenniük a még nem elavult, potenciálisan régebbi változatok kiválasztását.
Az Lejárat nem kötelező, és azt a lejárati dátumot jelzi, amikortól a művelet támogatása már nem biztosított. Ezt csak az elavult műveletekhez kell beállítani, és jelenleg nem jelenik meg egyik felületen sem.
Működési élettartam
A műveletek kiszámítható élettartammal rendelkeznek, ami példával jeleníthető meg.
Kezdőpont
Kezdetben a műveletek nem feltétlenül jeleznek semmit a változatokról. Ezeknél a műveleteknél az alapértelmezett beállítások vannak alkalmazva, ezért az 1. változatnak tekintendők az operationId
értékkel egyező családnévben.
{
"/{list}/items": {
"get": {
"summary": "Get rows",
"description": "This operation gets a list of items.",
"operationId": "GetItems"
}
}
}
Ez megegyezik az alábbi explicitebb módú meghatározással:
{
"/{list}/items": {
"get": {
"summary": "Get rows",
"description": "This operation gets a list of items.",
"operationId": "GetItems",
"deprecated": false,
"x-ms-api-annotation": {
"status": "Production",
"family": "GetItems",
"revision": 1
}
}
}
}
Műveletindítás
Az API-k fejlesztése a legtöbb esetben egy művelet hozzáadását jelenti. Például új metódusok és a meglévő metódusok új változatainak hozzáadását. Az új változat biztonságos kezdeményezéséhez a következőképpen módosíthatja a OpenAPI specifikációt:
{
"/{list}/items": {
"get": {
"summary": "Get rows (V1 - downplayed)",
"description": "This operation gets a list of items.",
"operationId": "GetItems",
"deprecated": false,
"x-ms-visibility": "advanced",
"x-ms-api-annotation": {
"status": "Production",
"family": "GetItems",
"revision": 1
}
}
}
"/v2/{list}/items": {
"get": {
"summary": "Get rows (V2 - new hotness)",
"description": "This operation gets a list of items.",
"operationId": "GetItems_V2",
"deprecated": false,
"x-ms-api-annotation": {
"status": "Preview",
"family": "GetItems",
"revision": 2
}
}
}
}
Fontos
Figyelje meg, hogy a GetItems V2 egyedi operationId
értékkel rendelkezik, és kezdetben előzetes verzióban szerepel a listán.
Azt is figyelje meg, hogy a GetItems v1 fejlett láthatósággal rendelkezik, ezért nem kiemelten jelenik meg.
Művelet elavulása
Néha a meglévő V1 belépési pontok határozatlan ideig maradnak, ha továbbra is értéket nyújtanak, és nincs kényszerítő ok a megszüntetésükre. Számos V2 belépési pont azonban szándékosan felülírja a V1 belépési pontot. Ennek biztonságos végrehajtásához minden forgalomnak a névleges nulla értéket kell elérnie az eredeti műveletben. Ha a telemetria megerősíti ezt, a következő módosítás hajtható végre:
{
"/{list}/items": {
"get": {
"summary": "Get rows (deprecated)",
"description": "This operation gets a list of items.",
"operationId": "GetItems",
"deprecated": true,
"x-ms-api-annotation": {
"status": "Production",
"family": "GetItems",
"revision": 1
}
}
}
"/v2/{list}/items": {
"get": {
"summary": "Get rows",
"description": "This operation gets a list of items.",
"operationId": "GetItems_V2",
"deprecated": false,
"x-ms-api-annotation": {
"status": "Production",
"family": "GetItems",
"revision": 2
}
}
}
}
Fontos
Figyelje meg, hogy a GetItems V1-et már elavultként jelöli meg a rendszer. Ez az elavult műveletek utolsó állapotváltása. A GetItems V2 mostantól teljesen mértékben átvette a GetItems V1 helyét.
Miért kell ezzel foglalkozni?
Számos oka lehet az operatív verziószámozáshoz való ragaszkodásnak. Az első az, hogy ezzel biztosítható, hogy az Azure Logic Appshez és a Power Automate-hez hasonló ügyfelek továbbra is hibátlanul működjenek, amikor a felhasználók összekötői műveleteket integrálnak az adatfolyamokba. A műveleteket a fenti módszer használatával kell ellátni verziószámmal a következő esetekben:
- Egy művelet új változatának hozzáadásakor
- Egy meglévő művelet paramétereket ad hozzá vagy távolít el
- Egy meglévő művelet jelentősen megváltoztatja a bemenetet vagy a kimenetet
Szigorú értelemben véve
Előfordulhatnak olyan esetek, amikor verziószámozás— nélkül is megúszhatja, de legyen óvatos, és végezzen sok tesztelést annak biztosítása érdekében, hogy ne hagyja figyelmen kívül azokat a peremhálózati eseteket, ahol a felhasználók váratlanul megszakadhatnak. Íme az óvatos rövid lista arról, hogy mikor úszhatja meg nélküle:
A rendszer hozzáad egy új műveletet.
Ez nem szakítaná meg kifejezetten a meglévő ügyfeleket.
Egy új, opcionális paraméter hozzáadása egy meglévő művelethez.
Ez nem szakítaná meg a meglévő hívásokat, de alaposan meg kell fontolni.
Egy meglévő művelet viselkedésének minimális változása.
A változás jellegétől és felhasználók használati módjától függően előfordulhat, hogy ez nem szakítja meg a meglévő hívókat. Ez a legbizonytalanabb, mivel a bemeneti elfogadás, a kimenet előállítása, időzítése vagy feldolgozása közötti jelentős különbség oly módon befolyásolhatja a művelet viselkedését, amely megnehezítheti a változás kockázatának meghatározását.
Ajánlott mindig elővigyázatosnak maradni és a nem triviális API-módosítások elvégzésekor minden esetben új verziót készíteni.
Visszajelzés küldése
Nagyra értékeljük az összekötőplatform problémáival kapcsolatos visszajelzéseket és az új funkciókkal kapcsolatos ötleteket. Ha visszajelzést szeretne küldeni, lépjen a Problémák küldése vagy segítség kérése az összekötőkkel kapcsolatban részre, és válassza ki a visszajelzés típusát.