Tātad, vai tas ir RAML vai OAS (Swagger)?

Dinamiskajā mikropakalpojumu pasaulē viss var mainÄ«ties ā€” jebkuru komponentu var pārrakstÄ«t citā valodā, izmantojot dažādus ietvarus un arhitektÅ«ru. NemainÄ«tiem vajadzētu palikt tikai lÄ«gumiem, lai ar mikropakalpojumu varētu pastāvÄ«gi mijiedarboties no ārpuses neatkarÄ«gi no iekŔējām metamorfozēm. Un Å”odien mēs runāsim par mÅ«su problēmu, izvēloties formātu lÄ«gumu aprakstam, un dalÄ«simies ar atrastajiem artefaktiem.

Tātad, vai tas ir RAML vai OAS (Swagger)?

Pasts sagatavots Anna Meļehova Šø Vladimirs Lapatins

Mikropakalpojumi. Izstrādājot Acronis Cyber ā€‹ā€‹ā€‹ā€‹Cloud, mēs sapratām, ka nevaram no tiem izvairÄ«ties. Un mikropakalpojuma projektÄ“Å”ana nav iespējama bez lÄ«guma formalizÄ“Å”anas, kas ir mikropakalpojuma saskarne.

Bet, ja produkts satur vairāk nekā vienu komponentu, un lÄ«guma izstrāde kļūst par regulāru darbÄ«bu, jÅ«s nevarat nesākt domāt par procesa optimizāciju. Kļūst acÄ«mredzams, ka saskarnei (lÄ«gumam) un ievieÅ”anai (mikropakalpojumam) ir jāatbilst viens otram, ka dažādiem komponentiem ir jāveic vienas un tās paÅ”as lietas vienādi un ka bez centralizētas lēmumu pieņemÅ”anas par visiem Å”iem lēmumiem katra komanda bÅ«s spiesta pavadiet laiku atkal un atkal, lai tos iegÅ«tu.

Tātad, vai tas ir RAML vai OAS (Swagger)?
Amazon mikropakalpojumu diagramma no čivināt Verners Vogeliss, Amazon CTO
Kāda ir dilemma? Faktiski ir divi veidi, kā mijiedarboties ar mikropakalpojumiem ā€” HTTP Rest un gRPC no Google. Nevēloties iekļūt Google tehnoloÄ£iju kaudzē, mēs izvēlējāmies HTTP Rest. HTTP REST lÄ«gumu anotācijas visbiežāk tiek aprakstÄ«tas vienā no diviem formātiem: RAML un OAS, kas agrāk bija zināmi kā Swagger, tāpēc katra izstrādes komanda saskaras ar nepiecieÅ”amÄ«bu izvēlēties kādu no standartiem. Bet, kā izrādās, izdarÄ«t Å”o izvēli var bÅ«t ļoti grÅ«ti.

Kāpēc ir vajadzīgas anotācijas?

Anotācija ir nepiecieÅ”ama, lai ārējs lietotājs varētu viegli saprast, ko var paveikt ar jÅ«su pakalpojumu, izmantojot tā HTTP saskarni. Tas ir, pamatlÄ«menÄ« anotācijā ir jāsatur vismaz pieejamo resursu saraksts, to HTTP metodes, pieprasÄ«juma struktÅ«ras, parametru saraksts, norāde par nepiecieÅ”amajām un atbalstÄ«tajām galvenēm, kā arÄ« atgrieÅ”anas kodi un atbildes formāti. Ä»oti svarÄ«gs lÄ«guma anotācijas elements ir to verbālais apraksts (ā€œkas notiks, ja pieprasÄ«jumam pievienosi Å”o vaicājuma parametru?ā€, ā€œKādā gadÄ«jumā tiks atgriezts kods 400?ā€)

Tomēr, ja runa ir par liela skaita mikropakalpojumu izstrādi, jÅ«s vēlaties iegÅ«t papildu vērtÄ«bu no rakstiskajām anotācijām. Piemēram, pamatojoties uz RAML/Swagger, jÅ«s varat Ä£enerēt gan klienta, gan servera kodu daudzās programmÄ“Å”anas valodās. Varat arÄ« automātiski saņemt mikropakalpojuma dokumentāciju un augÅ”upielādēt to savā izstrādātāja portālā :).

Tātad, vai tas ir RAML vai OAS (Swagger)?
Strukturēta līguma apraksta piemērs

Mazāk izplatÄ«ta ir mikropakalpojumu testÄ“Å”anas prakse, pamatojoties uz lÄ«gumu aprakstiem. Ja esat uzrakstÄ«jis gan anotāciju, gan komponentu, varat izveidot automātisko testu, kas pārbauda pakalpojuma atbilstÄ«bu ar dažāda veida ievaddatiem. Vai pakalpojums atgriež atbildes kodu, kas nav aprakstÄ«ts anotācijā? Vai tas spēs pareizi apstrādāt acÄ«mredzami nepareizus datus?

Turklāt kvalitatīva ne tikai paŔu līgumu izpilde, bet arī anotāciju vizualizācijas rīki ļauj vienkārŔot darbu ar mikropakalpojumu. Tas ir, ja arhitekts kvalitatīvi aprakstīja līgumu, pamatojoties uz to, dizaineri un izstrādātāji ieviesīs pakalpojumu citos produktos bez papildu laika izmaksām.

Lai iespējotu papildu rÄ«kus, gan RAML, gan OAS ir iespēja pievienot metadatus, kas nav paredzēti standartā (piemēram, Ŕādi tas tiek darÄ«ts OAS).

Kopumā radoÅ”uma iespējas mikropakalpojumu lÄ«gumu izmantoÅ”anā ir milzÄ«gas... vismaz teorētiski.

EzīŔa salīdzinājums ar čūsku

PaÅ”laik Acronis prioritārā attÄ«stÄ«bas joma ir Acronis Cyber ā€‹ā€‹ā€‹ā€‹platformas attÄ«stÄ«ba. Acronis Cyber ā€‹ā€‹ā€‹ā€‹Platform ir jauni treÅ”o puÅ”u pakalpojumu integrācijas punkti ar Acronis Cyber ā€‹ā€‹ā€‹ā€‹Cloud un aÄ£enta daļu. Lai gan mēs bijām apmierināti ar mÅ«su iekŔējām API, kas aprakstÄ«tas RAML, nepiecieÅ”amÄ«ba publicēt API atkal radÄ«ja jautājumu par izvēli: kuru anotācijas standartu vislabāk izmantot mÅ«su darbam?

Sākotnēji Ŕķita, ka ir divi risinājumi ā€“ visizplatÄ«tākās izstrādes bija RAML un Swagger (vai OAS). Bet patiesÄ«bā izrādÄ«jās, ka ir vismaz nevis 2 alternatÄ«vas, bet 3 vai vairāk.

No vienas puses, ir RAML - spēcÄ«ga un efektÄ«va valoda. Tas labi realizē hierarhiju un pārmantoÅ”anu, tāpēc Å”is formāts ir vairāk piemērots lieliem uzņēmumiem, kuriem nepiecieÅ”ams daudz aprakstu - tas ir, nevis viens produkts, bet daudzi mikropakalpojumi, kuriem ir kopÄ«gas lÄ«gumu daļas - autentifikācijas shēmas, vienādi datu tipi, kļūdu korpusi .

Bet RAML izstrādātājs Mulesoft ir pievienojies Open API konsorcijam, kas izstrādā ņirgāties. Tāpēc RAML apturēja savu attÄ«stÄ«bu. Lai iztēlotos pasākuma formātu, iedomājieties, ka galveno Linux komponentu uzturētāji aizgāja strādāt pie Microsoft. Å Ä« situācija rada priekÅ”nosacÄ«jumus Swagger izmantoÅ”anai, kas attÄ«stās dinamiski un jaunākajā - treÅ”ajā versijā - elastÄ«bas un funkcionalitātes ziņā praktiski panāk RAML.

Ja ne par vienu lietu...

Kā izrādās, ne visas atvērtā pirmkoda utilÄ«tas ir atjauninātas uz OAS 3.0. Mikropakalpojumiem Go viskritiskākais bÅ«s pielāgoÅ”anās trÅ«kums aiziet jaunākajai standarta versijai. Tomēr atŔķirÄ«ba starp Swagger 2 un Swagger 3 ir milzÄ«gs. Piemēram, treÅ”ajā versijā izstrādātāji:

  • uzlabots autentifikācijas shēmu apraksts
  • pabeigts JSON shēmas atbalsts
  • uzlabota iespēja pievienot piemērus

Situācija ir smieklÄ«ga: izvēloties standartu, jums ir jāapsver RAML, Swagger 2 un Swagger 3 kā atseviŔķas alternatÄ«vas. Tomēr tikai Swagger 2 ir labs OpenSource rÄ«ku atbalsts. RAML ir ļoti elastÄ«gs un sarežģīts, un sabiedrÄ«ba Swagger 3 slikti atbalsta, tāpēc jums bÅ«s jāizmanto patentēti rÄ«ki vai komerciāli risinājumi, kas parasti ir diezgan dārgi.

Turklāt, ja Swagger ir daudz jauku iespēju, piemēram, gatavs portāls editor.swagger.io, kurā var augÅ”upielādēt anotāciju un iegÅ«t tās vizualizāciju ar detalizētu aprakstu, saitēm un savienojumiem, tad fundamentālākam un mazāk draudzÄ«gam RAML tādas iespējas nav. Jā, jÅ«s varat meklēt kaut ko starp GitHub projektiem, atrast tur analogu un pats to izvietot. Taču jebkurā gadÄ«jumā kādam bÅ«s jāuztur portāls, kas nav tik ērts elementārai lietoÅ”anai vai testÄ“Å”anas vajadzÄ«bām. Turklāt swagger ir ā€œbezprincipālāksā€ vai liberālāks - to var Ä£enerēt no komentāriem kodā, kas, protams, ir pretrunā API pirmā principam un to neatbalsta neviena no RAML utilÄ«tprogrammām.

Savulaik sākām strādāt ar RAML kā elastÄ«gāku valodu, un rezultātā daudzas lietas nācās darÄ«t paÅ”iem. Piemēram, vienā no projektiem tiek izmantota utilÄ«ta satricinājumiem vienÄ«bu testos, kas atbalsta tikai RAML 0.8. Tāpēc mums bija jāpievieno kruÄ·i, lai utilÄ«ta varētu "apēst" RAML versiju 1.0.

Vai jums ir nepiecieÅ”ams izvēlēties?

Strādājot pie RAML risinājumu ekosistēmas pabeigÅ”anas, mēs nonācām pie secinājuma, ka mums ir jāpārvērÅ” RAML par Swagger 2 un tajā jāveic visa automatizācija, pārbaude, testÄ“Å”ana un turpmākā optimizācija. Tas ir labs veids, kā izmantot gan RAML elastÄ«bu, gan kopienas rÄ«ku atbalstu no Swagger.

Lai atrisinātu Å”o problēmu, ir divi atvērtā koda rÄ«ki, kuriem jānodroÅ”ina lÄ«guma konvertÄ“Å”ana:

  1. oas-raml-konvertors ir paÅ”laik neatbalstÄ«ta utilÄ«ta. Strādājot ar to, mēs atklājām, ka tai ir vairākas problēmas ar sarežģītiem RAML failiem, kas ir ā€œizkliedētiā€ lielā skaitā failu. Å Ä« programma ir uzrakstÄ«ta JavaScript un veic sintakses koka rekursÄ«vu pārvietoÅ”anos. Dinamiskās rakstÄ«Å”anas dēļ ir grÅ«ti saprast Å”o kodu, tāpēc mēs nolēmām netērēt laiku, rakstot ielāpus mirstoÅ”ai utilÄ«tai.
  2. webapi-parsētājs - rÄ«ks no tā paÅ”a uzņēmuma, kas apgalvo, ka ir gatavs pārveidot jebko un visu, un jebkurā virzienā. LÄ«dz Å”im ir paziņots par RAML 0.8, RAML 1.0 un Swagger 2.0 atbalstu. Tomēr mÅ«su pētÄ«juma laikā lietderÄ«ba joprojām bija ĀRKĀRTÄŖGI mitrs un nederÄ«gs. Izstrādātāji rada sava veida IR, ļaujot viņiem ātri pievienot jaunus standartus nākotnē. Bet lÄ«dz Å”im tas vienkārÅ”i nedarbojas.

Un tās vēl nav visas grÅ«tÄ«bas, ar kurām saskārāmies. Viena no mÅ«su konveijera darbÄ«bām ir pārbaudÄ«t, vai RAML no repozitorija ir pareizs attiecÄ«bā pret specifikāciju. Mēs izmēģinājām vairākas utilÄ«tas. PārsteidzoÅ”i, viņi visi zvērēja mÅ«su anotācijas dažādās vietās un ar pavisam citiem sliktiem vārdiem. Un ne vienmēr uz lietu :).

Beigu beigās mēs nokārtojāmies uz nu jau novecojuÅ”u projektu, kuram arÄ« ir vairākas problēmas (dažreiz avārijas no zila gaisa, rodas problēmas, strādājot ar regulārām izteiksmēm). Tādējādi mēs neatradām veidu, kā atrisināt validācijas un konvertÄ“Å”anas problēmas, pamatojoties uz bezmaksas rÄ«kiem, un nolēmām izmantot komerciālu utilÄ«tu. Nākotnē, atvērtā koda rÄ«kiem kļūstot arvien nobrieduŔākiem, Ŕī problēma var kļūt vieglāk atrisināma. Tikmēr darbaspēka un laika izmaksas ā€œapdareiā€ mums Ŕķita bÅ«tiskākas nekā komercpakalpojuma izmaksas.

Secinājums

Pēc visa Ŕī mēs vēlējāmies dalÄ«ties pieredzē un atzÄ«mēt, ka pirms lÄ«gumu aprakstÄ«Å”anas rÄ«ka izvēles ir skaidri jādefinē, ko no tā vēlaties un kādu budžetu esat gatavs ieguldÄ«t. Ja aizmirstam par OpenSource, jau ir liels skaits pakalpojumu un produktu, kas palÄ«dzēs pārbaudÄ«t, konvertēt un apstiprināt. Bet tie ir dārgi, un dažreiz ļoti dārgi. Lielam uzņēmumam Ŕādas izmaksas ir pieļaujamas, bet startup tās var kļūt par lielu slogu.

Nosakiet rÄ«ku komplektu, ko izmantosit vēlāk. Piemēram, ja jums vienkārÅ”i jāattēlo lÄ«gums, bÅ«s vieglāk izmantot Swagger 2, kuram ir skaista API, jo RAML jums bÅ«s jāveido un jāuztur pakalpojums paÅ”am.
Jo vairāk uzdevumu jums bÅ«s, jo plaŔāka bÅ«s nepiecieÅ”amÄ«ba pēc rÄ«kiem, turklāt dažādām platformām tie ir atŔķirÄ«gi, un labāk uzreiz iepazÄ«ties ar pieejamajām versijām, lai izdarÄ«tu izvēli, kas nākotnē samazina izmaksas.

Bet ir vērts atzÄ«t, ka visas Å”odien pastāvoŔās ekosistēmas ir nepilnÄ«gas. Tāpēc, ja uzņēmumā ir fani, kuriem patÄ«k strādāt RAML, jo "tas ļauj elastÄ«gāk izteikt domas", vai, gluži pretēji, dod priekÅ”roku Swagger, jo "tas ir skaidrāks", labāk ir atstāt viņus strādāt. kādā tie ir Viņi ir pieraduÅ”i un vēlas, jo jebkura formāta rÄ«ki prasa modifikāciju ar failu.

Runājot par mūsu pieredzi, turpmākajos ierakstos mēs runāsim par to, kādas statiskās un dinamiskās pārbaudes mēs veicam, pamatojoties uz mūsu RAML-Swagger arhitektūru, kā arī to, kādu dokumentāciju mēs ģenerējam no līgumiem un kā tas viss darbojas.

Aptaujā var piedalīties tikai reģistrēti lietotāji. Ielogoties, lūdzu.

Kādu valodu izmantojat, lai anotētu mikropakalpojumu līgumus?

  • RAML 0.8

  • RAML 1.0

  • Swagger 2

  • OAS3 (aka)

  • projekts

  • Cits

  • Nelietojot

Nobalsoja 100 lietotāji. 24 lietotāji atturējās.

Avots: www.habr.com

Pievieno komentāru