No laila ʻo RAML a i ʻole OAS (Swagger)?

I loko o ka honua ikaika o nā microservices, hiki ke hoʻololi i kekahi mea - hiki ke kākau hou ʻia kekahi ʻāpana ma kahi ʻōlelo ʻokoʻa, me ka hoʻohana ʻana i nā ʻano hana like ʻole a me ka hoʻolālā. ʻO nā ʻaelike wale nō ka mea e hoʻololi ʻole ʻia i hiki ke hoʻopili ʻia ka microservice mai waho ma ke kumu mau, me ka nānā ʻole i nā metamorphoses kūloko. A i kēia lā e kamaʻilio mākou e pili ana i kā mākou pilikia o ke koho ʻana i kahi ʻano no ka wehewehe ʻana i nā ʻaelike a kaʻana like i nā mea i loaʻa iā mākou.

No laila ʻo RAML a i ʻole OAS (Swagger)?

Hoʻomākaukau ʻia ka pou Anna Melehova и ʻO Vladimir Lapatin

Nā lawelawe liʻiliʻi. I ka hoʻomohala ʻana iā Acronis Cyber ​​​​Cloud, ʻike mākou ʻaʻole hiki iā mākou ke pakele iā lākou. A hiki ʻole ke hoʻolālā ʻana i kahi microservice me ka ʻole o ka hoʻokumu ʻana i ka ʻaelike, e hōʻike ana i ka interface o ka microservice.

Akā inā ʻoi aku ka nui o ka ʻāpana o ka huahana, a lilo ka hoʻomohala ʻana i ka ʻaelike i hana maʻamau, ʻaʻole hiki iā ʻoe ke hoʻomaka e noʻonoʻo e pili ana i ka loiloi kaʻina. Ua ʻike ʻia he pono e kūlike ka interface (ʻaelike) a me ka hoʻokō (microservice) kekahi i kekahi, pono e hana nā ʻāpana like ʻole i nā mea like ma ke ʻano like, a me ka ʻole o ka hoʻoholo ʻana i waena o kēia mau hoʻoholo āpau, e koi ʻia kēlā me kēia hui. e hoʻolōʻihi i ka manawa e kiʻi iā lākou .

No laila ʻo RAML a i ʻole OAS (Swagger)?
Amazon microservices diagram mai tweet Werner Vogelis, CTO Amazon
He aha ka pilikia? ʻO ka ʻoiaʻiʻo, ʻelua ala e launa pū ai i nā microservices - HTTP Rest a me gRPC mai Google. ʻAʻole makemake e loaʻa i ka ʻenehana ʻenehana Google, ua koho mākou i ka hoʻomaha HTTP. Hōʻike pinepine ʻia nā hōʻike aelike HTTP REST ma kekahi o nā ʻano ʻelua: RAML a me OAS, i kapa mua ʻia ʻo Swagger. Akā e like me ka mea i ʻike ʻia, hiki ke paʻakikī ke koho ʻana i kēia koho.

No ke aha e pono ai nā annotation?

Pono ka annotation i hiki i kahi mea hoʻohana waho ke noʻonoʻo maʻalahi i ka mea hiki ke hana me kāu lawelawe ma o kāna interface HTTP. ʻO ia hoʻi, ma ka pae kumu, pono e loaʻa i ka annotation kahi papa inoa o nā kumuwaiwai i loaʻa, kā lākou mau ʻano HTTP, nā kino noi, kahi papa inoa o nā ʻāpana, kahi hōʻailona o nā poʻomanaʻo pono a kākoʻo ʻia, a me nā code hoʻihoʻi a me nā ʻano pane. ʻO kahi mea koʻikoʻi o ka palapala hoʻolaha ʻaelike ʻo kā lākou wehewehe waha ("He aha ka mea e hana inā hoʻohui ʻoe i kēia ʻāpana hulina i ka noi?", "I ka hihia hea e hoʻihoʻi ʻia ai ke code 400?")

Eia naʻe, i ka hiki ʻana mai i ka hoʻomohala ʻana i ka nui o nā microservices, makemake ʻoe e unuhi i ka waiwai hou mai nā annotation kākau. No ka laʻana, e pili ana i ka RAML/Swagger, hiki iā ʻoe ke hana i ka mea kūʻai aku a me ka code server i kahi helu nui o nā ʻōlelo papahana. Hiki iā ʻoe ke loaʻa i nā palapala no ka microservice a hoʻouka iā ia i kāu mea hoʻomohala-portal :).

No laila ʻo RAML a i ʻole OAS (Swagger)?
Laʻana o ka wehewehe ʻana i ka ʻaelike i kūkulu ʻia

ʻOi aku ka liʻiliʻi o ka hana o ka hoʻāʻo ʻana i nā microservice ma muli o nā wehewehe ʻaelike. Inā ua kākau ʻoe i kahi annotation a me kahi ʻāpana, a laila hiki iā ʻoe ke hana i kahi autotest e nānā i ka lawa o ka lawelawe me nā ʻano ʻano ʻikepili hoʻokomo. Hoʻihoʻi ka lawelawe i kahi code pane ʻaʻole i wehewehe ʻia ma ka annotation? Hiki iā ia ke hana pololei i ka ʻikepili maopopo hewa ʻole?

Eia kekahi, ʻo ka hoʻokō kiʻekiʻe kiʻekiʻe ʻaʻole wale nā ​​​​ʻaelike iā lākou iho, akā ʻo nā mea hana no ka nānā ʻana i nā annotations e hiki ai ke maʻalahi i ka hana me ka microservice. ʻO ia hoʻi, inā ua wehewehe ka mea kākau i ka ʻaelike ma ke ʻano kiʻekiʻe, e pili ana i ia, nā mea hoʻolālā a me nā mea hoʻomohala e hoʻokō i ka lawelawe i nā huahana ʻē aʻe me ka ʻole o nā koina manawa hou.

I mea e hiki ai i nā mea hana hou aku, hiki iā RAML a me OAS ke hoʻohui i nā metadata i hāʻawi ʻole ʻia e ka maʻamau (no ka laʻana, penei ka hana ʻana ma OAS).

Ma keʻano laulā, nui ka nui o ka hoʻomohala ʻana i ka hoʻohana ʻana i nā ʻaelike no nā microservices ... ma ka liʻiliʻi loa i ka ʻepekema.

Ka hoohalike ana o ka hedgehog me ka nahesa

I kēia manawa, ʻo ka wahi hoʻomohala mua ma Acronis ka hoʻomohala ʻana o ka Acronis Cyber ​​​​Platform. ʻO Acronis Cyber ​​​​Platform nā wahi hou o ka hoʻohui ʻana o nā lawelawe ʻaoʻao ʻekolu me Acronis Cyber ​​​​Cloud a me ka ʻāpana ʻāpana. ʻOiai ua hauʻoli mākou i kā mākou API kūloko i wehewehe ʻia ma RAML, ʻo ka pono e hoʻopuka i ka API i hāpai hou i ka nīnau o ke koho: ʻo wai ka maʻamau annotation ʻoi aku ka maikaʻi e hoʻohana no kā mākou hana?

I ka wā mua, ʻike ʻia aia ʻelua mau hoʻonā - ʻo ka hoʻomohala maʻamau ʻo RAML a me Swagger (a i ʻole OAS). Akā i ka ʻoiaʻiʻo, ua ʻike ʻia aia ma ka liʻiliʻi ʻaʻole 2 mau koho, akā 3 a ʻoi aku paha.

Ma kekahi ʻaoʻao aia ʻo RAML - he ʻōlelo ikaika a maikaʻi. Hoʻokō maikaʻi ʻo ia i ka hierarchy a me ka hoʻoilina, no laila ʻoi aku ka maikaʻi o kēia ʻano no nā ʻoihana nui e pono ai ka nui o nā wehewehe - ʻo ia hoʻi, ʻaʻole hoʻokahi huahana, akā he nui nā microservices i loaʻa nā ʻāpana maʻamau o nā ʻaelike - nā palapala hōʻoia, nā ʻano ʻikepili like, nā kino hewa. .

Akā ʻo ka mea hoʻomohala o RAML, ʻo Mulesoft, ua hui pū me ka Open API consortium, e ulu nei ʻO Swagger. No laila, ua kāpae ʻo RAML i kāna hoʻomohala ʻana. No ka noʻonoʻo ʻana i ke ʻano o ka hanana, e noʻonoʻo e haʻalele nā ​​mea mālama o nā ʻāpana Linux nui e hana no Microsoft. Hoʻokumu kēia kūlana i nā koi no ka hoʻohana ʻana iā Swagger, e hoʻomohala nei i ka dynamically a i ka mea hou loa - ʻekolu o ka mana - hoʻokō pono me RAML ma ke ʻano o ka maʻalahi a me ka hana.

Inā ʻaʻole no hoʻokahi mea ...

E like me ka mea i ʻike ʻia, ʻaʻole i hōʻano hou ʻia nā mea pono open-source i OAS 3.0. No nā microservices i Go, ʻo ka mea koʻikoʻi loa ka nele o ka hoʻololi hele-swagger no ka mana hou loa o ka maʻamau. Eia naʻe, ʻo ka ʻokoʻa ma waena o Swagger 2 a me Swagger 3 nui loa. No ka laʻana, i ke kolu o ka mana nā mea hoʻomohala:

  • hoʻomaikaʻi ʻia ka wehewehe ʻana o nā papahana hōʻoia
  • pau Kākoʻo JSON Schema
  • hoʻonui i ka hiki ke hoʻohui i nā laʻana

He ʻakaʻaka ke kūlana: i ke koho ʻana i kahi maʻamau, pono ʻoe e noʻonoʻo iā RAML, Swagger 2 a me Swagger 3 ma ke ʻano he ʻokoʻa. Eia naʻe, ʻo Swagger 2 wale nō ke kākoʻo maikaʻi no nā mea hana OpenSource. He maʻalahi loa ka RAML...a paʻakikī, a kākoʻo maikaʻi ʻole ʻia ʻo Swagger 3 e ke kaiāulu, no laila pono ʻoe e hoʻohana i nā hāmeʻa proprietary a i ʻole nā ​​​​ʻoluʻolu pāʻoihana, ʻoi aku ke kumukūʻai.

Eia kekahi, inā he nui nā hiʻohiʻona maikaʻi ma Swagger, e like me kahi puka i hoʻomākaukau ʻia editor.swagger.io, kahi e hiki ai iā ʻoe ke hoʻouka i kahi annotation a loaʻa i kāna hiʻohiʻona me ka wehewehe kikoʻī, nā loulou a me nā pili, a laila no ka RAML ʻoi aku ka nui a me ka liʻiliʻi o ka launa ʻana ʻaʻohe manawa kūpono. ʻAe, hiki iā ʻoe ke ʻimi i kekahi mea ma waena o nā papahana ma GitHub, e ʻimi i kahi analogue ma laila a kau iā ʻoe iho. Eia nō naʻe, i kēlā me kēia hihia, pono e mālama kekahi i ka portal, ʻaʻole maʻalahi no ka hoʻohana maʻamau a i ʻole nā ​​​​pono hoʻāʻo. Eia kekahi, ʻoi aku ka "unprincipled" o ka swagger, a ʻoi aku ka liberal - hiki ke hana ʻia mai nā ʻōlelo i loko o ke code, ʻoiaʻiʻo, e kūʻē i ke kumu mua o ka API a ʻaʻole kākoʻo ʻia e kekahi o nā pono RAML.

I kekahi manawa ua hoʻomaka mākou e hana me RAML ma ke ʻano he ʻōlelo maʻalahi, a ma muli o ka hopena, pono mākou e hana i nā mea he nui iā mākou iho. No ka laʻana, hoʻohana kekahi o nā papahana i ka pono hoʻopaʻapaʻa i nā hoʻokolohua ʻāpana, e kākoʻo wale ana iā RAML 0.8. No laila, pono mākou e hoʻohui i nā koʻokoʻo i hiki i ka pono ke "ʻai" RAML version 1.0.

Pono ʻoe e koho?

I ka hana ʻana i ka hoʻopau ʻana i ka kaiaola o nā hoʻonā no RAML, ua hiki mākou i ka hopena e pono mākou e hoʻohuli iā RAML i Swagger 2 a hoʻokō i nā automation āpau, hōʻoia, hoʻāʻo a me ka optimization ma hope. He ala maikaʻi kēia e hoʻohana ai i ka maʻalahi o RAML a me ke kākoʻo mea hana kaiāulu mai Swagger.

No ka hoʻoponopono i kēia pilikia, aia ʻelua mau mea hana OpenSource e hāʻawi i ka hoʻololi ʻaelike:

  1. oas-raml-converter he mea pono ʻole i kākoʻo ʻia i kēia manawa. I ka hana ʻana me ia, ua ʻike mākou he nui nā pilikia me nā RAML paʻakikī i "hohola ʻia" ma luna o ka nui o nā faila. Ua kākau ʻia kēia polokalamu ma JavaScript a hana i kahi huakaʻi hou o kahi lāʻau syntax. Ma muli o ka paʻakikī paʻakikī, lilo ia i mea paʻakikī ke hoʻomaopopo i kēia code, no laila ua hoʻoholo mākou ʻaʻole e hoʻopau manawa i ke kākau ʻana i nā pāpaʻi no kahi pono make.
  2. webapi-parser - he mea paahana mai ka hui like e olelo ana ua makaukau e hoohuli i na mea a pau, a ma kekahi aoao. I kēia lā, ua hoʻolaha ʻia ke kākoʻo no RAML 0.8, RAML 1.0 a me Swagger 2.0. Eia naʻe, i ka manawa o kā mākou noiʻi ʻana, ua mau ka pono LOA pulu a hiki ole ke hoohana. Hoʻokumu nā mea hoʻomohala i kahi ʻano IR, hiki iā lākou ke hoʻohui koke i nā kūlana hou i ka wā e hiki mai ana. Akā i kēia manawa ʻaʻole ia e hana.

A ʻaʻole ʻo kēia wale nō nā pilikia i loaʻa iā mākou. ʻO kekahi o nā ʻanuʻu i kā mākou pipeline e hōʻoia i ka pololei o ka RAML mai ka waihona e pili ana i ka kikoʻī. Ua ho'āʻo mākou i kekahi mau mea pono. ʻO ka mea kupanaha, ua hoʻohiki lākou a pau i kā mākou hōʻike ma nā wahi like ʻole a me nā ʻōlelo ʻino ʻē loa. A ʻaʻole mau i ka helu :).

I ka hopena, ua hoʻoholo mākou i kahi papahana kahiko, a he nui nā pilikia (i kekahi manawa e hāʻule i waho o ka uliuli, pilikia i ka hana ʻana me nā ʻōlelo maʻamau). No laila,ʻaʻole i loaʻa iā mākou kahi ala e hoʻoponopono ai i nā pilikia o ka hōʻoia a me ka hoʻololiʻana ma muli o nā mea hana manuahi, a ua hoʻoholo mākou e hoʻohana i kahi mea kūʻai. I ka wā e hiki mai ana, i ka lilo ʻana o nā hāmeʻa OpenSource i mea makua, hiki ke maʻalahi kēia pilikia e hoʻoponopono. I kēia manawa, ʻoi aku ka nui o nā koina hana a me ka manawa no ka "hoʻopau" iā mākou ma mua o ke kumukūʻai o kahi lawelawe ʻoihana.

hopena

Ma hope o kēia mau mea a pau, makemake mākou e kaʻana like i kā mākou ʻike a hoʻomaopopo ʻia ma mua o ke koho ʻana i kahi mea hana no ka wehewehe ʻana i nā ʻaelike, pono ʻoe e wehewehe pono i kāu makemake mai ia mea a me ke kālā āu e makemake ai e hoʻolilo. Inā poina iā OpenSource, aia ka nui o nā lawelawe a me nā huahana e kōkua iā ʻoe e nānā, hoʻololi, a hōʻoia. Akā, he pipiʻi lākou, a he pipiʻi i kekahi manawa. No kahi hui nui, hiki ke ʻae ʻia ia mau kumukūʻai, akā no ka hoʻomaka ʻana hiki ke lilo i mea kaumaha nui.

E hoʻoholo i ka hoʻonohonoho o nā mea hana āu e hoʻohana ai ma hope. No ka laʻana, inā pono ʻoe e hōʻike i kahi ʻaelike, e maʻalahi ka hoʻohana ʻana iā Swagger 2, nona kahi API nani, no ka mea ma RAML pono ʻoe e kūkulu a mālama i ka lawelawe iā ʻoe iho.
ʻOi aku ka nui o nā hana i loaʻa iā ʻoe, ʻoi aku ka nui o ka pono o nā mea hana, a ʻokoʻa lākou no nā paepae like ʻole, a ʻoi aku ka maikaʻi o ka hoʻomaʻamaʻa koke ʻana iā ʻoe iho me nā mana i loaʻa i mea e hana ai i kahi koho e hōʻemi i kāu mau kumukūʻai i ka wā e hiki mai ana.

Akā, he mea pono ke hoʻomaopopo ʻia ʻaʻole kūpono nā kaiaola a pau i kēia lā. No laila, inā he poʻe pā i ka hui makemake e hana ma RAML no ka mea "hiki iā ʻoe ke hōʻike i nā manaʻo me ka maʻalahi," a i ʻole, makemake ʻo Swagger no ka mea "ʻoi aku ka maopopo," ʻoi aku ka maikaʻi o ka waiho ʻana iā lākou e hana. i loko o lākou Ua maʻa a makemake lākou, no ka mea, pono nā mea hana o kekahi o nā ʻano i ka hoʻololi ʻana me kahi faila.

No kā mākou ʻike, ma nā pou aʻe e kamaʻilio mākou e pili ana i nā loiloi static a me ka ikaika a mākou e hana ai e pili ana i kā mākou RAML-Swagger architecture, a me nā palapala a mākou e hana ai mai nā ʻaelike, a pehea e hana ai.

Hiki i nā mea hoʻohana i hoʻopaʻa inoa ʻia ke komo i ka noiʻi. Eʻe, e 'oluʻolu.

He aha ka ʻōlelo āu e hoʻohana ai e hōʻike i nā ʻaelike microservice?

  • RAML 0.8

  • RAML 1.0

  • ʻAhaʻi 2

  • OAS3 (aka)

  • ʻO ke kiʻi

  • ʻO kekahi

  • ʻAʻole hoʻohana

100 mea hoʻohana i koho. Ua hōʻole nā ​​mea hoʻohana 24.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka