ඉතින් එය RAML ද OAS (Swagger) ද?

ක්ෂුද්‍ර සේවාවල ගතික ලෝකය තුළ, ඕනෑම දෙයක් වෙනස් කළ හැකිය - විවිධ රාමු සහ ගෘහ නිර්මාණ ශිල්පය භාවිතයෙන් ඕනෑම සංරචකයක් වෙනත් භාෂාවකින් නැවත ලිවිය හැකිය. කොන්ත්‍රාත්තු පමණක් නොවෙනස්ව පැවතිය යුතු අතර එමඟින් ක්ෂුද්‍ර සේවාව අභ්‍යන්තර පරිවෘත්තීය නොතකා පිටතින් යම් ස්ථිර පදනමක් මත අන්තර්ක්‍රියා කළ හැකිය. අද අපි කොන්ත්‍රාත්තු විස්තර කිරීම සඳහා ආකෘතියක් තෝරා ගැනීමේ අපගේ ගැටලුව ගැන කතා කර අප සොයාගත් පුරාවස්තු බෙදා ගනිමු.

ඉතින් එය RAML ද OAS (Swagger) ද?

පෝස්ට් සූදානම් ඇනා මෙලෙකෝවා и ව්ලැඩිමීර් ලපටින්

ක්ෂුද්ර සේවා. Acronis Cyber ​​Cloud සංවර්ධනය කරන විට, අපට ඔවුන්ගෙන් ගැලවිය නොහැකි බව අපට වැටහුණි. ක්ෂුද්‍ර සේවාවේ අතුරු මුහුණත නියෝජනය කරන කොන්ත්‍රාත්තුව විධිමත් කිරීමකින් තොරව ක්ෂුද්‍ර සේවාවක් සැලසුම් කිරීම කළ නොහැක.

නමුත් නිෂ්පාදනයක එක් සංරචකයකට වඩා අඩංගු වන විට සහ කොන්ත්‍රාත්තු සංවර්ධනය සාමාන්‍ය ක්‍රියාකාරකමක් බවට පත් වූ විට, ඔබට ක්‍රියාවලි ප්‍රශස්තිකරණය ගැන සිතීම වැළැක්විය නොහැක. අතුරු මුහුණත (කොන්ත්‍රාත්තුව) සහ ක්‍රියාත්මක කිරීම (ක්ෂුද්‍ර සේවා) එකිනෙක ගැළපිය යුතු බවත්, විවිධ සංරචක එකම දේ එකම ආකාරයෙන් කළ යුතු බවත්, මෙම සියලු තීරණ පිළිබඳ මධ්‍යගත තීරණ ගැනීමකින් තොරව, එක් එක් කණ්ඩායමට බල කෙරෙනු ඇති බවත් පැහැදිලි වේ. ඒවා ලබා ගැනීමට නැවත නැවතත් කාලය ගත කරන්න.

ඉතින් එය RAML ද OAS (Swagger) ද?
Amazon microservices රූප සටහන ට්වීට් කරන්න Werner Vogelis, CTO Amazon
උභතෝකෝටිකය කුමක්ද? ඇත්ත වශයෙන්ම, ක්ෂුද්‍ර සේවා අන්තර්ක්‍රියා කිරීමට ක්‍රම දෙකක් තිබේ - Google වෙතින් HTTP Rest සහ gRPC. Google හි තාක්‍ෂණ තොගයට හසු වීමට අවශ්‍ය නැති නිසා, අපි HTTP Rest තෝරා ගත්තෙමු. HTTP REST කොන්ත්‍රාත්තු විවරණ බොහෝ විට විස්තර කර ඇත්තේ ආකෘති දෙකෙන් එකකිනි: RAML සහ OAS, කලින් හැඳින්වූයේ Swagger ලෙසිනි.එබැවින්, සෑම සංවර්ධන කණ්ඩායමක්ම ප්‍රමිතීන්ගෙන් එකක් තෝරා ගැනීමේ අවශ්‍යතාවයට මුහුණ දෙයි. නමුත් පෙනෙන පරිදි, මෙම තේරීම ඉතා අපහසු විය හැකිය.

විවරණ අවශ්‍ය වන්නේ ඇයි?

බාහිර පරිශීලකයෙකුට එහි HTTP අතුරුමුහුණත හරහා ඔබේ සේවාව සමඟ කළ හැකි දේ පහසුවෙන් සොයා ගත හැකි වන පරිදි විවරණය අවශ්‍ය වේ. එනම්, මූලික මට්ටමින්, විවරණයෙහි අවම වශයෙන් පවතින සම්පත් ලැයිස්තුවක්, ඒවායේ HTTP ක්‍රම, ඉල්ලීම් ආයතන, පරාමිති ලැයිස්තුවක්, අවශ්‍ය සහ සහාය දක්වන ශීර්ෂයන් පිළිබඳ ඇඟවීමක් මෙන්ම ආපසු කේත සහ ප්‍රතිචාර ආකෘති අඩංගු විය යුතුය. කොන්ත්‍රාත් විවරණයේ අතිශය වැදගත් අංගයක් වන්නේ ඔවුන්ගේ වාචික විස්තරයයි (“ඔබ මෙම විමසුම් පරාමිතිය ඉල්ලීමට එක් කළහොත් කුමක් සිදුවේද?”, “කෝඩ් 400 ආපසු ලබා දෙන්නේ කුමන අවස්ථාවකද?”)

කෙසේ වෙතත්, ක්ෂුද්‍ර සේවා විශාල සංඛ්‍යාවක් සංවර්ධනය කිරීමේදී, ඔබට ලිඛිත විවරණ වලින් අමතර වටිනාකමක් ලබා ගැනීමට අවශ්‍ය වේ. උදාහරණයක් ලෙස, RAML/Swagger මත පදනම්ව, ඔබට ක්‍රමලේඛන භාෂා විශාල සංඛ්‍යාවකින් සේවාදායක සහ සේවාදායක කේත දෙකම ජනනය කළ හැකිය. ඔබට ක්ෂුද්‍ර සේවා සඳහා ලේඛන ස්වයංක්‍රීයව ලබා ගත හැකි අතර එය ඔබේ සංවර්ධක ද්වාරයට උඩුගත කළ හැකිය :).

ඉතින් එය RAML ද OAS (Swagger) ද?
ව්‍යුහගත ගිවිසුම් විස්තරයක උදාහරණය

අඩු පොදු දෙයක් වන්නේ කොන්ත්‍රාත්තු විස්තර මත පදනම්ව ක්ෂුද්‍ර සේවා පරීක්ෂා කිරීමේ පුරුද්දයි. ඔබ විවරණයක් සහ සංරචකයක් යන දෙකම ලියා ඇත්නම්, ඔබට විවිධ ආකාරයේ ආදාන දත්ත සමඟ සේවාවේ ප්‍රමාණවත් බව පරීක්ෂා කරන ස්වයං පරීක්ෂණයක් සෑදිය හැකිය. සේවාව විවරණයේ විස්තර කර නැති ප්‍රතිචාර කේතයක් ලබා දෙයිද? පැහැදිලිවම වැරදි දත්ත නිවැරදිව සැකසීමට එයට හැකි වේද?

එපමණක් නොව, කොන්ත්‍රාත්තු පමණක් නොව, විවරණ දෘශ්‍යමාන කිරීමේ මෙවලම් ද උසස් තත්ත්වයේ ක්‍රියාත්මක කිරීම මඟින් ක්ෂුද්‍ර සේවා සමඟ වැඩ සරල කිරීමට හැකි වේ. එනම්, ගෘහ නිර්මාණ ශිල්පියා කොන්ත්රාත්තුව ගුණාත්මකව විස්තර කළේ නම්, එය මත පදනම්ව, නිර්මාණකරුවන් සහ සංවර්ධකයින් අතිරේක කාල පිරිවැයකින් තොරව වෙනත් නිෂ්පාදනවල සේවාව ක්රියාත්මක කරනු ඇත.

අතිරේක මෙවලම් සක්‍රීය කිරීම සඳහා, RAML සහ OAS යන දෙකටම ප්‍රමිතියෙන් සපයා නැති පාරදත්ත එකතු කිරීමේ හැකියාව ඇත (උදාහරණයක් ලෙස, OAS හි එය සිදු කරන්නේ එලෙස ය).

සාමාන්‍යයෙන්, ක්ෂුද්‍ර සේවා සඳහා කොන්ත්‍රාත්තු භාවිතා කිරීමේදී නිර්මාණශීලිත්වය සඳහා ඇති විෂය පථය විශාල ය ... අවම වශයෙන් න්‍යායාත්මකව.

සර්පයෙකු සමඟ හෙජ්ජෝගයක් සංසන්දනය කිරීම

දැනට, Acronis හි ප්‍රමුඛතා සංවර්ධන ක්ෂේත්‍රය වන්නේ Acronis Cyber ​​Platform සංවර්ධනය කිරීමයි. Acronis Cyber ​​Platform යනු Acronis Cyber ​​Cloud සහ නියෝජිත කොටස සමඟ තෙවන පාර්ශවීය සේවාවන් ඒකාබද්ධ කිරීමේ නව ස්ථාන වේ. RAML හි විස්තර කර ඇති අපගේ අභ්‍යන්තර API ගැන අප සතුටු වුවද, API ප්‍රකාශනය කිරීමේ අවශ්‍යතාවය නැවතත් තෝරා ගැනීමේ ප්‍රශ්නය මතු කළේය: අපගේ වැඩ සඳහා භාවිතා කිරීමට හොඳම විවරණ ප්‍රමිතිය කුමක්ද?

මුලදී, විසඳුම් දෙකක් ඇති බව පෙනෙන්නට තිබුණි - වඩාත් පොදු වර්ධනයන් වූයේ RAML සහ Swagger (හෝ OAS) ය. නමුත් ඇත්ත වශයෙන්ම අවම වශයෙන් විකල්ප 2 ක් නොව 3 ක් හෝ වැඩි ගණනක් ඇති බව පෙනී ගියේය.

එක් අතකින් RAML ඇත - බලවත් හා කාර්යක්ෂම භාෂාවක්. එය ධුරාවලිය සහ උරුමය හොඳින් ක්‍රියාත්මක කරයි, එබැවින් මෙම ආකෘතිය බොහෝ විස්තර අවශ්‍ය විශාල සමාගම් සඳහා වඩාත් සුදුසු වේ - එනම්, එක් නිෂ්පාදනයක් නොව, කොන්ත්‍රාත්තුවේ පොදු කොටස් ඇති බොහෝ ක්ෂුද්‍ර සේවා - සත්‍යාපන යෝජනා ක්‍රම, එකම දත්ත වර්ග, දෝෂ ශරීර .

නමුත් RAML හි සංවර්ධකයා වන Mulesoft සංවර්ධනය වෙමින් පවතින Open API සමුහයට සම්බන්ධ වී ඇත. ස්වැගර්. එබැවින් RAML එහි සංවර්ධනය අත්හිටුවා ඇත. සිදුවීමේ ආකෘතිය සිතා ගැනීමට, ප්‍රධාන ලිනක්ස් සංරචක නඩත්තු කරන්නන් මයික්‍රොසොෆ්ට් සඳහා වැඩ කිරීමට පිටත්ව ගිය බව සිතන්න. මෙම තත්වය Swagger භාවිතා කිරීම සඳහා පූර්වාවශ්‍යතා නිර්මාණය කරයි, එය ගතිකව වර්ධනය වන අතර නවතම - තෙවන අනුවාදයේ - නම්‍යශීලීභාවය සහ ක්‍රියාකාරීත්වය අනුව ප්‍රායෝගිකව RAML සමඟ සම්බන්ධ වේ.

එක දෙයක් සඳහා නොවේ නම් ...

පෙනෙන පරිදි, සියලුම විවෘත මූලාශ්‍ර උපයෝගිතා OAS 3.0 වෙත යාවත්කාලීන කර නොමැත. Go හි ක්ෂුද්‍ර සේවා සඳහා, වඩාත්ම තීරණාත්මක දෙය වනුයේ අනුවර්තනය වීමේ ඌනතාවයයි යන්න-swagger සම්මතයේ නවතම අනුවාදය සඳහා. කෙසේ වෙතත්, Swagger 2 සහ Swagger 3 අතර වෙනස වන්නේ විශාල. උදාහරණයක් ලෙස, තෙවන අනුවාදයේ සංවර්ධකයින්:

  • සත්‍යාපන යෝජනා ක්‍රම පිළිබඳ වැඩි දියුණු කළ විස්තරය
  • අවසන් JSON Schema සහාය
  • උදාහරණ එකතු කිරීමේ හැකියාව වැඩි දියුණු කර ඇත

තත්වය විහිළුවකි: සම්මතයක් තෝරාගැනීමේදී, ඔබ RAML, Swagger 2 සහ Swagger 3 වෙනම විකල්ප ලෙස සලකා බැලිය යුතුය. කෙසේ වෙතත්, OpenSource මෙවලම් සඳහා හොඳ සහයක් ඇත්තේ Swagger 2 පමණි. RAML ඉතා නම්‍යශීලීයි...සහ සංකීර්ණයි, සහ Swagger 3 ප්‍රජාවෙන් දුර්වල ලෙස සහාය දක්වයි, එබැවින් ඔබට හිමිකාර මෙවලම් හෝ වාණිජ විසඳුම් භාවිතා කිරීමට සිදුවනු ඇත, ඒවා තරමක් මිල අධික වේ.

එපමණක් නොව, Swagger හි සූදානම් කළ ද්වාරයක් වැනි බොහෝ ලස්සන විශේෂාංග තිබේ නම් editor.swagger.io, ඔබට විවරණයක් උඩුගත කළ හැකි අතර සවිස්තරාත්මක විස්තරයක්, සබැඳි සහ සම්බන්ධතා සමඟ එහි දෘශ්‍යකරණය ලබා ගත හැකිය, පසුව වඩාත් මූලික සහ අඩු මිත්‍රශීලී RAML සඳහා එවැනි අවස්ථාවක් නොමැත. ඔව්, ඔබට GitHub හි ව්‍යාපෘති අතර යමක් සෙවිය හැකිය, එහි ප්‍රතිසමයක් සොයාගෙන එය ඔබම යෙදවිය හැකිය. කෙසේ වෙතත්, ඕනෑම අවස්ථාවක, යමෙකුට ද්වාරය නඩත්තු කිරීමට සිදුවනු ඇත, එය මූලික භාවිතය හෝ පරීක්ෂණ අවශ්‍යතා සඳහා එතරම් පහසු නොවේ. ඊට අමතරව, swagger වඩා “ප්‍රතිපත්ති විරහිත” හෝ වඩා ලිබරල් ය - එය කේතයේ අදහස් වලින් ජනනය කළ හැකිය, එය ඇත්ත වශයෙන්ම API පළමු මූලධර්මයට පටහැනි වන අතර කිසිදු RAML උපයෝගිතා වලින් සහාය නොදක්වයි.

එක් කාලයකදී අපි වඩාත් නම්‍යශීලී භාෂාවක් ලෙස RAML සමඟ වැඩ කිරීමට පටන් ගත් අතර, එහි ප්‍රතිඵලයක් ලෙස අපට බොහෝ දේ කිරීමට සිදු විය. උදාහරණයක් ලෙස, එක් ව්යාපෘතියක් උපයෝගීතාව භාවිතා කරයි ramlfifications ඒකක පරීක්ෂණ වලදී, RAML 0.8 සඳහා පමණක් සහය දක්වයි. එබැවින් අපට RAML අනුවාදය 1.0 "කන්න" හැකි වන පරිදි කිහිලිකරු එකතු කිරීමට සිදු විය.

ඔබ තෝරා ගැනීමට අවශ්යද?

RAML සඳහා විසඳුම් පරිසර පද්ධතිය සම්පූර්ණ කිරීමට කටයුතු කිරීමෙන් පසු, අපි RAML Swagger 2 බවට පරිවර්තනය කර එහි ඇති සියලුම ස්වයංක්‍රීයකරණය, සත්‍යාපනය, පරීක්ෂණ සහ පසුව ප්‍රශස්තිකරණය කළ යුතු බවට නිගමනයකට පැමිණියෙමු. මෙය RAML හි නම්‍යශීලී බව සහ Swagger වෙතින් ලැබෙන ප්‍රජා මෙවලම් සහය යන දෙකම භාවිතා කිරීමට හොඳ ක්‍රමයකි.

මෙම ගැටළුව විසඳීම සඳහා, කොන්ත්‍රාත් පරිවර්තනය සැපයිය යුතු OpenSource මෙවලම් දෙකක් තිබේ:

  1. oas-raml-converter දැනට සහය නොදක්වන උපයෝගීතාවයකි. එය සමඟ වැඩ කරන අතරතුර, ගොනු විශාල සංඛ්යාවක් පුරා "පැතිරුණු" සංකීර්ණ RAML සමඟ ගැටළු ගණනාවක් ඇති බව අපි සොයා ගත්තෙමු. මෙම වැඩසටහන ජාවාස්ක්‍රිප්ට් වලින් ලියා ඇති අතර සින්ටැක්ස් ගසක පුනරාවර්තන ගමනක් සිදු කරයි. ගතික ටයිප් කිරීම හේතුවෙන්, මෙම කේතය තේරුම් ගැනීමට අපහසු වේ, එබැවින් අපි මිය යන උපයෝගිතා සඳහා පැච් ලිවීමට කාලය නාස්ති නොකිරීමට තීරණය කළෙමු.
  2. webapi-parser - ඕනෑම දෙයක් සහ සෑම දෙයක්ම සහ ඕනෑම දිශාවකට පරිවර්තනය කිරීමට සූදානම් බව පවසන එකම සමාගමක මෙවලමක්. අද වන විට RAML 0.8, RAML 1.0 සහ Swagger 2.0 සඳහා සහය නිවේදනය කර ඇත. කෙසේ වෙතත්, අපගේ පර්යේෂණය වන විට, උපයෝගීතාව තවමත් පැවතුනි අතිශයින් තෙත් සහ භාවිතා කළ නොහැකි. සංවර්ධකයින් යම් ආකාරයක නිර්මාණය කරයි IR, අනාගතයේදී ඉක්මනින් නව ප්‍රමිතීන් එකතු කිරීමට ඔවුන්ට ඉඩ සලසයි. නමුත් මේ දක්වා එය ක්‍රියාත්මක වන්නේ නැත.

ඒ වගේම අපි මුහුණ දුන් දුෂ්කරතා සියල්ලම නොවේ. අපගේ නල මාර්ගයේ එක් පියවරක් වන්නේ පිරිවිතරයට සාපේක්ෂව ගබඩාවෙන් ලැබෙන RAML නිවැරදි බව තහවුරු කිරීමයි. අපි උපයෝගිතා කිහිපයක් උත්සාහ කළා. පුදුමයට කරුණක් නම්, ඔවුන් සියල්ලෝම විවිධ ස්ථානවල සහ සම්පූර්ණයෙන්ම වෙනස් නරක වචන වලින් අපගේ විවරණ වලට දිවුරුම් දුන්හ. සෑම විටම කාරණයට නොවේ :).

අවසානයේදී, අපි දැන් යල් පැන ගිය ව්‍යාපෘතියක් මත පදිංචි වූ අතර, එහි ගැටළු ගණනාවක් ද ඇත (සමහර විට එය නිල් පැහැයෙන් කඩා වැටේ, සාමාන්‍ය ප්‍රකාශන සමඟ වැඩ කිරීමේදී ගැටළු ඇත). මේ අනුව, අපි නිදහස් මෙවලම් මත පදනම්ව වලංගුකරණය සහ පරිවර්තනය පිළිබඳ ගැටළු විසඳීමට ක්රමයක් සොයා නොගත් අතර, වාණිජමය උපයෝගීතාවයක් භාවිතා කිරීමට තීරණය කළෙමු. අනාගතයේදී, OpenSource මෙවලම් වඩාත් පරිණත වන විට, මෙම ගැටළුව විසඳීමට පහසු වනු ඇත. මේ අතරතුර, "අවසන් කිරීම" සඳහා ශ්රමය සහ කාලය පිරිවැය වාණිජ සේවාවක පිරිවැයට වඩා වැදගත් බව අපට පෙනී ගියේය.

නිගමනය

මේ සියල්ලට පසු, අපගේ අත්දැකීම් බෙදාහදා ගැනීමට අපට අවශ්‍ය වූ අතර කොන්ත්‍රාත්තු විස්තර කිරීම සඳහා මෙවලමක් තෝරා ගැනීමට පෙර, ඔබට එයින් අවශ්‍ය දේ සහ ඔබ ආයෝජනය කිරීමට කැමති අයවැය පැහැදිලිව නිර්වචනය කළ යුතු බව සටහන් කර ගන්න. අපි OpenSource ගැන අමතක කළහොත්, ඔබට පරීක්ෂා කිරීමට, පරිවර්තනය කිරීමට සහ වලංගු කිරීමට උපකාර වන සේවා සහ නිෂ්පාදන විශාල ප්‍රමාණයක් දැනටමත් ඇත. නමුත් ඒවා මිල අධිකයි, සමහර විට ඉතා මිල අධිකයි. විශාල සමාගමක් සඳහා, එවැනි වියදම් දරාගත හැකි නමුත්, ආරම්භයක් සඳහා ඔවුන් විශාල බරක් බවට පත් විය හැකිය.

ඔබ පසුව භාවිතා කරන මෙවලම් කට්ටලය තීරණය කරන්න. උදාහරණයක් ලෙස, ඔබට කොන්ත්‍රාත්තුවක් ප්‍රදර්ශනය කිරීමට අවශ්‍ය නම්, ලස්සන API එකක් ඇති Swagger 2 භාවිතා කිරීම පහසු වනු ඇත, මන්ද RAML හි ඔබට සේවාව ගොඩනගා නඩත්තු කිරීමට සිදුවනු ඇත.
ඔබට ඇති කාර්යයන් වැඩි වන තරමට මෙවලම් සඳහා අවශ්‍යතාවය පුළුල් වන අතර ඒවා විවිධ වේදිකා සඳහා වෙනස් වන අතර අනාගතයේදී ඔබේ පිරිවැය අවම කරන තේරීමක් කිරීම සඳහා පවතින අනුවාදයන් සමඟ වහාම ඔබව හුරු කරවීම වඩා හොඳය.

නමුත් අද පවතින සියලුම පරිසර පද්ධති අසම්පූර්ණ බව හඳුනා ගැනීම වටී. එබැවින්, "එය ඔබට වඩාත් නම්‍යශීලී ලෙස සිතුවිලි ප්‍රකාශ කිරීමට ඉඩ සලසයි" යන නිසා RAML හි වැඩ කිරීමට කැමති රසිකයින් සමාගම තුළ සිටී නම්, හෝ ඊට පටහැනිව, "එය වඩා පැහැදිලිය" නිසා Swagger වලට වැඩි කැමැත්තක් දක්වන්නේ නම්, ඔවුන් වැඩ කිරීමට තැබීම වඩාත් සුදුසුය. ඕනෑම ආකෘතියක මෙවලම් ගොනුවක් සමඟ වෙනස් කිරීම අවශ්‍ය වන බැවින් ඔවුන් එයට පුරුදු වී සිටින අතර එය අවශ්‍ය වේ.

අපගේ අත්දැකීම් සම්බන්ධයෙන් ගත් කල, අපගේ RAML-Swagger ගෘහ නිර්මාණ ශිල්පය මත පදනම්ව අප සිදුකරන ස්ථිතික සහ ගතික චෙක්පත් මෙන්ම කොන්ත්‍රාත්තු වලින් අප උත්පාදනය කරන ලියකියවිලි මොනවාද සහ ඒ සියල්ල ක්‍රියාත්මක වන ආකාරය ගැන අපි පහත පළ කිරීම් වලින් කතා කරමු.

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

ක්ෂුද්‍ර සේවා ගිවිසුම් සටහන් කිරීමට ඔබ භාවිතා කරන භාෂාව කුමක්ද?

  • RAML 0.8

  • RAML 1.0

  • Swagger 2

  • OAS3 (aka)

  • සැලැස්ම

  • වෙනත්

  • භාවිතා නොකරයි

පරිශීලකයින් 100 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 24 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න