Allura huwa RAML jew OAS (Swagger)?

Fid-dinja dinamika tal-mikroservizzi, kollox jista’ jinbidel—kwalunkwe komponent jista’ jinkiteb mill-ġdid b’lingwa differenti, bl-użu ta’ oqfsa u arkitettura differenti. Il-kuntratti biss għandhom jibqgħu mhux mibdula sabiex il-mikroservizz ikun jista' jiġi interazzjoni magħhom minn barra fuq xi bażi permanenti, irrispettivament mill-metamorfosi interni. U llum se nitkellmu dwar il-problema tagħna li nagħżlu format biex niddeskrivu l-kuntratti u naqsmu l-artifatti li sibna.

Allura huwa RAML jew OAS (Swagger)?

Post ippreparat Anna Melekhova и Vladimir Lapatin

Mikroservizzi. Meta żviluppajna Acronis Cyber ​​​​Cloud, indunajna li ma nistgħux naħarbuhom. U t-tfassil ta 'mikroservizz huwa impossibbli mingħajr ma jiġi formalizzat il-kuntratt, li jirrappreżenta l-interface tal-mikroservizz.

Imma meta prodott ikun fih aktar minn komponent wieħed, u l-iżvilupp tal-kuntratt isir attività regolari, ma tistax ma tibda taħseb dwar l-ottimizzazzjoni tal-proċess. Jidher ovvju li l-interface (kuntratt) u l-implimentazzjoni (mikroservizz) għandhom jaqblu ma’ xulxin, li komponenti differenti għandhom jagħmlu l-istess affarijiet bl-istess mod, u li mingħajr teħid ta’ deċiżjonijiet ċentralizzat ta’ dawn id-deċiżjonijiet kollha, kull tim ikun sfurzat qattgħu ħin għal darb'oħra u għal darb'oħra biex tikseb minnhom.

Allura huwa RAML jew OAS (Swagger)?
Dijagramma tal-mikroservizzi tal-Amazon minn tweet Werner Vogelis, CTO Amazon
X'inhi d-dilemma? De facto, hemm żewġ modi kif jinteraġixxu mal-mikroservizzi - HTTP Rest u gRPC minn Google. Ma ridnax ninqabdu fil-munzell tat-teknoloġija ta 'Google, għażilna HTTP Rest. L-annotazzjonijiet tal-kuntratt HTTP REST ħafna drabi huma deskritti f'wieħed minn żewġ formati: RAML u OAS, magħrufa qabel bħala Swagger.Għalhekk, kull tim ta 'żvilupp huwa ffaċċjat bil-ħtieġa li jagħżel wieħed mill-istandards. Iżda kif jirriżulta, li tagħmel din l-għażla tista 'tkun diffiċli ħafna.

Għaliex huma meħtieġa annotazzjonijiet?

L-annotazzjoni hija meħtieġa sabiex utent estern ikun jista 'faċilment jifhem x'jista' jsir bis-servizz tiegħek permezz tal-interface HTTP tiegħu. Jiġifieri, f'livell bażiku, l-annotazzjoni għandu jkun fiha mill-inqas lista ta 'riżorsi disponibbli, il-metodi HTTP tagħhom, korpi ta' rikjesta, lista ta 'parametri, indikazzjoni tal-headers meħtieġa u appoġġjati, kif ukoll kodiċi ta' ritorn u formati ta 'rispons. Element estremament importanti tal-annotazzjoni tal-kuntratt huwa d-deskrizzjoni verbali tagħhom ("x'jiġri jekk iżżid dan il-parametru ta' mistoqsija mat-talba?", "f'liema każ se jiġi rritornat il-kodiċi 400?")

Madankollu, meta niġu għall-iżvilupp ta 'numru kbir ta' mikroservizzi, trid tiġbed valur addizzjonali mill-annotazzjonijiet bil-miktub. Pereżempju, ibbażat fuq RAML/Swagger, tista 'tiġġenera kemm kodiċi tal-klijent kif ukoll tas-server f'numru kbir ta' lingwi ta 'programmar. Tista' wkoll tirċievi awtomatikament dokumentazzjoni għall-mikroservizz u ttella' fuq il-portal tal-iżviluppatur tiegħek :).

Allura huwa RAML jew OAS (Swagger)?
Eżempju ta' deskrizzjoni ta' kuntratt strutturat

Inqas komuni hija l-prattika tal-ittestjar tal-mikroservizzi bbażati fuq deskrizzjonijiet tal-kuntratti. Jekk ktibt kemm annotazzjoni kif ukoll komponent, allura tista 'toħloq autotest li jiċċekkja l-adegwatezza tas-servizz b'diversi tipi ta' data input. Is-servizz jirritorna kodiċi ta' rispons li mhux deskritt fl-annotazzjoni? Se tkun kapaċi tipproċessa b'mod korrett data ovvjament mhux korretta?

Barra minn hekk, implimentazzjoni ta 'kwalità għolja mhux biss tal-kuntratti nfushom, iżda wkoll tal-għodod għall-viżwalizzazzjoni tal-annotazzjonijiet tagħmilha possibbli li tissimplifika x-xogħol mal-mikroservizz. Jiġifieri, jekk il-perit iddeskriva b'mod kwalitattiv il-kuntratt, ibbażat fuqu, disinjaturi u żviluppaturi se jimplimentaw is-servizz fi prodotti oħra mingħajr spejjeż ta 'ħin addizzjonali.

Biex jippermettu għodod addizzjonali, kemm RAML kif ukoll OAS għandhom il-kapaċità li jżidu metadejta mhux ipprovduta mill-istandard (per eżempju, dan huwa kif isir fl-OAS).

B'mod ġenerali, l-ambitu għall-kreattività fl-użu tal-kuntratti għall-mikroservizzi huwa enormi... għall-inqas fit-teorija.

Tqabbil ta 'qanfud ma' serp

Bħalissa, il-qasam ta 'żvilupp ta' prijorità f'Acronis huwa l-iżvilupp tal-Platform Cyber ​​​​Acronis. Acronis Cyber ​​​​Platform hija punti ġodda ta 'integrazzjoni ta' servizzi ta 'partijiet terzi ma' Acronis Cyber ​​​​Cloud u l-parti tal-aġent. Għalkemm konna kuntenti bl-APIs interni tagħna deskritti f'RAML, il-ħtieġa li nippubblikaw l-API għal darb'oħra qajmet il-kwistjoni tal-għażla: liema standard ta' annotazzjoni huwa l-aħjar biex tuża għax-xogħol tagħna?

Fil-bidu, deher li kien hemm żewġ soluzzjonijiet - l-aktar żviluppi komuni kienu RAML u Swagger (jew OAS). Iżda fil-fatt irriżulta li hemm mill-inqas mhux 2 alternattivi, iżda 3 jew aktar.

Minn naħa hemm RAML - lingwa qawwija u effiċjenti. Timplimenta tajjeb il-ġerarkija u l-wirt, għalhekk dan il-format huwa aktar adattat għal kumpaniji kbar li jeħtieġu ħafna deskrizzjonijiet - jiġifieri mhux prodott wieħed, iżda ħafna mikroservizzi li għandhom partijiet komuni ta 'kuntratti - skemi ta' awtentikazzjoni, l-istess tipi ta 'dejta, korpi ta' żball .

Iżda l-iżviluppatur ta 'RAML, Mulesoft, ingħaqad mal-konsorzju Open API, li qed jiżviluppa swagger. Għalhekk, RAML issospendiet l-iżvilupp tagħha. Biex timmaġina l-format tal-avveniment, immaġina li dawk li jżommu l-komponenti ewlenin tal-Linux telqu jaħdmu għal Microsoft. Din is-sitwazzjoni toħloq il-prerekwiżiti għall-użu ta 'Swagger, li qed jiżviluppa b'mod dinamiku u fl-aħħar - it-tielet verżjoni - prattikament ilaħħaq ma' RAML f'termini ta 'flessibilità u funzjonalità.

Jekk mhux għal ħaġa waħda...

Kif jirriżulta, mhux l-utilitajiet open-source kollha ġew aġġornati għall-OAS 3.0. Għall-mikroservizzi f'Go, l-iktar ħaġa kritika se tkun in-nuqqas ta' adattament go-swagger għall-aħħar verżjoni tal-istandard. Madankollu, id-differenza bejn Swagger 2 u Swagger 3 hija enormi. Per eżempju, fit-tielet verżjoni l-iżviluppaturi:

  • deskrizzjoni mtejba ta' skemi ta' awtentikazzjoni
  • lest Appoġġ għall-Iskema JSON
  • aġġorna l-abbiltà li żżid eżempji

Is-sitwazzjoni hija umoristiċi: meta tagħżel standard, trid tikkunsidra RAML, Swagger 2 u Swagger 3 bħala alternattivi separati. Madankollu, Swagger 2 biss għandu appoġġ tajjeb għall-għodod OpenSource. RAML huwa flessibbli ħafna... u kumpless, u Swagger 3 huwa appoġġjat ħażin mill-komunità, għalhekk ikollok tuża għodod proprjetarji jew soluzzjonijiet kummerċjali, li għandhom tendenza li jkunu pjuttost għoljin.

Barra minn hekk, jekk hemm ħafna karatteristiċi sbieħ fi Swagger, bħal portal lest editor.swagger.io, li fuqha tista 'ttella' annotazzjoni u tikseb il-viżwalizzazzjoni tagħha b'deskrizzjoni dettaljata, links u konnessjonijiet, allura għall-RAML aktar fundamentali u inqas faċli m'hemm l-ebda opportunità bħal din. Iva, tista 'tfittex xi ħaġa fost il-proġetti fuq GitHub, issib analogu hemmhekk u skjeraha lilek innifsek. Madankollu, fi kwalunkwe każ, xi ħadd ikollu jżomm il-portal, li mhuwiex daqshekk konvenjenti għall-użu bażiku jew għall-ħtiġijiet tal-ittestjar. Barra minn hekk, swagger huwa aktar "mingħajr prinċipju", jew aktar liberali - jista 'jiġi ġġenerat minn kummenti fil-kodiċi, li, ovvjament, imur kontra l-ewwel prinċipju tal-API u ma huwa appoġġjat minn ebda utilità RAML.

F'ħin minnhom bdejna naħdmu mar-RAML bħala lingwa aktar flessibbli, u bħala riżultat kellna nagħmlu ħafna affarijiet aħna stess. Pereżempju, wieħed mill-proġetti juża l-utilità ramlifikazzjonijiet fit-testijiet tal-unità, li jappoġġja biss RAML 0.8. Allura kellna nżidu krozzi sabiex l-utilità tkun tista '"tiekol" RAML verżjoni 1.0.

Għandek bżonn tagħżel?

Wara li ħdimna fuq it-tlestija tal-ekosistema ta 'soluzzjonijiet għal RAML, wasalna għall-konklużjoni li għandna bżonn nikkonverti RAML fi Swagger 2 u nwettqu l-awtomazzjoni, il-verifika, l-ittestjar u l-ottimizzazzjoni sussegwenti fiha. Dan huwa mod tajjeb biex tisfrutta kemm il-flessibbiltà ta 'RAML kif ukoll l-appoġġ tal-għodda tal-komunità minn Swagger.

Biex issolvi din il-problema, hemm żewġ għodod OpenSource li għandhom jipprovdu konverżjoni tal-kuntratt:

  1. oas-raml-konvertitur hija utilità bħalissa mhux appoġġjata. Filwaqt li naħdmu magħha, skoprejna li għandha għadd ta 'problemi b'RAMLs kumplessi li huma "mifruxa" fuq numru kbir ta' fajls. Dan il-programm huwa miktub bil-JavaScript u jwettaq traversal rikorsiv ta 'siġra tas-sintassi. Minħabba l-ittajpjar dinamiku, isir diffiċli li wieħed jifhem dan il-kodiċi, għalhekk iddeċidejna li ma naħlux ħin bil-miktub irqajja għal utilità li tmut.
  2. webapi-parser - għodda mill-istess kumpanija li tgħid li lesta tikkonverti kull ħaġa u kollox, u fi kwalunkwe direzzjoni. Sal-lum, tħabbar appoġġ għal RAML 0.8, RAML 1.0 u Swagger 2.0. Madankollu, fiż-żmien tar-riċerka tagħna, l-utilità kienet għadha ESTREMAMENT niedja u li ma tistax tintuża. L-iżviluppaturi joħolqu tip ta IR, li jippermettilhom iżidu malajr standards ġodda fil-futur. Imma s'issa sempliċement ma taħdimx.

U dawn mhux kollha d-diffikultajiet li ltqajna magħhom. Wieħed mill-passi fil-pipeline tagħna huwa li nivverifikaw li r-RAML mir-repożitorju huwa korrett relattiv għall-ispeċifikazzjoni. Ippruvajna diversi utilitajiet. B'mod sorprendenti, huma kollha ħalef għall-annotazzjonijiet tagħna f'postijiet differenti u bi kliem ħażin kompletament differenti. U mhux dejjem sal-punt :).

Fl-aħħar, issetiljajna fuq proġett issa skadut, li għandu wkoll numru ta 'problemi (xi drabi jiġġarraf mill-blu, ikollu problemi meta jaħdem ma' espressjonijiet regolari). Għalhekk, ma sibniex mod kif insolvu l-problemi ta 'validazzjoni u konverżjoni bbażati fuq għodod ħielsa, u ddeċidew li nużaw utilità kummerċjali. Fil-futur, hekk kif l-għodod OpenSource isiru aktar maturi, din il-problema tista’ ssir aktar faċli biex tissolva. Sadanittant, l-ispejjeż tax-xogħol u tal-ħin għall-"finitura" dehru lilna aktar sinifikanti mill-ispiża ta 'servizz kummerċjali.

Konklużjoni

Wara dan kollu, ridna naqsmu l-esperjenza tagħna u ninnotaw li qabel ma tagħżel għodda biex tiddeskrivi l-kuntratti, trid tiddefinixxi b'mod ċar dak li trid minnha u liema baġit lest li tinvesti. Jekk ninsew dwar l-OpenSource, diġà hemm numru kbir ta’ servizzi u prodotti li jgħinuk tiċċekkja, tikkonverti, u tivvalida. Iżda huma għaljin, u kultant għaljin ħafna. Għal kumpanija kbira, spejjeż bħal dawn huma tollerabbli, iżda għal startup jistgħu jsiru piż kbir.

Iddetermina s-sett ta 'għodod li se tuża aktar tard. Pereżempju, jekk għandek bżonn biss li turi kuntratt, ikun aktar faċli li tuża Swagger 2, li għandha API sabiħa, għax f'RAML ikollok tibni u żżomm is-servizz lilek innifsek.
Iktar ma jkollok kompiti, iktar tkun wiesgħa l-ħtieġa għall-għodod, u huma differenti għal pjattaformi differenti, u huwa aħjar li tiffamiljarizza ruħek immedjatament mal-verżjonijiet disponibbli sabiex tagħmel għażla li timminimizza l-ispejjeż tiegħek fil-futur.

Imma ta’ min nirrikonoxxu li l-ekosistemi kollha li jeżistu llum huma imperfetti. Għalhekk, jekk hemm fannijiet fil-kumpanija li jħobbu jaħdmu fir-RAML għax "jippermettilek tesprimi l-ħsibijiet b'mod aktar flessibbli", jew, għall-kuntrarju, jippreferu Swagger għax "huwa aktar ċar," huwa aħjar li tħallihom jaħdmu f'liema huma Huma mdorrijin għaliha u jriduha, minħabba li l-għodda ta 'kwalunkwe formati jeħtieġu modifika b'fajl.

Fir-rigward tal-esperjenza tagħna, fil-postijiet li ġejjin se nitkellmu dwar liema verifiki statiċi u dinamiċi nwettqu bbażati fuq l-arkitettura RAML-Swagger tagħna, kif ukoll liema dokumentazzjoni niġġeneraw mill-kuntratti, u kif taħdem kollha.

Utenti reġistrati biss jistgħu jipparteċipaw fl-istħarriġ. Idħol, ta 'xejn.

Liema lingwa tuża biex tinnota kuntratti ta' mikroservizz?

  • RAML 0.8

  • RAML 1.0

  • Swagger 2

  • OAS3 (magħruf ukoll bħala)

  • Blueprint

  • Oħrajn

  • Mhux qed tuża

Ivvutaw 100 utent. 24 utent astjenew.

Sors: www.habr.com

Żid kumment