{"id":38022,"date":"2019-10-31T22:21:14","date_gmt":"2019-10-31T19:21:14","guid":{"rendered":"https:\/\/prohoster.info\/blog\/tak-vse-taki-raml-ili-oas-swagger\/"},"modified":"2019-10-31T22:21:14","modified_gmt":"2019-10-31T19:21:14","slug":"tak-vse-taki-raml-ili-oas-swagger","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","title":{"rendered":"Also, RAML oder OAS (Swagger)?","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>In der dynamischen Welt der Mikrodienste kann sich alles \u00e4ndern \u2013 jede Komponente kann in einer anderen Sprache neu geschrieben werden, unter Verwendung anderer Frameworks und Architekturen. Nur die Vertr\u00e4ge sollten unver\u00e4nderlich bleiben, damit der Mikrodienst von au\u00dfen auf einer konstanten Grundlage interagiert werden kann, unabh\u00e4ngig von den internen Metamorphosen. Heute werden wir \u00fcber unser Problem bei der Wahl des Formats zur Beschreibung von Vertr\u00e4gen berichten und die gefundenen Artefakte teilen. <\/p>\n<p><img decoding=\"async\" alt=\"Also, RAML oder OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/00864185e0f8032a304049ebf21eab21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nBeitrag verfasst von <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/annatref\/\">Anna Melekhova<\/a><\/noindex> und <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vlapat\/\">Wladimir Lapatin<\/a><\/noindex> <\/p>\n<p><b>Mikrodienste.<\/b> Bei der Entwicklung von Acronis Cyber Cloud wurde uns klar, dass wir nicht um sie herumkommen. Das Design eines Mikrodienstes ist ohne die Formalisierung des Vertrags, der die Schnittstelle des Mikrodienstes darstellt, nicht m\u00f6glich.<\/p>\n<p>Wenn ein Produkt mehr als eine Komponente enth\u00e4lt und die Vertragsentwicklung zu einer regelm\u00e4\u00dfigen Aktivit\u00e4t wird, beginnt man unweigerlich \u00fcber eine Optimierung des Prozesses nachzudenken. Es wird offensichtlich, dass das Interface (Vertrag) und die Implementierung (Mikroservice) aufeinander abgestimmt sein m\u00fcssen, dass verschiedene Komponenten dieselben Aufgaben auf die gleiche Weise erledigen sollten und dass ohne eine zentralisierte Entscheidungsfindung jede Mannschaft immer wieder Zeit investieren muss, um diese zu erhalten. <\/p>\n<p><img decoding=\"async\" alt=\"Also, RAML oder OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/48048d36536f02a3a71821e7f6f32a17.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Das Schema der Mikroservices von Amazon aus <noindex><a rel=\"nofollow\" href=\"https:\/\/twitter.com\/werner\/status\/741673514567143424\">einem Tweet<\/a><\/noindex> von Werner Vogels, CTO von Amazon<\/i><br \/>\nWas ist das Dilemma? De facto gibt es zwei M\u00f6glichkeiten f\u00fcr die Interaktion von Mikroservices \u2013 HTTP Rest und gRPC von Google. Um nicht in das Technologie-Stack von Google involviert zu werden, haben wir uns f\u00fcr HTTP Rest entschieden. Die Annotations zu HTTP REST-Vertr\u00e4gen werden meist in einem der beiden Formate beschrieben: RAML und OAS, fr\u00fcher bekannt als Swagger. Deshalb steht jedes Entwicklerteam vor der Notwendigkeit, sich f\u00fcr einen der Standards zu entscheiden. Doch, wie sich herausstellte, kann diese Entscheidung sehr kompliziert sein.<\/p>\n<h3>Warum sind Annotations notwendig?<\/h3>\n<p>\nEine Annotation ist erforderlich, damit externe Benutzer leicht verstehen, was sie \u00fcber die HTTP-Schnittstelle Ihres Dienstes tun k\u00f6nnen. Auf einer grundlegenden Ebene sollte die Annotation mindestens eine Liste der verf\u00fcgbaren Ressourcen, deren HTTP-Methoden, Anfragek\u00f6rper, Parameter, notwendige und unterst\u00fctzte Header sowie R\u00fcckgabecodes und Antwortformate enthalten. Ein \u00e4u\u00dferst wichtiger Bestandteil der Vertragsannotation ist auch deren verbale Beschreibung (\"Was passiert, wenn ich diesen Query-Parameter zur Anfrage hinzuf\u00fcge?\", \"In welchem Fall wird der Code 400 zur\u00fcckgegeben?\").<\/p>\n<p>Dennoch, wenn es um die Entwicklung einer gro\u00dfen Anzahl von Mikrodiensten geht, m\u00f6chte man zus\u00e4tzlichen Nutzen aus den geschriebenen Annotationen ziehen. Beispielsweise k\u00f6nnen auf Basis von RAML\/Swagger sowohl Client- als auch Serverseitencodes in einer Vielzahl von Programmiersprachen generiert werden. Au\u00dferdem kann automatisch Dokumentation zu dem Mikrodienst erstellt und auf Ihr Entwickler-Portal hochgeladen werden :).<\/p>\n<p><img decoding=\"async\" alt=\"Also, RAML oder OAS (Swagger)?\" src=\"\/wp-content\/uploads\/2019\/09\/0c71fb27949bdde82172c58d0c95c432.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Beispiel f\u00fcr eine strukturierte Beschreibung eines Vertrags<\/i><\/p>\n<p>Es ist weniger verbreitet, dass Mikrodienste basierend auf Vertragsbeschreibungen getestet werden. Wenn Sie sowohl die Annotation als auch die Komponente geschrieben haben, k\u00f6nnen Sie einen automatisierten Test erstellen, der die Angemessenheit der Funktionsweise des Dienstes mit verschiedenen Eingabedatentypen \u00fcberpr\u00fcft. Gibt der Dienst einen Antwortcode zur\u00fcck, der nicht in der Annotation beschrieben ist? Kann er ung\u00fcltige Daten korrekt verarbeiten?<\/p>\n<p>Dar\u00fcber hinaus erm\u00f6glicht eine qualitativ hochwertige Umsetzung nicht nur der Vertr\u00e4ge selbst, sondern auch der Werkzeuge zur Visualisierung von Annotationen eine Vereinfachung der Arbeit mit dem Mikrodienst. Wenn der Architekt den Vertrag gut beschrieben hat, k\u00f6nnen Designer und Entwickler basierend darauf den Dienst in andere Produkte einf\u00fchren, ohne zus\u00e4tzliche Zeitaufwendungen.<\/p>\n<p>F\u00fcr die Funktion zus\u00e4tzlicher Werkzeuge haben sowohl RAML als auch OAS die M\u00f6glichkeit, Metadaten hinzuzuf\u00fcgen, die im Standard nicht vorgesehen sind (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/OAI\/OpenAPI-Specification\/blob\/master\/versions\/3.0.0.md#specification-extensions\">zum Beispiel, so wird das in OAS gemacht<\/a><\/noindex>).<\/p>\n<p>Im Allgemeinen gibt es im kreativen Einsatz von Vertr\u00e4gen f\u00fcr Mikrodienste ein riesiges Potenzial... zumindest theoretisch<\/p>\n<h3>Der Vergleich eines Igels mit einer Natter<\/h3>\n<p>\nDerzeit liegt der Schwerpunkt der Entwicklung bei Acronis auf der Acronis Cyber Platform. Die Acronis Cyber Platform bietet neue Integrationspunkte f\u00fcr externe Dienste mit der Acronis Cyber Cloud und dem Agententeil. Obwohl unsere internen APIs, die in RAML beschrieben sind, zufriedenstellend waren, hat die Notwendigkeit der Ver\u00f6ffentlichung von APIs erneut die Frage aufgeworfen, welcher Annotationsstandard f\u00fcr unsere Arbeit am besten geeignet ist.<\/p>\n<p>Anfangs schien es, als g\u00e4be es zwei L\u00f6sungen \u2013 die am h\u00e4ufigsten verwendeten Entwicklungen RAML und Swagger (oder OAS). Tats\u00e4chlich stellte sich jedoch heraus, dass es mindestens drei oder mehr Alternativen gibt.<\/p>\n<p>Auf der einen Seite gibt es RAML \u2013 eine m\u00e4chtige und effiziente Sprache. Sie bietet eine gut umgesetzte Hierarchie und Vererbung, wodurch dieses Format besser f\u00fcr gro\u00dfe Unternehmen geeignet ist, die viele Beschreibungen ben\u00f6tigen \u2013 das hei\u00dft, nicht nur ein Produkt, sondern zahlreiche Mikrodienste, die gemeinsame Teile von Vertr\u00e4gen aufweisen \u2013 Authentifizierungsschemata, identische Datentypen, Fehlermeldungen.<\/p>\n<p>Der Entwickler von RAML, das Unternehmen Mulesoft, hat sich dem Open API-Konsortium angeschlossen, das sich der Weiterentwicklung widmet. <noindex><a rel=\"nofollow\" href=\"https:\/\/www.google.com\/url?q=https:\/\/swagger.io\/blog\/news\/mulesoft-joins-the-open-api-initiative\/&amp;sa=D&amp;ust=1568012015646000&amp;usg=AFQjCNExaO-_GkMnfmqc_MRu6mgHYgjK-A\">Swagger<\/a><\/noindex>. Daher hat RAML seine Entwicklung eingestellt. Um sich das Ereignisformat vorzustellen, kann man sich vorstellen, dass die Entwickler der Hauptkomponenten von Linux zu Microsoft gewechselt sind. Eine solche Situation f\u00fchrt dazu, dass Swagger, das sich dynamisch weiterentwickelt, in der neuesten \u2013 dritten Version \u2013 RAML in Bezug auf Flexibilit\u00e4t und Funktionalit\u00e4t fast einholt.<\/p>\n<h3>W\u00e4re da nicht eine Kleinigkeit\u2026<\/h3>\n<p>\nWie sich herausgestellt hat, haben lange nicht alle Open-Source-Tools auf die Version OAS 3.0 aktualisiert. F\u00fcr Microservices in Go ist das Fehlen einer Anpassung hierf\u00fcr besonders kritisch. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a><\/noindex> auf die neue Version des Standards. Der Unterschied zwischen Swagger 2 und Swagger 3 ist jedoch \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/swagger.io\/blog\/news\/whats-new-in-openapi-3-0\/\">enorm<\/a><\/noindex>. Zum Beispiel haben die Entwickler in der dritten Version:<\/p>\n<ul>\n<li>die Beschreibung von Authentifizierungsschemata verbessert<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/swagger-api\/swagger-ui\/issues\/4819#issuecomment-413890929\">die Unterst\u00fctzung f\u00fcr JSON-Schema vervollst\u00e4ndigt<\/a><\/noindex> die M\u00f6glichkeit zur Hinzuf\u00fcgung von Beispielen erweitert.<\/li>\n<li>Wir haben die M\u00f6glichkeit zur Hinzuf\u00fcgung von Beispielen erweitert<\/li>\n<\/ul>\n<p>\nDie Situation wird interessant: Wenn es um die Auswahl des Standards geht, sollten RAML, Swagger 2 und Swagger 3 als separate Alternativen betrachtet werden. Nur Swagger 2 bietet dabei eine gute Unterst\u00fctzung durch OpenSource-Tools. RAML ist sehr flexibel... und komplex, w\u00e4hrend Swagger 3 nur schwach von der Community unterst\u00fctzt wird, sodass Sie gezwungen sind, eigene oder kommerzielle L\u00f6sungen zu verwenden, die in der Regel ziemlich teuer sind. <\/p>\n<p>Dennoch bietet Swagger viele angenehme Funktionen, wie ein fertiges Portal. <noindex><a rel=\"nofollow\" href=\"https:\/\/editor.swagger.io\">editor.swagger.io<\/a><\/noindex>, auf den man Anmerkungen hochladen und eine Visualisierung mit detaillierten Beschreibungen, Links und Verbindungen erhalten kann. F\u00fcr das fundiertere und weniger benutzerfreundliche RAML gibt es diese M\u00f6glichkeit nicht. Ja, man kann in Projekten auf GitHub suchen, dort ein Pendant finden und es selbst aufsetzen. Allerdings muss in jedem Fall jemand das Portal warten, was f\u00fcr grundlegende Nutzung oder Testzwecke nicht so praktisch ist. Zudem ist Swagger \u201eweniger dogmatisch\u201c, oder liberal \u2013 es kann aus Kommentaren im Code generiert werden, was nat\u00fcrlich dem API-First-Prinzip widerspricht und von keinem der RAML-Tools unterst\u00fctzt wird.<\/p>\n<p>Zu unserer Zeit haben wir mit RAML als einer flexibleren Sprache begonnen und mussten letztendlich vieles selbst erledigen. Zum Beispiel wird in einem der Projekte ein Tool verwendet, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/spotify\/ramlfications\">ramlfications<\/a><\/noindex> in den Unit-Tests, das nur RAML 0.8 unterst\u00fctzt. Daher mussten wir Workarounds hinzuf\u00fcgen, damit das Tool RAML Version 1.0 verarbeiten konnte.<\/p>\n<h3>Muss man \u00fcberhaupt eine Auswahl treffen?<\/h3>\n<p>\nNachdem wir uns mit der Erweiterung des L\u00f6sungsecosystems f\u00fcr RAML besch\u00e4ftigt haben, sind wir zu dem Schluss gekommen, dass wir RAML in Swagger 2 konvertieren m\u00fcssen, um dort alle Automatisierungen, \u00dcberpr\u00fcfungen, Tests und anschlie\u00dfenden Optimierungen durchzuf\u00fchren. Dies ist ein guter Weg, um sowohl die Flexibilit\u00e4t von RAML als auch die Unterst\u00fctzung durch die Community-Tools von Swagger gleichzeitig zu nutzen. <\/p>\n<p>F\u00fcr diese Aufgabe gibt es zwei OpenSource-Tools, die die Konvertierung von Vertr\u00e4gen erm\u00f6glichen sollten:<\/p>\n<ol>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/mulesoft\/oas-raml-converter\">oas-raml-converter<\/a><\/noindex> \u2013 ein derzeit nicht unterst\u00fctztes Tool. Bei der Arbeit damit haben wir festgestellt, dass es eine Reihe von Problemen mit komplexen RAMLs gibt, die auf viele Dateien verteilt sind. Dieses Programm ist in JavaScript geschrieben und f\u00fchrt eine rekursive Durchlaufung des Syntaxbaums durch. Aufgrund der dynamischen Typisierung ist es schwierig, diesen Code zu verstehen, weshalb wir uns entschieden haben, keine Zeit mit Patches f\u00fcr dieses veraltete Tool zu verschwenden.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/raml-org\/webapi-parser\">webapi-parser<\/a><\/noindex> \u2014 ein Tool von derselben Firma, das sich r\u00fchmt, alles und jedes konvertieren zu k\u00f6nnen, und das in beide Richtungen. Aktuell wird die Unterst\u00fctzung f\u00fcr RAML 0.8, RAML 1.0 und Swagger 2.0 angegeben. Allerdings war das Tool zum Zeitpunkt unserer Untersuchung noch <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/aml-org\/amf\/issues\/517\">SEHR<\/a><\/noindex> roh und unbrauchbar. Die Entwickler schaffen eine Art <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Intermediate_representation\">IR<\/a><\/noindex>, was ihnen in Zukunft erm\u00f6glichen wird, schnell neue Standards hinzuzuf\u00fcgen. Aber bisher funktioniert das alles einfach nicht.<\/li>\n<\/ol>\n<p>\nUnd das ist noch nicht alles, mit den Schwierigkeiten, denen wir begegnet sind. Einer der Schritte in unserer Pipeline besteht darin, zu \u00fcberpr\u00fcfen, ob das RAML aus dem Repository korrekt in Bezug auf die Spezifikation ist. Wir haben mehrere Tools ausprobiert. Erstaunlicherweise hatten sie alle an unseren Anmerkungen an verschiedenen Stellen und mit v\u00f6llig unterschiedlichen unsinnigen Worten zu kauen. Und das nicht immer zu Recht : ).<\/p>\n<p>Letztendlich haben wir uns f\u00fcr ein inzwischen veraltetes Projekt entschieden, das ebenfalls eine Reihe von Problemen hat (manchmal st\u00fcrzt es unerwartet ab, hat Schwierigkeiten beim Umgang mit regul\u00e4ren Ausdr\u00fccken). Daher haben wir keinen Weg gefunden, die Validierungs- und Konvertierungsaufgaben mit kostenlosen Tools zu l\u00f6sen, und haben beschlossen, ein kommerzielles Tool zu verwenden. In Zukunft, wenn die Open-Source-Mittel weiterentwickelt werden, wird die L\u00f6sung dieses Problems m\u00f6glicherweise einfacher. Bis dahin schienen uns die Arbeits- und Zeitaufwendungen f\u00fcr das \"Nachbessern\" bedeutender zu sein als die Kosten f\u00fcr den kommerziellen Service.<\/p>\n<h3>Fazit<\/h3>\n<p>\nNach all dem m\u00f6chten wir unsere Erfahrungen teilen und darauf hinweisen, dass Sie vor der Auswahl eines Werkzeugs zur Vertragsbeschreibung klar definieren sollten, was Sie von diesem erwarten und welches Budget Sie bereit sind zu investieren. Auch ohne OpenSource gibt es bereits viele Dienste und Produkte, die Ihnen bei der \u00dcberpr\u00fcfung, Konvertierung und Validierung helfen k\u00f6nnen. Diese sind jedoch kostspielig, manchmal sogar sehr teuer. F\u00fcr gro\u00dfe Unternehmen sind solche Ausgaben tragbar, doch f\u00fcr ein Startup k\u00f6nnen sie eine erhebliche Belastung darstellen.<\/p>\n<p>Bestimmen Sie die Werkzeugauswahl, die Sie sp\u00e4ter verwenden m\u00f6chten. Wenn Sie beispielsweise einfach nur einen Vertrag anzeigen m\u00fcssen, ist es einfacher, Swagger 2 zu verwenden, das eine ansprechende API bietet, w\u00e4hrend Sie bei RAML den Dienst selbst aufsetzen und warten m\u00fcssten.<br \/>\nJe mehr Aufgaben Sie haben, desto gr\u00f6\u00dfer wird der Bedarf an Werkzeugen, und diese variieren je nach Plattform. Es ist daher ratsam, sich fr\u00fchzeitig \u00fcber die verf\u00fcgbaren Versionen zu informieren, um eine Wahl zu treffen, die Ihre zuk\u00fcnftigen Kosten minimiert.<\/p>\n<p>Es ist jedoch anzuerkennen, dass alle heute existierenden \u00d6kosysteme unvollkommen sind. Wenn es in einem Unternehmen also Bef\u00fcrworter gibt, die es bevorzugen, mit RAML zu arbeiten, da \"es flexiblere Ausdrucksm\u00f6glichkeiten bietet\", oder andersrum, die Swagger bevorzugen, weil \"es verst\u00e4ndlicher ist\", ist es am besten, ihnen zu erlauben, mit dem zu arbeiten, womit sie vertraut sind und was sie m\u00f6chten, denn die Werkzeuge der jeweiligen Formate erfordern noch Anpassungen. <\/p>\n<p>Was unsere Erfahrungen betrifft, werden wir in den n\u00e4chsten Beitr\u00e4gen erl\u00e4utern, welche statischen und dynamischen Pr\u00fcfungen wir auf Basis unserer RAML-Swagger-Architektur durchf\u00fchren sowie welche Dokumentation wir aus den Vertr\u00e4gen generieren und wie all das funktioniert.<\/p>\n<p class=\"for_users_only_msg\">Nur registrierte Benutzer k\u00f6nnen an der Umfrage teilnehmen. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/auth\/login\/\">Bitte melden Sie sich an.<\/a><\/noindex>Sind Sie an Contour interessiert?<\/p>\n<h2 class=\"default-block__polling-title\">Welche Sprache verwenden Sie f\u00fcr die Annotationen von Microservice-Vertr\u00e4gen?<\/h2>\n<ul class=\"content-list content-list_polling\">\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    RAML 0.8<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    RAML 1.0<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Swagger 2<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    OAS3 (aka )<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Blueprint<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Ein weiteres<\/p>\n<\/li>\n<li class=\"content-list__item content-list__item_polling\">\n<p>                    Nutze ich nicht<\/p>\n<\/li>\n<\/ul>\n<p>    100 Benutzer haben abgestimmt. 24 Benutzer haben sich enthalten.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/acronis\/blog\/466691\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u043e\u0437. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28540,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38022","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u043e\u0437. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 RAML \u0438\u043b\u0438 OAS (Swagger)? | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u043e\u0437. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:21:14+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:21:14+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47 RAML oder OAS (Swagger)? | ProHoster","description":"In der dynamischen Welt der Mikrodienste kann sich alles \u00e4ndern \u2013 jede Komponente kann in einer anderen Sprache mit unterschiedlichen Frameworks und Architekturen neu geschrieben werden. Lediglich die Vertr\u00e4ge sollten unver\u00e4ndert bleiben, damit der Mikrodienst von au\u00dfen auf einer stabilen Basis angesprochen werden kann, unabh\u00e4ngig von internen Ver\u00e4nderungen. Heute berichten wir \u00fcber unser Dilemma bei der Wahl des Formats zur Beschreibung.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u0430\u043a \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 RAML \u0438\u043b\u0438 OAS (Swagger)? | ProHoster","og:description":"\u0412 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u043b\u044e\u0431\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u044f\u0437\u044b\u043a\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0438\u043d\u044b\u0435 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438 \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443. \u041d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u043e\u0441\u0442\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u0438\u0448\u044c \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0437\u0432\u043d\u0435 \u043d\u0430 \u043d\u0435\u043a\u043e\u0439 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043c\u0435\u0442\u0430\u043c\u043e\u0440\u0444\u043e\u0437. \u0418 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/tak-vse-taki-raml-ili-oas-swagger","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:21:14+00:00","article:modified_time":"2019-10-31T19:21:14+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38022","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 20:09:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:43:20","updated":"2026-01-23 20:09:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/38022","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=38022"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/38022\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/28540"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=38022"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=38022"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=38022"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}