{"id":6570,"date":"2018-08-24T13:15:50","date_gmt":"2018-08-24T11:15:50","guid":{"rendered":"https:\/\/nearshore-it.eu\/?p=6570"},"modified":"2023-11-09T16:57:37","modified_gmt":"2023-11-09T15:57:37","slug":"rest-api-umgang-mit-problemen","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/de\/blog\/softwareentwicklung\/rest-api-umgang-mit-problemen\/","title":{"rendered":"REST API  &#8211; Umgang mit Problemen"},"content":{"rendered":"\n<p>Hier ist, wie es in den letzten Jahren aussah:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>im Jahr 2014 an Backbone.js,<\/li><li>in den Jahren 2015-16 an AngularJS,<\/li><li>im Jahr 2017 an Angular 2\/4,<\/li><li>im Jahr 2018 an React.js,<\/li><li>Was wird als n\u00e4chstes passieren? Vue.js?<\/li><\/ul>\n\n\n\n<p>sowie an einigen Back-Ends (Java, Python, CF, Node.js etc.), die REST-API-Endpunkte bereitstellen.<\/p>\n\n\n\n<p>Dieses Setup verschiebt eine Vielzahl von Daten, Abruf und Verarbeitungscode vom Back-End \u201cBE\u201d (Webserver) zum Front-End \u201cFE\u201d (Webbrowser, mobile App). Es erleichtert die Entwicklung am Back-End, erh\u00f6ht aber die Komplexit\u00e4t am Front-End enorm. Hinzu kommt, dass es eine Reihe neuer Probleme mit der API-Kompatibilit\u00e4t gibt.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile der Umstellung auf die REST-API<\/h2>\n\n\n\n<p>In der Theorie sollte die REST-API nur Vorteile haben, die Folgendes beinhalten:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>viel bessere, <strong>reaktionsschnelle Benutzeroberfl\u00e4che<\/strong>,<\/li><li><strong>Verschieben der HTML-Generierung von BE nach FE<\/strong>, wo sie einfach und schnell aktualisiert werden kann,<\/li><li><strong>Systementkopplung,<\/strong><\/li><li>Erm\u00f6glichung der <strong>unabh\u00e4ngigen Entwicklung von FE und BE<\/strong> (zumindest in der Theorie).<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Problem<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Real life vs REST API<\/h3>\n\n\n\n<p>Aber in der Praxis (und Praxis schl\u00e4gt immer die Theorie in der IT) verursacht sie f\u00fcr die meisten Entwicklerteams vor allem gro\u00dfe Probleme mit der Dateninkompatibilit\u00e4t auf REST-API-Endpunkten.<\/p>\n\n\n\n<p>Diese Probleme versch\u00e4rfen sich mit mehreren Back-End-Schritten (z.B. Microservices) BE-&gt;BE-&gt;FE und umgekehrt beim Schreiben von Daten FE&lt;-BE&lt;-BE, was zu unn\u00f6tigen Stunden f\u00fcr alle Entwickler und zu Frustration von Kunden\/Produktinhabern f\u00fchrt.<\/p>\n\n\n\n<p><strong>Noch schlimmer ist, dass API-Teile von Teams in einem anderen B\u00fcro\/Land entwickelt wurden<\/strong> &#8211; Stunden werden zu Tagen und Wochen verschwendet.<\/p>\n\n\n\n<p>Diese Unterschiede ergeben sich aus realen Situationen wie z.B:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>ein anderer Entwickler hat den API-Endpunkt ge\u00e4ndert (FE oder BE, aber nicht beides),<\/li><li>FE und BE wurden nicht zur gleichen Zeit (und ohne API-Versionierung) bereitgestellt,<\/li><li>ein Tippfehler im API-Aufruf, der schwer zu debuggen ist,<\/li><li>Fehlerstatuscode und fehlende Debug-Informationen an einem API-Endpunkt.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">L\u00f6sung<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Verwendung einer KonstruktionsrichtlinieIm <\/strong><\/h3>\n\n\n\n<p>Allgemeinen <strong>hilft es, wenn Sie einige REST-API-Designrichtlinien befolgen<\/strong> (z.B. dies oder das). Aber es wird nicht alle der oben genannten Probleme vollst\u00e4ndig l\u00f6sen. Normalerweise k\u00f6nnen wir nicht alle Teile der API in gro\u00dfen Systemen kontrollieren. So bleibt Ihr Leitfaden &#8222;auf dem Papier&#8220; und hat in der Praxis keine Bedeutung. Au\u00dferdem gibt es keine automatische M\u00f6glichkeit, zu \u00fcberpr\u00fcfen, ob die API den gew\u00e4hlten Richtlinien entspricht, da es sich nur um Artikel in menschlicher Sprache handelt. Neben der Einhaltung einer Richtlinie m\u00fcssen sich Ihre API-Endpunkte auf beiden Seiten einigen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Verwendung von automatisch generierter Dokumentation und Tests<\/strong><\/h3>\n\n\n\n<p>Wir brauchen etwas, auf das wir uns verlassen k\u00f6nnen &#8211; eine Dokumentation, die sich selbst automatisch testet und das Problem sofort und automatisch verfolgt, im Gegensatz zu einer manuellen.<\/p>\n\n\n\n<p>Manuell geschriebene Dokumentationen werden schnell \u00fcberfl\u00fcssig und sind daher irref\u00fchrend und sch\u00e4digen den Entwickler-Workflow. Infolgedessen lesen die meisten Entwickler es nicht und vertrauen ihm auch nicht.<\/p>\n\n\n\n<p>Manuelle API-Tests <a href=\"https:\/\/www.jcommerce.eu\/jpro\/articles\/software-testing\" target=\"_blank\" rel=\"noopener\">m\u00fcssen hunderte Male wiederholt werden<\/a>. Sie sind auch schwierig und zeitaufwendig (z.B. Einstellen und Verwalten von Daten in POSTman). In den meisten IT-Projekten ist es jedoch nach wie vor \u00fcblich, dies zu tun. Gl\u00fccklicherweise ist die Automatisierung beider Verfahren recht einfach zu realisieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tools verwenden<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Schritt 1 &#8211; Automatische Generierung der Dokumentation<\/strong><\/h3>\n\n\n\n<p>Die meisten Entwickler sind vertraut mit REST-API-Tools zur Beschreibung und Dokumentation von REST-API-Endpunkten wie:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/swagger.io\/\" target=\"_blank\" rel=\"noopener\">Swagger<\/a><\/li><li><a href=\"https:\/\/raml.org\/\" target=\"_blank\" rel=\"noopener\">RAML<\/a><\/li><\/ul>\n\n\n\n<p>F\u00fcr einen Vergleich<a href=\"https:\/\/blog.vsoftconsulting.com\/blog\/is-raml-or-swagger-better-for-building-apis\" target=\"_blank\" rel=\"noopener\"> klicken Sie bitte hier<\/a>.<\/p>\n\n\n\n<p>Beide enthalten viele n\u00fctzliche Tools und Integrationen:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/raml.org\/projects\" target=\"_blank\" rel=\"noopener\">https:\/\/raml.org\/projects<\/a><\/li><li><a href=\"https:\/\/swagger.io\/open-source-integrations\/\" target=\"_blank\" rel=\"noopener\">https:\/\/swagger.io\/open-source-integrations\/<\/a><\/li><\/ul>\n\n\n\n<p>Auch die Generierung des Swagger-Definitionsformats (das einen API-Endpunkt auf der Serverseite detailliert beschreibt) mit der Swagger-Oberfl\u00e4chenansicht aus dem Quellcode wird immer h\u00e4ufiger (z.B. Hapi.js mit Swagger-Plugin oder JAX-RS mit Annotationen).<\/p>\n\n\n\n<p>Es garantiert aber immer noch nicht, dass die Dokumentation vollst\u00e4ndig mit dem Verhalten des Codes \u00fcbereinstimmt. In komplexen Systemen haben Sie weder die Kontrolle \u00fcber alle API-Endpunkte, noch k\u00f6nnen Sie diese \u00e4ndern oder automatisch Dokumente generieren lassen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Schritt 2 &#8211; Automatische API-Tests<\/strong><\/h3>\n\n\n\n<p>Wenn Sie Gl\u00fcck haben und alle Endpunkte vollst\u00e4ndig dokumentiert und mit Swagger oder RAML beschrieben sind, <strong>k\u00f6nnen Sie mit Hilfe von Tools mit geringem Aufwand automatisch eine API erstellen und ausf\u00fchren<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>f\u00fcr Swagger<\/strong> (<a href=\"https:\/\/swagger.io\/commercial-tools\/\" target=\"_blank\" rel=\"noopener\">https:\/\/swagger.io\/commercial-tools\/<\/a>),<\/li><li><strong>f\u00fcr RAML<\/strong> (<a href=\"https:\/\/raml.org\/projects\" target=\"_blank\" rel=\"noopener\">https:\/\/raml.org\/projects<\/a>), e.g. Abao.<\/li><\/ul>\n\n\n\n<p>Es wird ein gro\u00dfer Vorteil f\u00fcr die t\u00e4gliche Entwicklung sein.<\/p>\n\n\n\n<p>Aber zur\u00fcck zur Realit\u00e4t &#8211; das kann nur in kleinen Projekten passieren. Normalerweise haben Sie diesen Komfort nicht, und Sie m\u00fcssen selbst automatische API-Tests schreiben.<\/p>\n\n\n\n<p>Daf\u00fcr empfehle ich <a href=\"https:\/\/www.frisbyjs.com\/\" target=\"_blank\" rel=\"noopener\">Frisby.js<\/a>. API-Tests sind sehr einfach zu schreiben und erfordern wenig Code. Sie laufen in Sekundenschnelle und k\u00f6nnen f\u00fcr den automatischen Betrieb eingerichtet werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Zusammenfassung<\/h2>\n\n\n\n<p>Das gr\u00f6\u00dfte Problem mit der REST-API ist die Einigung \u00fcber die Endpunkte. Das f\u00fchrt zu Mehraufwand und dauert l\u00e4nger, und die Frage der Inkompatibilit\u00e4t muss immer ber\u00fccksichtigt werden. Zumindest werden Sie gezwungen sein, den Teil des Systems zu identifizieren, der die Probleme verursacht, dann zu erraten, wer das Problem beheben sollte, und es ihnen zuzuweisen, nat\u00fcrlich in der Hoffnung, dass es nicht immer wieder neu zugewiesen wird. Es ist Zeitverschwendung.<\/p>\n\n\n\n<p><strong>Eine schnelle Auflistung der REST-API-Bugs und deren Zuordnung zum verantwortlichen Entwickler ist der Schl\u00fcssel zu einem erfolgreichen &#8222;modernen Web&#8220;-Projekt. Die in diesem Artikel genannten Werkzeuge sind nur Beispiele. Finden und nutzen Sie die Tools, die am besten zu Ihrem Workflow passen.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In den letzten Jahren habe ich an mehreren IT-Projekten (in Verbindung mit Banken, Versicherungen, Logistik, Immobilien und IoT) gearbeitet, die REST-API verwenden. Jedes Mal war es das Ziel, die alte Codebasis in das \u201cmoderne Web\u201d umzuschreiben und dabei ein neues Front-End-Framework zu verwenden, das im Moment beliebt ist.<\/p>\n","protected":false},"author":64,"featured_media":21302,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":27,"footnotes":""},"categories":[435],"tags":[],"offering":[],"class_list":["post-6570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-softwareentwicklung"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/posts\/6570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/users\/64"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/comments?post=6570"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/posts\/6570\/revisions"}],"predecessor-version":[{"id":26177,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/posts\/6570\/revisions\/26177"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/media\/21302"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/media?parent=6570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/categories?post=6570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/tags?post=6570"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/de\/wp-json\/wp\/v2\/offering?post=6570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}