Felly ai RAML neu OAS (Swagger) ydyw?

Ym myd deinamig microwasanaethau, gall unrhyw beth newid - gellir ailysgrifennu unrhyw gydran mewn iaith wahanol, gan ddefnyddio gwahanol fframweithiau a phensaernïaeth. Dim ond contractau ddylai aros heb eu newid fel y gellir rhyngweithio â'r microwasanaeth o'r tu allan yn barhaol, waeth beth fo'r metamorffau mewnol. A heddiw byddwn yn siarad am ein problem o ddewis fformat ar gyfer disgrifio contractau a rhannu'r arteffactau a ddarganfuwyd gennym.

Felly ai RAML neu OAS (Swagger) ydyw?

Post wedi'i baratoi Anna Melekhova и Vladimir Lapatin

Microwasanaethau. Wrth ddatblygu Acronis Cyber ​​​​Cloud, sylweddolon ni na allem ddianc rhagddynt. Ac mae dylunio microwasanaeth yn amhosibl heb ffurfioli'r contract, sy'n cynrychioli rhyngwyneb y microwasanaeth.

Ond pan fydd cynnyrch yn cynnwys mwy nag un gydran, a datblygu contract yn dod yn weithgaredd rheolaidd, ni allwch chi helpu ond dechrau meddwl am optimeiddio prosesau. Mae'n dod yn amlwg bod yn rhaid i'r rhyngwyneb (contract) a'r gweithredu (microwasanaeth) gyd-fynd â'i gilydd, bod yn rhaid i wahanol gydrannau wneud yr un pethau yn yr un modd, a heb wneud penderfyniadau canolog o'r holl benderfyniadau hyn, bydd pob tîm yn cael eu gorfodi i wneud hynny. treulio amser dro ar ôl tro i'w cael.

Felly ai RAML neu OAS (Swagger) ydyw?
Diagram microservices Amazon o trydar Werner Vogelis, CTO Amazon
Beth yw'r penbleth? De facto, mae dwy ffordd i ryngweithio microwasanaethau - HTTP Rest a gRPC gan Google. Ddim eisiau cael eich dal i fyny yn pentwr technoleg Google, fe wnaethon ni ddewis HTTP Rest. Disgrifir anodiadau contract HTTP REST amlaf mewn un o ddau fformat: RAML ac OAS, a elwid gynt yn Swagger.Felly, mae pob tîm datblygu yn wynebu'r angen i ddewis un o'r safonau. Ond fel mae'n digwydd, gall fod yn anodd iawn gwneud y dewis hwn.

Pam mae angen anodiadau?

Mae angen yr anodiad fel y gall defnyddiwr allanol ddarganfod yn hawdd beth ellir ei wneud gyda'ch gwasanaeth trwy ei ryngwyneb HTTP. Hynny yw, ar lefel sylfaenol, mae'n rhaid i'r anodiad gynnwys o leiaf restr o'r adnoddau sydd ar gael, eu dulliau HTTP, cyrff ceisiadau, rhestr o baramedrau, arwydd o'r penawdau gofynnol a chymorth, yn ogystal â chodau dychwelyd a fformatau ymateb. Elfen hynod bwysig o anodiad y contract yw eu disgrifiad geiriol (“beth fydd yn digwydd os ychwanegwch y paramedr ymholiad hwn at y cais?”, “Ym mha achos y bydd cod 400 yn cael ei ddychwelyd?”)

Fodd bynnag, pan ddaw'n fater o ddatblygu nifer fawr o ficrowasanaethau, rydych am dynnu gwerth ychwanegol o'r anodiadau ysgrifenedig. Er enghraifft, yn seiliedig ar RAML/Swagger, gallwch gynhyrchu cod cleient a gweinydd mewn nifer enfawr o ieithoedd rhaglennu. Gallwch hefyd dderbyn dogfennaeth ar gyfer y microwasanaeth yn awtomatig a'i uwchlwytho i'ch porth datblygwr :).

Felly ai RAML neu OAS (Swagger) ydyw?
Enghraifft o ddisgrifiad contract strwythuredig

Llai cyffredin yw'r arfer o brofi microwasanaethau yn seiliedig ar ddisgrifiadau contract. Os ydych wedi ysgrifennu anodiad a chydran, yna gallwch greu awtobrawf sy'n gwirio digonolrwydd y gwasanaeth gyda gwahanol fathau o ddata mewnbwn. A yw'r gwasanaeth yn dychwelyd cod ymateb nad yw wedi'i ddisgrifio yn yr anodiad? A fydd yn gallu prosesu data sy'n amlwg yn anghywir yn gywir?

Ar ben hynny, mae gweithredu o ansawdd uchel nid yn unig y contractau eu hunain, ond hefyd yr offer ar gyfer delweddu anodiadau yn ei gwneud hi'n bosibl symleiddio'r gwaith gyda'r microwasanaeth. Hynny yw, pe bai'r pensaer yn disgrifio'r contract mewn modd o ansawdd uchel, yn seiliedig arno, bydd dylunwyr a datblygwyr yn gweithredu'r gwasanaeth mewn cynhyrchion eraill heb gostau amser ychwanegol.

Er mwyn galluogi offer ychwanegol, mae gan RAML ac OAS y gallu i ychwanegu metadata na ddarperir ar eu cyfer gan y safon (er enghraifft, dyma sut y caiff ei wneud yn OAS).

Yn gyffredinol, mae'r cwmpas ar gyfer creadigrwydd wrth ddefnyddio contractau ar gyfer microwasanaethau yn enfawr... mewn theori o leiaf.

Cymhariaeth draenog gyda neidr

Ar hyn o bryd, y maes datblygu â blaenoriaeth yn Acronis yw datblygu Platfform Seiber Acronis. Mae Acronis Cyber ​​Platform yn bwyntiau newydd o integreiddio gwasanaethau trydydd parti ag Acronis Cyber ​​​​Cloud a'r rhan asiant. Er ein bod yn hapus â'n APIs mewnol a ddisgrifiwyd yn RAML, cododd yr angen i gyhoeddi'r API eto y cwestiwn o ddewis: pa safon anodi sydd orau i'w defnyddio ar gyfer ein gwaith?

I ddechrau, roedd yn ymddangos bod dau ateb - y datblygiadau mwyaf cyffredin oedd RAML a Swagger (neu OAS). Ond mewn gwirionedd mae'n troi allan nad oes o leiaf 2 ddewis arall, ond 3 neu fwy.

Ar y naill law mae RAML - iaith bwerus ac effeithlon. Mae'n gweithredu hierarchaeth ac etifeddiaeth yn dda, felly mae'r fformat hwn yn fwy addas ar gyfer cwmnïau mawr sydd angen llawer o ddisgrifiadau - hynny yw, nid un cynnyrch, ond llawer o ficrowasanaethau sydd â rhannau cyffredin o gontractau - cynlluniau dilysu, yr un mathau o ddata, cyrff gwall .

Ond mae datblygwr RAML, Mulesoft, wedi ymuno â chonsortiwm Open API, sy'n datblygu swager. Felly, ataliodd RAML ei ddatblygiad. I ddychmygu fformat y digwyddiad, dychmygwch fod cynhalwyr y prif gydrannau Linux ar ôl i weithio yn Microsoft. Mae'r sefyllfa hon yn creu'r rhagofynion ar gyfer defnyddio Swagger, sy'n datblygu'n ddeinamig ac yn y trydydd fersiwn diweddaraf - yn ymarferol yn dal i fyny â RAML o ran hyblygrwydd ac ymarferoldeb.

Os na am un peth...

Fel mae'n digwydd, nid yw'r holl gyfleustodau ffynhonnell agored wedi'u diweddaru i OAS 3.0. Ar gyfer microservices yn Go, y peth mwyaf hanfodol fydd y diffyg addasu go-swagger am y fersiwn diweddaraf o'r safon. Fodd bynnag, y gwahaniaeth rhwng Swagger 2 a Swagger 3 yw anferth. Er enghraifft, yn y trydydd fersiwn mae'r datblygwyr:

  • disgrifiad gwell o gynlluniau dilysu
  • gorffen Cefnogaeth sgema JSON
  • uwchraddio'r gallu i ychwanegu enghreifftiau

Mae'r sefyllfa'n ddoniol: wrth ddewis safon, mae angen i chi ystyried RAML, Swagger 2 a Swagger 3 fel dewisiadau amgen ar wahân. Fodd bynnag, dim ond Swagger 2 sydd â chefnogaeth dda i offer OpenSource. Mae RAML yn hyblyg iawn ... ac yn gymhleth, ac mae Swagger 3 yn cael ei gefnogi'n wael gan y gymuned, felly bydd yn rhaid i chi ddefnyddio offer perchnogol neu atebion masnachol, sy'n tueddu i fod yn eithaf drud.

Ar ben hynny, os oes llawer o nodweddion braf yn Swagger, fel porth parod golygydd.swagger.io, y gallwch chi uwchlwytho anodiad arno a chael ei ddelweddu gyda disgrifiad manwl, dolenni a chysylltiadau, yna ar gyfer y RAML mwy sylfaenol a llai cyfeillgar nid oes cyfle o'r fath. Gallwch, gallwch chwilio am rywbeth ymhlith prosiectau ar GitHub, dod o hyd i analog yno a'i ddefnyddio eich hun. Fodd bynnag, beth bynnag, bydd yn rhaid i rywun gynnal y porth, nad yw mor gyfleus ar gyfer defnydd sylfaenol neu anghenion profi. Yn ogystal, mae swagger yn fwy “anegwyddor”, neu'n fwy rhyddfrydol - gellir ei gynhyrchu o sylwadau yn y cod, sydd, wrth gwrs, yn mynd yn groes i egwyddor gyntaf API ac nid yw'n cael ei gefnogi gan unrhyw un o'r cyfleustodau RAML.

Ar un adeg fe ddechreuon ni weithio gyda RAML fel iaith fwy hyblyg, ac o ganlyniad roedd rhaid i ni wneud llawer o bethau ein hunain. Er enghraifft, mae un o'r prosiectau yn defnyddio'r cyfleustodau hyrddion mewn profion uned, sydd ond yn cefnogi RAML 0.8. Felly roedd yn rhaid i ni ychwanegu baglau fel y gallai'r cyfleustodau “bwyta” fersiwn RAML 1.0.

Oes angen i chi ddewis?

Ar ôl gweithio ar gwblhau'r ecosystem o atebion ar gyfer RAML, daethom i'r casgliad bod angen i ni drosi RAML yn Swagger 2 a chynnal yr holl awtomeiddio, dilysu, profi ac optimeiddio dilynol ynddo. Mae hon yn ffordd dda o drosoli hyblygrwydd RAML a'r gefnogaeth offer cymunedol gan Swagger.

I ddatrys y broblem hon, mae dau offeryn OpenSource a ddylai ddarparu trosi contract:

  1. oas-raml-converter yn gyfleustodau na chefnogir ar hyn o bryd. Wrth weithio gydag ef, fe wnaethom ddarganfod bod ganddo nifer o broblemau gyda RAMLs cymhleth sy'n cael eu “lledaenu” dros nifer fawr o ffeiliau. Mae'r rhaglen hon wedi'i hysgrifennu yn JavaScript ac mae'n perfformio llwybr cyson o goeden gystrawen. Oherwydd teipio deinamig, mae'n dod yn anodd deall y cod hwn, felly fe wnaethom benderfynu peidio â gwastraffu amser yn ysgrifennu darnau ar gyfer cyfleustodau sy'n marw.
  2. gweapi-parser - offeryn gan yr un cwmni sy'n honni ei fod yn barod i drosi unrhyw beth a phopeth, ac i unrhyw gyfeiriad. Hyd yn hyn, mae cefnogaeth wedi'i chyhoeddi ar gyfer RAML 0.8, RAML 1.0 a Swagger 2.0. Fodd bynnag, ar adeg ein hymchwil, roedd y defnyddioldeb yn dal i fod EITHAFOL llaith ac na ellir ei ddefnyddio. Mae datblygwyr yn creu math o IR, gan ganiatáu iddynt ychwanegu safonau newydd yn gyflym yn y dyfodol. Ond hyd yn hyn nid yw'n gweithio.

Ac nid dyna'r holl anawsterau y daethom ar eu traws. Un o'r camau sydd ar y gweill yw gwirio bod yr RAML o'r ystorfa yn gywir o'i gymharu â'r fanyleb. Fe wnaethon ni roi cynnig ar nifer o gyfleustodau. Yn syndod, fe wnaethon nhw i gyd dyngu ein hanodiadau mewn gwahanol leoedd a gyda geiriau drwg hollol wahanol. Ac nid bob amser i'r pwynt :).

Yn y diwedd, fe wnaethom setlo ar brosiect sydd bellach yn hen ffasiwn, sydd hefyd â nifer o broblemau (weithiau mae'n chwalu'n sydyn, yn cael problemau wrth weithio gydag ymadroddion rheolaidd). Felly, ni wnaethom ddod o hyd i ffordd i ddatrys problemau dilysu a throsi yn seiliedig ar offer rhad ac am ddim, a phenderfynwyd defnyddio cyfleustodau masnachol. Yn y dyfodol, wrth i offer OpenSource ddod yn fwy aeddfed, efallai y bydd y broblem hon yn dod yn haws i'w datrys. Yn y cyfamser, roedd y costau llafur ac amser ar gyfer “gorffen” yn ymddangos i ni yn fwy arwyddocaol na chost gwasanaeth masnachol.

Casgliad

Ar ôl hyn i gyd, roeddem am rannu ein profiad a nodi, cyn dewis offeryn ar gyfer disgrifio contractau, fod angen i chi ddiffinio'n glir yr hyn rydych chi ei eisiau ohono a pha gyllideb rydych chi'n barod i'w buddsoddi. Os byddwn yn anghofio am OpenSource, mae yna eisoes nifer fawr o wasanaethau a chynhyrchion a fydd yn eich helpu i wirio, trosi a dilysu. Ond maen nhw'n ddrud, ac weithiau'n ddrud iawn. I gwmni mawr, mae costau o'r fath yn oddefadwy, ond ar gyfer cychwyn gallant ddod yn faich mawr.

Darganfyddwch y set o offer y byddwch yn eu defnyddio yn nes ymlaen. Er enghraifft, os mai dim ond arddangos contract sydd ei angen arnoch, bydd yn haws defnyddio Swagger 2, sydd ag API hardd, oherwydd yn RAML bydd yn rhaid i chi adeiladu a chynnal y gwasanaeth eich hun.
Po fwyaf o dasgau sydd gennych, y mwyaf eang fydd yr angen am offer, ac maent yn wahanol ar gyfer gwahanol lwyfannau, ac mae'n well ymgyfarwyddo ar unwaith â'r fersiynau sydd ar gael er mwyn gwneud dewis sy'n lleihau eich costau yn y dyfodol.

Ond mae'n werth cydnabod bod yr holl ecosystemau sy'n bodoli heddiw yn amherffaith. Felly, os oes cefnogwyr yn y cwmni sy'n hoffi gweithio yn RAML oherwydd "mae'n caniatáu ichi fynegi meddyliau'n fwy hyblyg," neu, i'r gwrthwyneb, mae'n well ganddynt Swagger oherwydd "mae'n gliriach," mae'n well eu gadael i weithio. yn yr hyn ydyn nhw Maent wedi arfer ag ef ac eisiau hynny, oherwydd mae angen addasu offer unrhyw un o'r fformatau gyda ffeil.

O ran ein profiad, yn y swyddi canlynol byddwn yn siarad am ba wiriadau statig a deinamig rydyn ni'n eu cynnal yn seiliedig ar ein pensaernïaeth RAML-Swagger, yn ogystal â pha ddogfennaeth rydyn ni'n ei chynhyrchu o gontractau, a sut mae'r cyfan yn gweithio.

Dim ond defnyddwyr cofrestredig all gymryd rhan yn yr arolwg. Mewngofnodios gwelwch yn dda.

Pa iaith ydych chi'n ei defnyddio i anodi contractau microwasanaeth?

  • RAML 0.8

  • RAML 1.0

  • Swagger 2

  • OAS3 (aka)

  • Glasbrint

  • Arall

  • Ddim yn defnyddio

Pleidleisiodd 100 o ddefnyddwyr. Ymataliodd 24 o ddefnyddwyr.

Ffynhonnell: hab.com

Ychwanegu sylw