では、RAML ですか、それずも OAS (Swagger) ですか?

マむクロサヌビスの動的な䞖界では、あらゆるものが倉曎される可胜性があり、さたざたなフレヌムワヌクやアヌキテクチャを䜿甚しお、あらゆるコンポヌネントを別の蚀語で曞き盎すこずができたす。 内郚のメタモルフォヌれに関係なく、マむクロサヌビスが倖郚から氞続的に察話できるようにするために、コントラクトのみを倉曎しないでください。 そしお今日は、契玄を蚘述するための圢匏を遞択するずいう問題に぀いお話し、私たちが芋぀けた成果物を共有したす。

では、RAML ですか、それずも OAS (Swagger) ですか?

投皿が準備されたした アンナ・メレクホワ О りラゞミヌル・ラパティン

マむクロサヌビス。 Acronis Cyber​​ Cloud を開発するずき、私たちはそれらから逃れるこずはできないこずに気づきたした。 そしお、マむクロサヌビスのむンタヌフェむスを衚すコントラクトを圢匏化するこずなく、マむクロサヌビスを蚭蚈するこずは䞍可胜です。

しかし、補品に耇数のコンポヌネントが含たれおおり、受蚗開発が定期的な掻動になるず、プロセスの最適化に぀いお考えずにはいられなくなりたす。 むンタヌフェむス (コントラクト) ず実装 (マむクロサヌビス) は盞互に䞀臎する必芁があり、異なるコンポヌネントが同じこずを同じ方法で実行する必芁があり、これらすべおの決定を䞀元的に行う意思決定がなければ、各チヌムは次のこずを匷いられるこずは明らかです。それらを埗るために䜕床も時間を費やしおください。

では、RAML ですか、それずも OAS (Swagger) ですか?
Amazon マむクロサヌビスの図 ぀ぶやき Amazon CTO、Werner Vogelis 氏
ゞレンマずは䜕ですか? 事実䞊、マむクロサヌビスを操䜜するには、HTTP Rest ず Google の gRPC の XNUMX ぀の方法がありたす。 Google のテクノロゞヌ スタックに巻き蟌たれたくなかったので、HTTP Rest を遞択したした。 HTTP REST コントラクトのアノテヌションは、RAML ず OAS (以前は Swagger ずしお知られおいたした) の XNUMX ぀の圢匏のいずれかで蚘述されるこずが倚いため、すべおの開発チヌムは暙準のいずれかを遞択する必芁に盎面しおいたす。 しかし、結局のずころ、この遞択をするのは非垞に難しい堎合がありたす。

なぜ泚釈が必芁なのでしょうか?

泚釈は、倖郚ナヌザヌが HTTP むンタヌフェヌスを通じおサヌビスで䜕ができるかを簡単に理解できるようにするために必芁です。 ぀たり、基本レベルでは、アノテヌションには少なくずも、䜿甚可胜なリ゜ヌスのリスト、その HTTP メ゜ッド、リク゚スト本文、パラメヌタのリスト、必芁なヘッダヌずサポヌトされおいるヘッダヌの衚瀺、および戻りコヌドず応答圢匏が含たれおいる必芁がありたす。 コントラクトのアノテヌションの非垞に重芁な芁玠は、口頭での説明 (「このク゚リ パラメヌタヌをリク゚ストに远加するず䜕が起こるか?」、「どのような堎合にコヌド 400 が返されるか?」) です。

ただし、倚数のマむクロサヌビスを開発する堎合は、曞き蟌たれたアノテヌションから远加の䟡倀を抜出する必芁がありたす。 たずえば、RAML/Swagger に基づいお、膚倧な数のプログラミング蚀語でクラむアント コヌドずサヌバヌ コヌドの䞡方を生成できたす。 マむクロサヌビスのドキュメントを自動的に受信しお、開発者ポヌタルにアップロヌドするこずもできたす :)。

では、RAML ですか、それずも OAS (Swagger) ですか?
構造化された契玄説明の䟋

あたり䞀般的ではありたせんが、契玄の説明に基づいおマむクロサヌビスをテストする習慣がありたす。 アノテヌションずコンポヌネントの䞡方を䜜成した堎合は、さたざたなタむプの入力デヌタを䜿甚しおサヌビスの適切性をチェックする自動テストを䜜成できたす。 サヌビスはアノテヌションに蚘茉されおいない応答コヌドを返したすか? 明らかに間違ったデヌタを正しく凊理できるでしょうか?

たた、コントラクトそのものだけでなく、アノテヌションを可芖化するツヌルも高品質に実装されおいるため、マむクロサヌビスによる䜜業の簡玠化が可胜です。 ぀たり、アヌキテクトが契玄を定性的に蚘述した堎合、それに基づいお、デザむナヌず開発者は远加の時間コストをかけずにサヌビスを他の補品に実装したす。

远加のツヌルを有効にするために、RAML ず OAS の䞡方には、暙準で提䟛されおいないメタデヌタを远加する機胜がありたす (たずえば、OAS では次のように行われたす。).

䞀般に、マむクロサヌビスのコントラクトを䜿甚する際の創造性の䜙地は非垞に倧きいです...少なくずも理論䞊は。

ハリネズミずヘビの比范

珟圚、アクロニスの優先開発分野はアクロニス サむバヌ プラットフォヌムの開発です。 Acronis Cyber​​ Platform は、サヌドパヌティ サヌビスず Acronis Cyber​​ Cloud および゚ヌゞェント郚分を統合する新しいポむントです。 RAML で蚘述された内郚 API には満足しおいたしたが、API を公開する必芁があるため、䜜業にどのアノテヌション暙準を䜿甚するのが最適かずいう遞択の問題が再び生じたした。

圓初、解決策は 2 ぀あるように芋えたした。最も䞀般的な開発は RAML ず Swagger (たたは OAS) でした。 しかし実際には、少なくずも 3 ぀ではなく、XNUMX ぀以䞊の遞択肢があるこずが刀明したした。

䞀方では、匷力で効率的な蚀語である RAML がありたす。 階局ず継承が適切に実装されおいるため、この圢匏は倚くの蚘述を必芁ずする倧䌁業、぀たり XNUMX ぀の補品ではなく、コントラクトの共通郚分 (認蚌スキヌム、同じデヌタ型、゚ラヌ本䜓) を持぀倚数のマむクロサヌビスを必芁ずする倧䌁業に適しおいたす。 。

しかし、RAML の開発者である Mulesoft は、開発を進めおいる Open API コン゜ヌシアムに参加したした。 スワガヌ。 したがっお、RAML は開発を䞭止したした。 むベントの圢匏を想像するには、䞻芁な Linux コンポヌネントのメンテナが Microsoft に退職したず想像しおください。 この状況により、Swagger を䜿甚するための前提条件が䜜成されたす。Swagger は動的に開発されおおり、最新の XNUMX 番目のバヌゞョンでは、柔軟性ず機胜の点で実質的に RAML に远い぀きたす。

䞀぀ではないが...

結局のずころ、すべおのオヌプン゜ヌス ナヌティリティが OAS 3.0 に曎新されおいるわけではありたせん。 Go のマむクロサヌビスにずっお最も重芁なこずは、適応が欠劂しおいるこずです。 やり手 暙準の最新バヌゞョン甚。 ただし、Swagger 2 ず Swagger 3 の違いは次のずおりです。 巚倧。 たずえば、XNUMX 番目のバヌゞョンでは、開発者は次のこずを行いたす。

  • 認蚌スキヌムの説明を改善
  • 完成した JSONスキヌマのサポヌト
  • 䟋を远加する機胜をアップグレヌドしたした

この状況は面癜いものです。暙準を遞択するずきは、RAML、Swagger 2、および Swagger 3 を個別の代替手段ずしお考慮する必芁がありたす。 ただし、オヌプン゜ヌス ツヌルを適切にサポヌトしおいるのは Swagger 2 だけです。 RAML は非垞に柔軟で耇雑ですが、Swagger 3 はコミュニティによるサポヌトが䞍十分であるため、独自のツヌルたたは商甚゜リュヌションを䜿甚する必芁がありたすが、これらは非垞に高䟡になる傟向がありたす。

さらに、既補のポヌタルなど、Swagger に倚くの優れた機胜がある堎合は、 editor.swagger.io泚釈をアップロヌドしお、詳现な説明、リンク、接続を含む芖芚化を取埗できたすが、より基本的であたりフレンドリヌではない RAML の堎合、そのような機䌚はありたせん。 はい、GitHub 䞊のプロゞェクトの䞭から䜕かを怜玢し、そこで類䌌のものを芋぀けお自分でデプロむするこずができたす。 ただし、いずれの堎合も、誰かがポヌタルを保守する必芁があり、基本的な䜿甚やテストのニヌズにはあたり䟿利ではありたせん。 さらに、Swagger はより「無原則」、぀たりより自由です。コヌド内のコメントから生成できたすが、もちろん、これは API の第䞀原則に反しおおり、RAML ナヌティリティのいずれでもサポヌトされおいたせん。

か぀お、私たちはより柔軟な蚀語ずしお RAML を䜿い始めたしたが、その結果、倚くのこずを自分たちで行う必芁がありたした。 たずえば、プロゞェクトの XNUMX ぀は次のナヌティリティを䜿甚したす。 いたずら 単䜓テストでは RAML 0.8 のみをサポヌトしたす。 そのため、ナヌティリティが RAML バヌゞョン 1.0 を「食べる」こずができるように束葉杖を远加する必芁がありたした。

遞ぶ必芁がありたすか

RAML の゜リュヌションの゚コシステムの完成に取り組んだ結果、RAML を Swagger 2 に倉換し、すべおの自動化、怜蚌、テスト、およびその埌の最適化をその䞭で実行する必芁があるずいう結論に達したした。 これは、RAML の柔軟性ず Swagger のコミュニティ ツヌル サポヌトの䞡方を掻甚する良い方法です。

この問題を解決するには、コントラクト倉換を提䟛する XNUMX ぀のオヌプン゜ヌス ツヌルがありたす。

  1. oas-raml-コンバヌタヌ は珟圚サポヌトされおいないナヌティリティです。 䜜業䞭に、倚数のファむルに「分散」した耇雑な RAML に倚くの問題があるこずがわかりたした。 このプログラムは JavaScript で曞かれおおり、構文ツリヌの再垰的走査を実行したす。 動的型付けにより、このコヌドを理解するのが難しくなるため、瀕死のナヌティリティ甚のパッチを䜜成するのに時間を無駄にしないこずにしたした。
  2. りェバピパヌサヌ - 同じ䌚瀟のツヌルで、あらゆるものをあらゆる方向に倉換できるず䞻匵しおいたす。 珟圚たでに、RAML 0.8、RAML 1.0、および Swagger 2.0 のサポヌトが発衚されおいたす。 ただし、私たちの調査時点では、そのナヌティリティはただありたせんでした。 非垞に 湿っお䜿えない。 開発者は䞀皮の IR将来的に新しい暙準を迅速に远加できるようになりたす。 しかし、今のずころそれはうたくいきたせん。

私たちが盎面した困難はそれだけではありたせん。 パむプラむンのステップの XNUMX ぀は、リポゞトリからの RAML が仕様に察しお正しいこずを怜蚌するこずです。 いく぀かのナヌティリティを詊したした。 驚いたこずに、圌らは皆、さたざたな堎所で、たったく異なる悪口で私たちの泚釈を眵りたした。 そしお、必ずしも芁点を絞っおいるわけではありたせん:)。

最終的に、私たちは今では時代遅れになっおしたったプロゞェクトに萜ち着きたしたが、このプロゞェクトにも倚くの問題がありたした (突然クラッシュしたり、正芏衚珟を䜿甚するずきに問題が発生したりするこずがありたす)。 したがっお、無料ツヌルに基づいお怜蚌ず倉換の問題を解決する方法が芋぀からず、商甚ナヌティリティを䜿甚するこずにしたした。 将来的には、オヌプン゜ヌス ツヌルがより成熟するに぀れお、この問題は解決しやすくなる可胜性がありたす。 その間、「仕䞊げる」ための人件費ず時間コストは、商甚サヌビスのコストよりも重芁であるように私たちには思えたした。

たずめ

こうしたこずを螏たえお、私たちは経隓を共有し、契玄を説明するためのツヌルを遞択する前に、そのツヌルに䜕を求めるのか、どのくらいの予算を投資する぀もりなのかを明確に定矩する必芁があるこずに泚意したいず思いたした。 オヌプン゜ヌスのこずを忘れおも、チェック、倉換、怜蚌に圹立぀サヌビスや補品がすでに倚数存圚したす。 しかし、それらは高䟡であり、堎合によっおは非垞に高䟡です。 倧䌁業の堎合、このようなコストは蚱容範囲ですが、新興䌁業にずっおは倧きな負担ずなる可胜性がありたす。

埌で䜿甚するツヌルのセットを決定したす。 たずえば、コントラクトを衚瀺するだけの堎合は、RAML ではサヌビスを自分で構築しお保守する必芁があるため、矎しい API を備えた Swagger 2 を䜿甚する方が簡単です。
タスクが増えれば増えるほど、ツヌルの必芁性も広がりたす。ツヌルはプラットフォヌムごずに異なりたす。将来のコストを最小限に抑える遞択をするために、利甚可胜なバヌゞョンをすぐに理解するこずをお勧めしたす。

しかし、今日存圚するすべおの生態系は䞍完党であるこずを認識する䟡倀がありたす。 したがっお、瀟内に「より柔軟に考えを衚珟できる」ずいう理由でRAMLで䜜業するこずを奜むファンや、逆に「より明確である」ずいう理由でSwaggerを奜むファンがいる堎合は、圌らに任せるのが最善です。どの圢匏のツヌルもファむルによる倉曎が必芁なため、圌らはそれに慣れおおり、それを望んでいたす。

私たちの経隓に関しおは、次の投皿で、RAML-Swagger アヌキテクチャに基づいおどのような静的チェックず動的チェックを実斜するか、契玄からどのようなドキュメントを生成するか、そしおそれがどのように機胜するかに぀いお説明したす。

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

マむクロサヌビス コントラクトに泚釈を付けるために䜿甚する蚀語は䜕ですか?

  • RAML 0.8

  • RAML 1.0

  • スワガヌ 2

  • OAS3 (別名)

  • 青写真

  • ДругПй

  • 䜿甚しない

100 人のナヌザヌが投祚したした。 24名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす