DĂŒnaamilises mikroteenuste maailmas vĂ”ib kĂ”ik muutuda â iga komponent vĂ”ib olla ĂŒmber kirjutatud teises keeles, kasutades erinevaid raamistikke ja arhitektuuri. Muutumatuks peavad jÀÀma vaid lepingud, et mikroteenusega saaks suhelda vĂ€ljastpoolt teatud stabiilsusel, sĂ”ltumata sisemistest muutustest. TĂ€na rÀÀgime meie valikuprobleemist lepingute kirjeldamise formaadi osas ja jagame leitud artefakte.

Postituse koostas ja
Mikroteenused. Acronis Cyber Cloud'i arendamisel mÔistsime, et me ei pÀÀse neist. Mikroteenuse projekteerimine ei ole vÔimalik ilma lepingu formaliseerimiseta, mis esindab mikroteenuse liidest.
Kuid kui tootest leiab rohkem kui ĂŒks komponent ja lepingu arendamisest saab regulaarne tegevus, hakkad paratamatult mĂ”tlema protsessi optimeerimisele. On ilmne, et liides (leping) ja rakendamine (mikroteenus) peavad ĂŒksteisele vastama, et erinevad komponendid teeksid samu asju ĂŒhtviisi ning et ilma nende otsuste keskse vastuvĂ”tmiseta peab iga meeskond ikka ja jĂ€lle kulutama aega nende hankimiseks.

Amazonile kuuluvate mikroteenuste skeem Werner Vogels, Amazon'i CTO
Mis on dilemmas? De facto on kaks viisi mikroteenuste suhtlemiseks â HTTP Rest ja gRPC Google'ilt. Me ei soovinud olla seotud Google'i tehnoloogiatega, seetĂ”ttu valisime HTTP Rest'i. HTTP REST lepingute annotatsioonid on kĂ”ige sagedamini kirjeldatud ĂŒhes kahest formaadist: RAML ja OAS, mis oli varem tuntud kui Swagger. SeetĂ”ttu seisavad kĂ”ik arendajate meeskonnad silmitsi vajadusega valida ĂŒhe standardi kasuks. Kuid nagu selgus, vĂ”ib selle valiku tegemine olla vĂ€ga keeruline.
Miks on annotatsioonid vajalikud?
Annotatsioon aitab vĂ€listel kasutajatel kiiresti mĂ”ista, mida saavad nad teie teenusega selle HTTP-liidese kaudu teha. Selle pĂ”hitasandi puhul peaks annotatsioon sisaldama vĂ€hemalt loetelu saadaval olevatest ressursitest, nende HTTP-meetoditest, pĂ€ringute kehast, parametrite loendist, nĂ”utud ja toetatud pĂ€istest ning ka tagastatavatest koodidest ja vastuse formaatidest. ĂĂ€rmiselt oluline element lepingu annotatsioonis on nende sĂ”naline kirjeldus ("mis juhtub, kui lisada see query-parameeter pĂ€ringule?", "millal tagastatakse kood 400?")
Siiski, kui asi puudutab suurte mikroteenuste arendamist, on soov soovida saada rohkem kasu kirjutatud annotatsioonidest. NĂ€iteks RAML-i / Swaggeri pĂ”hjal saab genereerida nii kliendi- kui ka serverikoodi paljusid programmeerimiskeeli. Samuti on vĂ”imalik automaatselt luua mikroteenuse dokumentatsioon ja laadida see ĂŒles teie arendaja portaalile :).

Struktureeritud lepingu kirjelduse nÀide
Harva praktika mikroteenuste testimiseks pĂ”hineb lepingute kirjeldustel. Kui olete kirjutanud nii annotatsiooni kui ka komponendi, on vĂ”imalik luua automaatne test, mis kontrollib teenuse toimivust erinevate andmetĂŒĂŒpide sisendiga. Kas teenus tagastab koodi, mida annotatsioonis ei ole kirjeldatud? Kas ta suudab korrektselt töödelda valeandmeid?
Lisaks vÔimaldab kvaliteetne lepingute rakendamine ja annotatsioonide visualiseerimise tööriistade arendamine hÔlbustada mikroteenuste tööd. Kui arhitekt on lepingut kvaliteetselt kirjeldanud, saavad disainerid ja arendajad selle alusel teenuse teistesse toodetesse integreerida ilma tÀiendavate ajakulu.
Lisaks on nii RAML-l kui ka OAS-il vÔimalus lisada metainfot, mis ei ole standardiga ette nÀhtud ().
KokkuvÔttes on lepingute rakendamiseks mikroteenustes loomingulise vaba ruumi palju... vÀhemalt teoreetiliselt
Siili ja rÀstiku vÔrdlemine
Praegu on Acronise arenduste peamine suund Acronis Cyber Platformi arendamine. Acronis Cyber Platform on uus koht, kus integreerida kolmandate osapoolte teenuseid Acronis Cyber Cloudiga ja agentuuriosaga. Kuigi meie sisemised API-d, mis on kirjeldatud RAML-is, olid rahuldavad, tĂ”stis API-de avaldamise vajadus taas kĂŒsimuse: millist annotatsioonistandardit peaksime oma töös kasutama?
Alguses nĂ€is, et lahendusi on kaks â enim levinud arendused RAML ja Swagger (vĂ”i OAS). Kuid tegelikult selgus, et alternatiive on vĂ€hemalt mitte 2, vaid 3 vĂ”i rohkem.
Ăhest kĂŒljest on RAML â vĂ”imas ja efektiivne keel. Sellel on hĂ€sti rakendatud hierarhia ja pĂ€rand, mistĂ”ttu sobib see formaat rohkem suurte ettevĂ”tete jaoks, kellel on vaja palju kirjeldusi â mitte ĂŒhte toodet, vaid palju mikroteenuseid, millel on ĂŒhised lepingute osad â autentimisskeemid, ĂŒhesugused andmetĂŒĂŒbid, veateated.
Kuid RAMLi arendaja, ettevĂ”te Mulesoft, liitus Open API konsortsiumiga, mis tegeleb arendamisega. . SeetĂ”ttu on RAML oma arengu peatunud. Kujutle, et Linuxi peamiste komponentide hooldajad on lĂ€inud Microsofti tööle. Selline olukord loob eeldused, et kasutada Swaggerit, mis areneb dĂŒnaamiliselt ja viimases â kolmandas versioonis â jĂ”uab RAML-iga vĂ”rreldes paindlikkuses ja funktsionaalsuses praktiliselt samale tasemele.
Kuid on ĂŒks aga...
Kuidas selgus, ei ole kÔik avatud lÀhtekoodiga tööriistad uuendatud OAS 3.0 versioonile. Go pÔhiste mikroteenuste jaoks on kÔige kriitilisem kohandamise puudumine uue standardi versiooni jaoks. Kuid erinevus Swagger 2 ja Swagger 3 vahel on . NÀiteks kolmandas versioonis on arendajad:
- parandanud autentimise skeemide kirjeldust
- JSON Schema toe
- parandanud nÀidiste lisamise vÔimalust
Situatsioon on lĂ”bus: standardi valimisel tuleks RAML-i, Swagger 2 ja Swagger 3 kĂ€sitleda eraldi alternatiividena. Ainult Swagger 2-l on hea OpenSource tööriistade tugi. RAML on vĂ€ga paindlik... ja keeruline, samas kui Swagger 3-l on nĂ”rk toetav kogukond, mistĂ”ttu peate kasutama isejuhitavaid vĂ”i kommertslahendusi, mis tavaliselt on ĂŒsna kallid.
Kuid Swagger pakub mitmeid meeldivaid vĂ”imalusi, nagu valmisportaal. , kuhu saab laadida annotatsiooni ja saada selle visualiseerimise koos detailse kirjelduse, linkide ja seostega, siis RAML-i puhul sellist vĂ”imalust ei ole. Jah, vĂ”ib uurida projekte GitHub-is, leida sealt analooge ja need ise ĂŒles seada. Kuid igal juhul peab keegi portaalist hoolitsema, mis ei ole algtaseme kasutamiseks vĂ”i testivajaduste jaoks mugav. Lisaks on swagger rohkem "printsipiaalne", vĂ”i siis liberaalne â seda saab genereerida koodikommentaaridest, mis muidugi on vastuolus API esitluse pĂ”himĂ”ttega ja ei saa RAML-i tööriistade poolt toetust.
Oleme kunagi alustanud RAML-iga kui paindlikuma keelega, ja lĂ”puks pidime palju ise tegema. NĂ€iteks kasutatakse ĂŒhes projektis tööriista ĂŒksustes, mis toetab ainult RAML 0.8. Seega pidime lisama tugistruktuure, et tööriist saaks "seedida" RAML versiooni 1.0.
Kas on vaja valida?
Olles uurinud lahenduste ökosĂŒsteemi tĂ€iendamist RAML-i kaudu, oleme jĂ”udnud arusaamisele, et peame RAML-i konverteerima Swagger 2-sse, et teostada kogu automatiseerimine, valideerimine, testimine ja edasine optimeerimine just seal. See on suurepĂ€rane viis kasutada nii RAML-i paindlikkust kui ka Swaggeri kogukonna tööriistade tuge.
Selle probleemi lahendamiseks on olemas kaks avatud lÀhtekoodiga tööriista, mis peaksid tagama lepingute konverteerimise:
- â praegu mitte toetatud utiliit. Töötades sellega, avastasime, et tal on mitmeid probleeme keeruliste RAML-idega, mis on âjaotatudâ suure hulga failide vahel. See programm on kirjutatud JavaScriptis ja teostab rekursiivset lĂ€bitöötamist sĂŒntakspuu kaudu. DĂŒnaamilise tĂŒpiseerimise tĂ”ttu on selles koodis orienteerumine keeruline, seega otsustasime mitte raisata aega sureva utiliidi patch'ide kirjutamisele.
- â sama ettevĂ”tte tööriist, mis vĂ€idab, et suudab konverteerida kĂ”ike ja igal pool, ning igas suunas. TĂ€na on lubatud tugi RAML 0.8-le, RAML 1.0-le ja Swagger 2.0-le. Kuid meie uurimise ajal oli utiliit jĂ”udnud veel toores ja kasutamiseks kĂ”lbmatu. Arendajad loovad teatud tĂŒĂŒpi , mis vĂ”imaldab neil tulevikus kiiresti uusi standardsid lisada. Kuid seni see kĂ”ik lihtsalt ei tööta.
Ja see pole veel kĂ”ik raskused, millega me silmitsi seisame. Ăks meie töövoo samme on kontrollida, et RAML hoiab, mis on allkastis vastavuses spetsifikatsiooniga. Proovisime mitmeid tööriistu. Ăllatavalt, aga kĂ”ik nad kritiseerisid meie annotatsioone erinevates kohtades ja tĂ€iesti erinevate halvasĂ”nadega. Ja mitte alati Ă”igustatult :).
LĂ”puks jĂ€ime vananenud projekti juurde, millel on mitmeid probleeme (mĂ”nikord langeb tĂŒhjast kohast, tekib probleeme regulaarsete avaldiste kasutamisel). Seega ei leidnud me tasuta tööriistade pĂ”hjal valideerimise ja konverteerimise ĂŒlesannete lahendamisel head lahendust ning otsustasime kasutada Ă€rilahendust. Tulevikus, kui OpenSource vahendid arenevad edasi, vĂ”ib selle ĂŒlesande lahendamine muutuda lihtsamaks. Seni tundusid meelespea lĂ”puleviimise töö- ja ajakulud olulisemad kui kommertsteenuse hind.
KokkuvÔte
Kogu selle jutu juures soovime jagada oma kogemust ja rÔhutada, et lepingute kirjeldamiseks vajaliku tööriista valimisel on oluline selgelt mÀÀratleda, mida te sellelt soovite, ja milline eelarve teil on. Kui unustada avatud lÀhtekood, on juba praegu saadaval suur hulk teenuseid ja tooteid, mis aitavad kontrollida, konverteerida ja valideerida. Need aga on kallid, mÔnikord isegi vÀga kallid. Suure ettevÔtte jaoks on sellised kulud talutavad, kuid idufirmale vÔivad need olla suur koormus.
MÀÀratlege tööriistade komplekt, mida kavatsete hiljem kasutada. NĂ€iteks kui peate lihtsalt lepingut kuvama, siis on lihtsam kasutada Swagger 2, millel on ilus API, sest RAML-i puhul peate teenuse ise ĂŒles seadma ja hooldama.
Mida rohkem teil on ĂŒlesandeid, seda laiem on vajadus tööriistade jĂ€rele, ja need on erinevad erinevate platvormide jaoks. SeetĂ”ttu on parem tutvuda olemasolevate versioonidega, et teha valik, mis minimeerib teie tulevased kulud.
Tuleb tunnistada, et kĂ”ik olemasolevad ökosĂŒsteemid on tĂ€iuslikud. SeetĂ”ttu, kui ettevĂ”ttes on fĂ€nne, kes armastavad töötada RAML-is, kuna "see vĂ”imaldab mĂ”tteid paindlikumalt vĂ€ljendada", vĂ”i vastupidi, eelistavad Swaggerit, kuna "see on arusaadavam", on kĂ”ige parem jĂ€tta nad töötama selles, milles nad on harjunud ja soovivad, kuna igasuguste formaatide tööriistad vajavad lihvimist.
Mis puutub meie kogemusse, siis jĂ€rgmistes postitustes rÀÀgime sellest, milliseid - staatilisi ja dĂŒnaamilisi kontrollimisi teeme meie RAML-Swagger arhitektuuri pĂ”hjal, samuti sellest, millist dokumentatsiooni genereerime lepingutest ning kuidas see kĂ”ik töötab.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Millist keelt kasutate mikroteenuste lepingute annotatsioonide jaoks?
RAML 0.8
RAML 1.0
Swagger 2
OAS3 (ehk )
Blueprint
Muu
Ei kasuta
HÀÀletas 100 kasutajat. 24 kasutasid kokkuhoidu.
Allikas: habr.com
