DĂŒnaamilises mikrosĂŒsteemide maailmas vĂ”ib kĂ”ik muutuda â iga komponent vĂ”ib olla kirjutatud teises keeles, kasutades teisi raamistikke ja arhetĂŒĂŒpe. Ainsateks muutumatuks jÀÀvateks elementideks peavad olema lepingud, et oleks vĂ”imalik mikrosĂŒsteemiga suhelda vĂ€ljaspool setkust kindlal alusel, olenemata sisemistest metamorfoosidest. TĂ€na rÀÀgime oma probleemist lepingute kirjeldamise formaadi valimisel ja jagame leitud artefakte.

Postituse koostas ja
MikrosĂŒsteemid. Acronis Cyber Cloud'i arendamisel mĂ”istsime, et me ei saa neist mööda minna. Ja mikrosĂŒsteemi projekteerimine on vĂ”imatu ilma lepingu formaliseerimiseta, mis on mikrosĂŒsteemi liides.
Kuid kui toote sees on rohkem kui ĂŒks komponent ning lepingu arendamine muutub regulaarseks tegevuseks, hakkad automaatselt mĂ”tlema protsessi optimeerimisele. On ilmne, et liides (leping) ja rakendus (mikrosĂŒsteem) peavad ĂŒksteisele vastama, et erinevad komponendid peaksid tegema samu asju samal moel, ja et ilma kĂ”igi nende otsuste keskse vastuvĂ”tu korral peab iga meeskond taas ja taas aega kulutama nende saamiseks.

Amazon'i mikrosĂŒsteemide skeem Werner Vogels, Amazon'i CTO
Kus seisneb dilemma? De facto on mikrosĂŒsteemide suhtlemiseks kaks viisi â HTTP Rest ja Google'i gRPC. Soovimata sattuda Google'i tehnoloogiakuhja, valisime HTTP Rest. HTTP REST lepingute annotatsioonid kirjeldatakse kĂ”ige sagedamini kahes formaadis: RAML ja OAS, varem tuntud kui Swagger. Seega seisab iga arendajate meeskond silmitsi vajadusega valida ĂŒhe standardi kasuks. Kuid, nagu selgus, vĂ”ib see valik olla vĂ€ga keeruline.
Miks on annotatsioonid vajalikud?
Annotatsioon on vajalik, et vĂ€line kasutaja saaks hĂ”lpsasti aru, mida saab teie teenusega teha lĂ€bi selle HTTP-liidese. See tĂ€hendab, et alusel peab annotatsioon sisaldama vĂ€hemalt loetelu saadaval olevatest ressurssidest, nende HTTP-meetoditest, pĂ€ringu kehadest, parameetrite loendist, nĂ”utud ja toetatavate pealkirjade mÀÀratlemisest, samuti tagastuskoode ja vastuse vormate. ĂĂ€rmiselt oluline on ka lepingute annotatsioonide sĂ”naline kirjeldus ("mida juhtub, kui lisada see pĂ€ringu parameeter?", "millisel juhul tagastatakse kood 400?")
Kuid kui rÀÀkida suure hulga mikroteenuste arendamisest, tahaks lisaks tuua ka rohkem kasu kirjutatud annotatsioonidest. NÀiteks RAML/Swaggeri alusel saab genereerida nii kliendi- kui serverikoodi paljudes programmeerimiskeeltes. Samuti on vÔimalik automaatselt saada mikroteenuse dokumentatsiooni ja laadida see teie arendaja portaalile : ).

Struktureeritud lepingute kirjelduse nÀide
Harvemini on praktika testida mikroteenuseid lepingute kirjelduste pĂ”hjal. Kui olete kirjutanud nii annotatsiooni kui ka komponendi, on vĂ”imalik luua automaatne test, mis kontrollib teenuse töö sobivust erinevate tĂŒĂŒpi andmete sisenemisel. Kas teenus tagastab vastuskoodi, mida annotatsioonis ei ole kirjeldatud? Kas see suudab Ă”igesti töödelda teadlikult valeid andmeid?
Lisaks vÔimaldab kvaliteetne rakendamine mitte ainult lepingute, vaid ka annotatsioonide visualiseerimise tööriistade lihtsustamist mikroteenuste töös. See tÀhendab, et kui arhitekt kirjeldas lepingut kvaliteetselt, saavad disainerid ja arendajad teenust teistesse toodetesse rakendada ilma tÀiendavate ajakuludeta.
Töö jaoks tÀiendavates tööriistades vÔivad nii RAML kui OAS vÔimaldada lisada metainfot, mida standard ei ennusta ().
Ăldiselt on lepingute rakendamiseks mikroteenustes loovuse jaoks tohutu ruum⊠vĂ€hemalt teoreetiliselt
Siili ja rÀstiku vÔrdlemine
Praegu on Acronise prioriteetne suund Acronis Cyber Platformi arendamine. Acronis Cyber Platform on uued integratsioonipunktid kolmandate osapoolte teenuste ja Acronis Cyber Cloudi ning agentuuriosade vahel. Kuigi meie sisemised API-d, mis on kirjeldatud RAML-is, on meid rahule jĂ€tnud, tĂ”stis vajadus API avaldamise kĂŒsimuse: milline annotatsioonistandard oleks meie töö jaoks parem?
Esialgu tundus, et lahendusi on kaks â enim levinud arendused RAML ja Swagger (vĂ”i OAS). Kuid tegelikult selgus, et alternatiive on vĂ€hemalt 2, vaid 3 vĂ”i enam.
Ăhelt poolt on olemas RAML â vĂ”imas ja efektiivne keel. Sellel on hĂ€sti realiseeritud hierarhia ja pĂ€rimine, nii et see formaat sobib paremini suurtele ettevĂ”tetele, kellel on palju kirjeldusi â mitte ĂŒks toode, vaid palju mikroteenuseid, millel on ĂŒhised lepingu osad â autentimise skeemid, samad andmetĂŒĂŒbid, vigade kehad.
Kuid RAMLi arendaja, ettevĂ”te Mulesoft, liitus Open API konsortsiumiga, mis tegeleb arendamisega . SeetĂ”ttu on RAMLi areng peatunud. Kujutage ette, et Linuxi peamiste komponentide hooldajad on tööle lĂ€inud Microsofti. Selline olukord loob eeldused Swaggeri kasutamiseks, mis areneb dĂŒnaamiliselt ja praeguses â kolmandas versioonis â saavutab RAML-i paindlikkuse ja funktsionaalsuse.
Kuid on ĂŒks aga...
Kuidas osutus, et kaugeltki mitte kĂ”ik avatud lĂ€htekoodiga utiliidid pole uuendatud versioonile OAS 3.0. Go mikroteenuste jaoks on kĂ”ige kriitilisem OAS 3.0. standardi uus versiooniga kohandamise puudumine . Kuid erinevus Swagger 2 ja Swagger 3 vahel on â . NĂ€iteks kolmandas versioonis parandasid arendajad:
- parandasid autentimisskeemide kirjeldust
- JSON Schema toe
- parandasid nÀidete lisamise vÔimalust.
Oleme naljakas olukorras: standardi valimisel tuleb RAMLi, Swagger 2 ja Swagger 3 kĂ€sitleda kui eraldi alternatiive. Samal ajal on ainult Swagger 2-le head avatud lĂ€htekoodiga tööriistade toetust. RAML on vĂ€ga paindlik... ja keeruline, samas kui Swagger 3-l on nĂ”rk toetamine kogukonna poolt, nii et peate kasutama oma arendustööriistu vĂ”i kommertslahendusi, mis on tavaliselt ĂŒsna kallid.
Samas, kui Swagger pakub palju meeldivaid vĂ”imalusi, nagu valmis portaal. , kuhu saab laadida annotatsiooni ja saada selle visualiseerimise koos ĂŒksikasjalike kirjelduse, linkide ja seostega, ei ole sellist vĂ”imalust RAML-l, mis on rohkem fundamentaalne ja vĂ€hem kasutajasĂ”bralik. Jah, vĂ”ite otsida midagi GitHubi projektide hulgast, leida sealt sarnase ja selle ise ĂŒles seada. Kuid igal juhul peab keegi portaali toetama, mis ei ole nii mugav pĂ”hikasutuse vĂ”i testimise vajaduste jaoks. Lisaks on swagger enam âprintsiipidevabaâ, vĂ”i ĂŒtleme loominguline - seda saab genereerida koodis olevatest kommentaaridest, mis muidugi on vastuolus API first printsiibiga ja ei ole toetatud ĂŒheski RAML utiliidis.
Oleme kunagi alustanud RAML-iga, kui paindliku keelega, ja lĂ”ppkokkuvĂ”ttes pidime palju ise tegema. NĂ€iteks ĂŒhes projektis kasutatakse utiliiti ĂŒhiktestides, mis toetab ainult RAML 0.8. Nii tuli lisada kĂŒhveldamisi, et utiliit saaks âsöödaâ RAML versiooni 1.0.
Kas on vaja valida?
PĂ€rast lahenduste ökosĂŒsteemi RAML lĂ€hedal siiski tulime jĂ€reldusele, et peame konverteerima RAML Swagger 2-ks ja seejĂ€rel teostama kĂ”ik automatiseerimise, kontrollimise, testimise ja jĂ€rgnevate optimeerimiste selles. See on hea viis kasutada nii RAML-i paindlikkust kui ka Swaggeri kogukonna tööriistade toetust.
Selle ĂŒlesande lahendamiseks on olemas kaks OpenSource tööriista, mis peaksid tagama lepingute konversiooni:
- â praegu hooldamata utiliit. Töö kĂ€igus avastasime, et sellel on mitmeid probleeme keeruliste RAML-idega, mis on âjaotatudâ suure hulga failide vahel. See programm on kirjutatud JavaScriptis ja teostab sĂŒntaksipuu rekursiivset lĂ€bimist. DĂŒnaamilise tĂŒĂŒpimise tĂ”ttu on selle koodiga keeruline toime tulla, nii et otsustasime mitte raisata aega sureva utiliidi plaastrite kirjutamisele.
- â sama ettevĂ”tte tööriist, mis vĂ€idab, et suudab konverteerida kĂ”ike ja kĂ”iki, veelgi enam, igasse suunda. TĂ€naseks on teada RAML 0.8, RAML 1.0 ja Swagger 2.0 tugi. Kuid meie uurimise hetkel oli utiliit endiselt toores ja kasutamiseks sobimatu. Arendajad loovad oma mĂ”nes mĂ”ttes , mis vĂ”imaldab neil tulevikus kiiresti uusi standardeid lisada. Kuid seni lihtsalt ei tööta see.
Ja need ei ole kĂ”ik raskused, millega me silmitsi seisame. Ăks meie protsessi samme on kontrollida, kas RAML meie repostas vastab spetsifikatsioonile. Oleme proovinud mitmeid tööriistu. Ăllatav, kuid kĂ”ik need skeemitavad meie annotatsioonide ĂŒle erinevates kohtades ja tĂ€iesti erinevate inetute sĂ”nadega. Samuti ei pruugi see alati asjakohane olla : ).
LĂ”puks peatusime praegu aegunud projektile, millel on samuti mitmeid probleeme (mĂ”nikord jookseb see kokku igasugustel pĂ”hjustel, tal on probleeme regulaaravaldiste töötlemisega). Seega ei leidnud me tasuta tööriistade pĂ”hjal viisi valideerimise ja konversiooni ĂŒlesannete lahendamiseks, ja otsustasime kasutada kommertstootes. Tulevikus, kui OpenSource vahendid arenevad, vĂ”ib selle ĂŒlesande lahendamine muutuda lihtsamaks. Ainult praegu tundusid meeleheide ja ajakulu, mis kulus
KokkuvÔte
PÀrast seda soovime jagada oma kogemust ja mÀrkida, et enne tööriista valimist lepingute kirjeldamiseks tuleb selgelt vÀlja selgitada, mida te soovite, ja millise eelarve olete valmis investeerima. Kui unustada OpenSource, on juba praegu saadaval palju teenuseid ja tooteid, mis aitavad kontrollida, konverteerida ja valideerida. Kuid need on kallid, mÔnikord vÀga kallid. SuurettevÔtte jaoks on sellised kulud talutavad, kuid idufirma jaoks vÔivad need olla suur koormus.
MÀÀrake tööriistade komplekt, mida kavatsete hiljem kasutada. NĂ€iteks, kui teil on lihtsalt vaja lepingut kuvada, on lihtsam kasutada Swagger 2, millel on ilus API, kuna RAML-is peate teenuse ise ĂŒles ehitama ja seda hooldama.
Mida rohkem ĂŒlesandeid teil on, seda laiem on tööriistade vajadus, ja need on erinevad erinevate platvormide jaoks. Parim on tutvuda olemasolevate versioonidega kohe, et teha valik, mis minimaliseerib teie tulevased kulud.
Kuid tuleb tunnustada, et kĂ”ik tĂ€napĂ€eval eksisteerivad ökosĂŒsteemid on puudulikud. Seega, kui ettevĂ”ttes on entusiastid, kes armastavad töötada RAML-is, sest "see vĂ”imaldab mĂ”tteid paindlikumalt vĂ€ljendada", vĂ”i vastupidi, eelistavad Swaggerit, sest "see on arusaadavam", on kĂ”ige parem lasta neil töötada sellega, millega nad on harjunud ja mida nad soovivad, sest igas formaadis tööriistade kasutamine nĂ”uab viimistlemist.
Mis puudutab meie kogemust, siis jĂ€rgmistes postitustes rÀÀgime, milliseid - staatilisi ja dĂŒnaamilisi kontrollimisi me teostame meie RAML-Swagger arhitektuuri alusel, samuti millist dokumentatsiooni me genereerime lepingutest ja kuidas see kĂ”ik toimib.
Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. , palun.
Millist keelt kasutate mikroteenuste lepingute annotatsioonide jaoks?
RAML 0.8
RAML 1.0
Swagger 2
OAS3 (tuntud ka kui)
Blueprint
Teine
Ei kasuta
HÀÀletas 100 kasutajat. VÀitnud 24 kasutajat.
Allikas: habr.com
