<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SOAP Archive - CEOsBay</title>
	<atom:link href="https://ceosbay.com/tag/soap/feed/" rel="self" type="application/rss+xml" />
	<link>https://ceosbay.com/tag/soap/</link>
	<description>It&#039;s all about Tech</description>
	<lastBuildDate>Sun, 23 Apr 2023 09:39:06 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://i0.wp.com/ceosbay.com/wp-content/uploads/2022/11/image.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>SOAP Archive - CEOsBay</title>
	<link>https://ceosbay.com/tag/soap/</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">211828771</site>	<item>
		<title>API &#8211; Nahtlose Verbindungen für Innovationen</title>
		<link>https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/</link>
					<comments>https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 20 Apr 2023 19:59:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Künstliche Intelligenz]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Soziale Medien]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[Access]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[APIS]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Authentifizierung]]></category>
		<category><![CDATA[Best]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[Diensten]]></category>
		<category><![CDATA[Dokumentation]]></category>
		<category><![CDATA[Edge]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[Fehler]]></category>
		<category><![CDATA[Fehlerbehandlung]]></category>
		<category><![CDATA[Format]]></category>
		<category><![CDATA[Formate]]></category>
		<category><![CDATA[gRPC]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[Hypermedia]]></category>
		<category><![CDATA[Intelligence]]></category>
		<category><![CDATA[Intelligenz]]></category>
		<category><![CDATA[Interface]]></category>
		<category><![CDATA[JWT]]></category>
		<category><![CDATA[KI]]></category>
		<category><![CDATA[Künstlich]]></category>
		<category><![CDATA[Künstliche]]></category>
		<category><![CDATA[Orchestrierung]]></category>
		<category><![CDATA[Partner]]></category>
		<category><![CDATA[Pass]]></category>
		<category><![CDATA[Password]]></category>
		<category><![CDATA[Passwort]]></category>
		<category><![CDATA[Practice]]></category>
		<category><![CDATA[Practices]]></category>
		<category><![CDATA[Private]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Protocol]]></category>
		<category><![CDATA[Protokoll]]></category>
		<category><![CDATA[Protokolle]]></category>
		<category><![CDATA[Public]]></category>
		<category><![CDATA[Representational]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Routine]]></category>
		<category><![CDATA[RPC]]></category>
		<category><![CDATA[Schlüssel]]></category>
		<category><![CDATA[Schlüsselwort]]></category>
		<category><![CDATA[Sicher]]></category>
		<category><![CDATA[Sichern]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[State]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Transfer]]></category>
		<category><![CDATA[Trends]]></category>
		<category><![CDATA[Verbindung]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1789</guid>

					<description><![CDATA[<p>Nachdem ich zuvor REST bzw. die REST API thematisiert habe, macht es durchaus Sinn, sich die API (Application Programming Interfaces) an sich anzuschauen. APIs sind heutzutage ein wesentlicher Bestandteil moderner Softwareentwicklung, denn sie ermöglichen die &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/">API &#8211; Nahtlose Verbindungen für Innovationen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Nachdem ich zuvor <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a> bzw. die <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a> API thematisiert habe, macht es durchaus Sinn, sich die API (Application Programming Interfaces) an sich anzuschauen. APIs sind heutzutage ein wesentlicher Bestandteil moderner Softwareentwicklung, denn sie ermöglichen die Kommunikation und den Austausch von Informationen zwischen unterschiedlichen Anwendungen und Diensten. Sie sind kaum mehr wegzudenken in unserer digitalisierten Welt.&nbsp;</p>



<h3 class="wp-block-heading">Was ist eine API?</h3>



<p>Eine API (Application Programming Interface) ist eine Sammlung von Protokollen, Routinen und Tools zur Interaktion zwischen verschiedenen Softwareanwendungen. Vereinfacht ausgedrückt, ermöglicht eine API die Kommunikation zwischen zwei Softwareanwendungen, indem sie dem Entwickler die Möglichkeit bietet, bestimmte Funktionen oder Daten einer Anwendung zu verwenden, ohne sich um deren interne Implementierung kümmern zu müssen.</p>



<h3 class="wp-block-heading">Funktionsweise von APIs</h3>



<p>APIs ermöglichen die Kommunikation zwischen Anwendungen, indem sie standardisierte Anfragen und Antworten verwenden. In der Regel bezeichnet man eine Anwendung, die eine API bereitstellt, als Server. Die Anwendung, die die API nutzt, bezeichnet man als Client. Der Client sendet eine Anfrage an den Server, der diese Anfrage bearbeitet und daraufhin eine Antwort zurücksendet.</p>



<p>Die Kommunikation erfolgt meist über das https-Protokoll und basiert auf einem Request-Response-Modell. Eine API-Anfrage enthält normalerweise Informationen wie die gewünschte Aktion, die zu verwendenden Daten und den Authentifizierungsschlüssel. Die Antwort beinhaltet dann das Ergebnis der Aktion, zusammen mit den angeforderten Daten, falls vorhanden.</p>



<h3 class="wp-block-heading">Arten von APIs</h3>



<p>Es gibt verschiedene Arten von APIs, je nach Zugriffsbeschränkungen und Anwendungsbereich. Hier sind einige der gebräuchlichsten Typen:</p>



<p><strong>Öffentliche APIs</strong>: Auch als externe oder offene APIs bekannt, sind APIs, die für die Öffentlichkeit zugänglich sind. Entwickler können sie nutzen, um angebotene Dienste in ihre Anwendungen zu integrieren.</p>



<p><strong>Private APIs</strong>: Diese APIs sind nur für einen bestimmten Entwicklerkreis oder innerhalb eines Unternehmens zugänglich. Entwickler verwenden sie, um interne Prozesse und Dienstleistungen zu unterstützen.</p>



<p><strong>Partner-APIs</strong>: Partner-APIs sind für eine ausgewählte Gruppe von Entwicklern oder Unternehmen zugänglich, die eine Partnerschaft oder Geschäftsvereinbarung mit dem API-Anbieter eingegangen sind.</p>



<h3 class="wp-block-heading">API-Protokolle und Datenformate</h3>



<p>APIs nutzen verschiedene Protokolle und Datenformate, um Anfragen und Antworten zu strukturieren. Die gebräuchlichsten sind:</p>



<p><strong>REST (Representational State Transfer)</strong>: Ein Architekturstil, der auf der Verwendung von standardisierten https-Anfragen und Antworten basiert. <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a>-APIs sind ressourcenorientiert und relativ leicht verständlich. Man verwendet sie häufig mit <a href="https://ceosbay.com/2023/03/14/erklaerung-json/">JSON</a> (<a href="https://ceosbay.com/2023/03/14/erklaerung-json/">JavaScript Object Notation</a>) als Datenformat.</p>



<p><strong>SOAP (Simple Object Access Protocol)</strong>: Ein älteres Protokoll, das auf <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/">XML</a>-basierten Nachrichten beruht und strenge Regeln für die Kommunikation vorschreibt. <a href="https://ceosbay.com/2023/03/23/erklaerung-soap/">SOAP</a>-APIs sind tendenziell komplexer als <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a> APIs, bieten jedoch eine höhere Sicherheit und formelle Spezifikationen.</p>



<p><strong>GraphQL</strong>: Eine relativ neue API-Technologie, von Facebook. Im Gegensatz zu <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a> und <a href="https://ceosbay.com/2023/03/23/erklaerung-soap/">SOAP</a> ermöglicht GraphQL eine flexiblere Datenabfrage, indem der Client genau die benötigten Informationen anfordern kann. GraphQL verwendet eine eigene Abfragesprache und unterstützt sowohl Lese- als auch Schreiboperationen.</p>



<p><strong>gRPC</strong>: Ein von Google entwickeltes API-<a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/">Framework</a>, das auf Protocol Buffers, als binäres Datenformat setzt und für hohe Leistungsfähigkeit und Skalierbarkeit optimiert ist. gRPC eignet sich besonders für Mikroservices und hochperformante Anwendungen. Ich gehe davon aus, dass ich darüber in naher Zukunft einen separaten Beitrag schreibe.</p>



<h3 class="wp-block-heading">API-Authentifizierung und -Sicherheit</h3>



<p>Um den Zugriff auf APIs zu kontrollieren und deren Sicherheit zu gewährleisten, kann man verschiedene Authentifizierungs- und Autorisierungsmechanismen einsetzen.&nbsp;</p>



<p>Einige der gängigen Methoden sind:</p>



<p><strong>API-Schlüssel</strong>: Ein einfacher und weit verbreiteter Ansatz, bei dem der Entwickler einen eindeutigen Schlüssel erhält, den man bei jeder API-Anfrage übermittelt, um den Zugriff zu autorisieren.</p>



<p><strong>OAuth</strong>: Ein offener Standard für Authentifizierung und Autorisierung, der es ermöglicht, Anwendungen den Zugriff auf Benutzerdaten von Drittanbietern zu gewähren, ohne dass die Anwendung das Passwort des Benutzers kennen muss. Sozialen Netzwerke und große Webdienste wie Google und Facebook nutzen häufig OAuth.</p>



<p><strong>JWT (JSON Web Tokens)</strong>: Eine kompakte, selbstständige Methode zur sicheren Übertragung von Informationen zwischen Parteien in Form von Objekten. Man nutzt JWTs häufig in Kombination mit OAuth und anderen Authentifizierungsschemata.</p>



<h3 class="wp-block-heading">Best Practices bei der Verwendung von APIs</h3>



<p>Die erfolgreiche Nutzung von APIs erfordert einige Best Practices, um sicherzustellen, dass Anwendungen effizient und sicher arbeiten:</p>



<p><strong>Dokumentation</strong>: Eine gut dokumentierte API erleichtert Entwicklern das Verständnis und die Integration der API in ihre Anwendungen.</p>



<p><strong>Fehlerbehandlung</strong>: Eine robuste Fehlerbehandlung ist entscheidend, um sicherzustellen, dass Anwendungen auch bei unerwarteten Fehlern oder Ausfällen der API korrekt funktionieren.</p>



<p><strong>Ressourcenmanagement</strong>: Bei der Verwendung von APIs ist es wichtig, auf Ressourcenmanagement zu achten. Dies erreichet man beispielsweise, indem man Ratenbegrenzungen (Rate Limiting) einhält, um die Anzahl der Anfragen pro Zeiteinheit zu begrenzen und die Belastung des API-Servers zu reduzieren.</p>



<p><strong>Sicherheit</strong>: Bei der Arbeit mit APIs sollte man auf die Sicherheit der Anwendung und der API achten. Durch die Verwendung von Verschlüsselungstechniken und sicheren Authentifizierungsmethoden lässt sich dies relativ einfach realisieren.</p>



<h3 class="wp-block-heading">Zukünftige Trends bei APIs:</h3>



<p>APIs gewinnen weiterhin an Bedeutung, da sich die Technologielandschaft weiterentwickelt. Um neue Anforderungen und Herausforderungen zu bewältigen, müssen sich auch die APIs weiterentwickeln.</p>



<h5 class="wp-block-heading">Einige zukünftige Trends bei APIs sind:</h5>



<p><strong>Hypermedia-APIs</strong>: Ein aufkommender Trend im Bereich der <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST</a> APIs ist die Verwendung von Hypermedia-Elementen zur Dynamisierung der API-Kommunikation. Hypermedia-APIs stellen Links und Aktionen in den API-Antworten bereit, um den Client zur Verfügung stehende Funktionen und Ressourcen dynamisch zu erkennen. Dadurch kann man die Kopplung zwischen Client und Server reduzieren.</p>



<p><strong>API-Orchestrierung</strong>: Mit der zunehmenden Verbreitung von Mikroservices und verteilten Systemen gewinnen die API-Orchestrierung und -Aggregationen immer mehr an Bedeutung, um eine effiziente Kommunikation und Integration zwischen verschiedenen Diensten zu gewährleisten.</p>



<p><strong>Edge-Computing und APIs</strong>: Mit der zunehmenden Verbreitung von IoT-Geräten und Edge-Computing-Technologien ist die Rolle von APIs bei der Bereitstellung von Echtzeitdaten und Funktionen für Geräte am Netzwerkrand essenziell.</p>



<p><strong>KI-gestützte APIs</strong>: Integration von künstlicher Intelligenz und maschinellem Lernen, um leistungsfähige Funktionen wie Spracherkennung, Computer Vision bzw. Bildanalyse und datengesteuerte Vorhersagen bereitzustellen.</p>



<p><strong>API-Sicherheit und Datenschutz</strong>: Angesichts der wachsenden Besorgnis über Datensicherheit und Datenschutz nimmt man APIs zunehmend unter die Lupe, um sicherzustellen, dass sie den geltenden Datenschutzbestimmungen entsprechen und angemessene Sicherheitsmaßnahmen implementieren.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>APIs sind ein grundlegendes Element moderner Softwareentwicklung und ermöglichen eine effiziente und skalierbare Kommunikation zwischen verschiedenen Anwendungen und Diensten. Durch das Verständnis der verschiedenen API-Typen, Protokolle, Datenformate und Best Practices können Entwickler ihre Anwendungen effektiv erweitern und mit externen Diensten integrieren. Indem man auf API-Dokumentation, Fehlerbehandlung, Ressourcenmanagement und Sicherheit achtet, kann man sicherstellen, dass die API-Integration erfolgreich ist und zur Verbesserung der Gesamtanwendung beiträgt.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/">API &#8211; Nahtlose Verbindungen für Innovationen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/04/20/api-nahtlose-verbindungen-fuer-innovationen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1789</post-id>	</item>
		<item>
		<title>HATEOAS &#8211; Evolution von REST für selbsterklärende APIs und zukunftssichere Web-Anwendungen</title>
		<link>https://ceosbay.com/2023/03/29/erklaerung-hateoas/</link>
					<comments>https://ceosbay.com/2023/03/29/erklaerung-hateoas/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Wed, 29 Mar 2023 20:49:20 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[APIS]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[Fazit]]></category>
		<category><![CDATA[HATEOAS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Hypertext]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[Online]]></category>
		<category><![CDATA[Open-Source]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[src]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1055</guid>

					<description><![CDATA[<p>HATEOAS, kurz für &#8222;Hypertext As The Engine Of Application State&#8220;, ist ein Konzept der REST-Architektur, dass die Interaktion zwischen Client und Server durch die Verwendung von Hypertext steuert. Es ist ein Begriff, den Roy Fielding &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/29/erklaerung-hateoas/">HATEOAS &#8211; Evolution von REST für selbsterklärende APIs und zukunftssichere Web-Anwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>HATEOAS, kurz für &#8222;Hypertext As The Engine Of Application State&#8220;, ist ein Konzept der <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">REST</a>-Architektur, dass die Interaktion zwischen Client und Server durch die Verwendung von Hypertext steuert. Es ist ein Begriff, den Roy Fielding im Rahmen seiner Dissertation bzw. bei der Definition von <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">REST</a> eingeführt hat. Im Wesentlichen bedeutet dies, dass ein Client in der Lage ist, den Zustand der Anwendung zu verändern und den Server zu navigieren, indem er Hypertext-Links folgt, anstatt explizit URLs anzugeben.</p>



<p>Es beschreibt unter anderem eines der wichtigsten <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">REST</a>-Eigenschaften. Da der Architekturstil eine universelle Schnittstelle bieten soll, fordert HATEOAS, dass der <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">REST</a>-Client sich ausschließlich durch das Folgen von URIs (Uniform Resource Identifier) im Hypermedia-Format durch die Webanwendung bewegen kann. Wird dieses Prinzip umgesetzt, benötigt der Client abgesehen von einem grundsätzlichen Verständnis von Hypermedia. Keinerlei weitere Informationen, um mit der Anwendung bzw. dem Server zu kommunizieren.</p>



<p>Die Bereitstellung der einzelnen URIs erfolgt dabei beispielsweise in Form von href- und src-Attributen. Vorausgesetzt es handelt sich um <a href="https://ceosbay.com/2022/12/29/erklaerung-html/" target="_blank" rel="noreferrer noopener">HTML</a>-Dokumente oder -Snippets. Auch durch <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">JSON</a>&#8211; bzw. <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Attribute/-Elemente, die der jeweilige Client automatisch erkennt.</p>



<p>Durch die Umsetzung des HATEOAS-Prinzips lässt sich die Schnittstelle eines <a href="https://ceosbay.com/2023/03/14/erklaerung-json/" target="_blank" rel="noreferrer noopener">REST</a>-Services jederzeit anpassen. Dies kann ein wichtiger Vorteil dieser Architektur gegenüber anderen Applikationsstrukturen sein. Vor allem im direkten Vergleich mit Anwendungen, die man auf Grundlage von SOAP (Simple Object Access Protocol) ausführt.</p>



<p>Das HATEOAS-Konzept ist wichtig, weil es die Flexibilität und Skalierbarkeit von RESTful APIs verbessert. Ohne HATEOAS müsste ein Client spezifische URLs und Endpunkte kennen, um eine Anwendung effektiv zu nutzen. Dies kann jedoch kritisch sein, da URLs sich in der Regel ändern können. Diese Tatsache kann jedoch eben auch zu Fehlern und fehlerhaften Anfragen führen.</p>



<p>Durch die Verwendung von Hypertext-Links wird ein Client in die Lage versetzt, den aktuellen Zustand der Anwendung zu verstehen und dynamisch zu navigieren. Wenn beispielsweise ein Client eine Anfrage an den Server sendet, um eine Liste von Benutzern abzurufen, könnte der Server eine Antwort zurückgeben, die Links zu den einzelnen Benutzerdetails enthält. Der Client kann dann den Link zu einem bestimmten Benutzer folgen, um weitere Informationen abzurufen.</p>



<p>Ein Beispiel ist eine Bestellungsverwaltung in einem Online-Shop. Wenn ein Kunde eine Bestellung aufgeben möchte, kann der Server eine Antwort zurückgeben. Die enthalten wiederum Links zu den verschiedenen Schritten des Bestellvorgangs. Um beispielsweise den Warenkorb anzuzeigen, die Versandadresse anzugeben, Zahlungsinformationen anzugeben, etc. Der Client kann dann den Link zum nächsten Schritt folgen, ohne spezifische URLs oder Endpunkte zu kennen.</p>



<p>HATEOAS ist jedoch nicht nur für die Navigation innerhalb einer Anwendung wichtig. Es ermöglicht auch eine einfache Integration mit anderen Anwendungen und Diensten. Wenn eine API beispielsweise HATEOAS-konform ist, kann man sie von anderen Anwendungen oder Diensten aus leichter nutzen, da sie den Zustand der Anwendung und die verfügbaren Aktionen verstehen können.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Insgesamt verbessert das HATEOAS-Konzept die Flexibilität und Skalierbarkeit von RESTful APIs, indem es Clients in die Lage versetzt, dynamisch zu navigieren und den aktuellen Zustand der Anwendung zu verstehen. Durch die Verwendung von Hypertext-Links werden Anwendungen leichter integrierbar und besser wartbar. Wenn man also eine RESTful API entwirft, sollte man in Betracht ziehen, HATEOAS zu verwenden, um die Nutzbarkeit und die Flexibilität der Anwendung zu optimieren.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/29/erklaerung-hateoas/">HATEOAS &#8211; Evolution von REST für selbsterklärende APIs und zukunftssichere Web-Anwendungen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/29/erklaerung-hateoas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1055</post-id>	</item>
		<item>
		<title>SOAP &#8211; Effiziente Möglichkeit, um Daten zwischen Systemen zu übertragen</title>
		<link>https://ceosbay.com/2023/03/23/erklaerung-soap/</link>
					<comments>https://ceosbay.com/2023/03/23/erklaerung-soap/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Thu, 23 Mar 2023 17:16:00 +0000</pubDate>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Big-Data]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Entwicklung]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Raspberry Pi]]></category>
		<category><![CDATA[Sicherheit]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Body]]></category>
		<category><![CDATA[Child]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Computing]]></category>
		<category><![CDATA[CSV]]></category>
		<category><![CDATA[Daten]]></category>
		<category><![CDATA[Datenaustausch]]></category>
		<category><![CDATA[EAI]]></category>
		<category><![CDATA[Empfänger]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[FTP]]></category>
		<category><![CDATA[Header]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[Information]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JMS]]></category>
		<category><![CDATA[Kind]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Middleware]]></category>
		<category><![CDATA[Object]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[Protocol]]></category>
		<category><![CDATA[Protokoll]]></category>
		<category><![CDATA[Request]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Richtlinien]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Sender]]></category>
		<category><![CDATA[Serverless]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[Transaktion]]></category>
		<category><![CDATA[Unternehmensanforderungen]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Verbindung]]></category>
		<category><![CDATA[Verschlüsselung]]></category>
		<category><![CDATA[W3C]]></category>
		<category><![CDATA[Ware]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[www]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1069</guid>

					<description><![CDATA[<p>SOAP (Simple Object Access Protocol) ist ein Netzwerkprotokoll, mit dessen Hilfe man Daten zwischen Systemen austauschen und RPC’s (Remote Procedure Calls) durchführen kann. SOAP ist ein industrieller Standard des World Wide Web Consortiums (W3C). Es &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/23/erklaerung-soap/">SOAP &#8211; Effiziente Möglichkeit, um Daten zwischen Systemen zu übertragen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>SOAP (Simple Object Access Protocol) ist ein Netzwerkprotokoll, mit dessen Hilfe man Daten zwischen Systemen austauschen und RPC’s (Remote Procedure Calls) durchführen kann. SOAP ist ein industrieller Standard des World Wide Web Consortiums (W3C).</p>



<p>Es stützt sich auf <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> zur Repräsentation der Daten und auf Internet-Protokolle der Transport- und Anwendungsschicht zur Übertragung der Nachrichten. Die gängigste Kombination ist SOAP über https (Hypertext Transfer Protocol) und TCP (Transmission Control Protocol). Man kann SOAP auch über das SMTP (Simple Mail Transfer Protocol) oder JMS (Jakarta Messaging) verwenden.</p>



<p>Die mit der Nachricht übermittelten Nutzdaten man nicht zwingend in <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> senden. Andere Formate wie Base64 oder CSV sind ebenfalls möglich. Seit Version 1.2. nutzt man die Abkürzung SOAP offiziell nicht mehr als Akronym, da es erstens (subjektiv) keineswegs einfach (Simple) ist und zweitens nicht nur dem Zugriff auf Objekte (Object Access) dient.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>SOAP entstand aus der Weiterentwicklung der Spezifikation für <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-RPC im Jahr 1998. Hauptverantwortlicher Software-Entwickler damals Dave Winer und seine Firma UserLand Software in engem Austausch mit Microsoft. Dave Winter ist übrigens auch für <a href="https://ceosbay.com/2022/12/28/erklaerung-rss/" target="_blank" rel="noreferrer noopener">RSS</a> 2.0 verantwortlich. Einen Beitrag über <a href="https://ceosbay.com/2022/12/28/erklaerung-rss/" target="_blank" rel="noreferrer noopener">RSS</a> findet man <a href="https://ceosbay.com/2022/12/28/erklaerung-rss/" target="_blank" rel="noreferrer noopener">hier</a>.</p>



<p>Im Jahr 1999 fand die Veröffentlichung der Version 1.0 von SOAP statt. Dies stellt unter Anderem den Zeitpunkt dar, an dem die Entwicklung mehr Unterstützung fand. Vor allem hat sich IBM im Jahr 2000 der Entwicklung angeschlossen, was dazu führte, dass IBM, Microsoft, DevelopMentor (Don Box) und UserLand Software (Dave Winer) die Spezifikation von SOAP 1.1 beim World Wide Web Consortium (W3C) einreichten. Dabei hat man das Ziel verfolgt, eine Arbeitsgruppe zu gründen, die SOAP weiterentwickeln sollte. Das Ergebnis dieser Arbeitsgruppe ist SOAP Version 1.2, empfing im Juni 2003 die Anerkennung als recommendation (Empfehlung).</p>



<p>Wie zu Beginn des Beitrags erwähnt, hat man SOAP nicht mehr als gebräuchliche(s) Akronym bzw. Abkürzung verstanden. Der Hauptgrund dafür ist die Tatsache, dass sämtliche Deutungen für SOAP, wie Simple Object Access Protocol oder Service Oriented Architecture Protocol, nicht mehr den vollständigen Sinn von SOAP trafen. Dies ermöglichte die Anmeldung von SOAP als Markennamen in den USA.</p>



<h3 class="wp-block-heading">Wie funktioniert SOAP?</h3>



<p>SOAP ist wie zuvor beschrieben, ein Protokoll zum Austausch <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Information-Set-basierter Nachrichten über ein Rechnernetz und hat den Status einer W3C-Empfehlung. Es stellt Regeln für das Nachrichtendesign auf. Regelt, wie Daten in der Nachricht abzubilden und zu interpretieren sind. Es gibt eine Konvention für entfernte Prozeduraufrufe mittels SOAP-Nachrichten vor. SOAP macht keine Vorschriften zur Semantik applikationsspezifischer Daten, die man gegebenenfalls versendet möchte, sondern stellt ein <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> (Siehe meinen Beitrag) zur Verfügung, welches erlaubt, dass man beliebige applikationsspezifische Informationen übertragen kann. </p>



<p>Man kann SOAP für entfernte Prozeduraufrufe ebenso nutzen wie für einfache Nachrichtensysteme. Zum Senden von Nachrichten kann man beliebige Transportprotokolle verwendet. Dazu gehören beispielsweise FTP, SMTP, https oder auch JMS. Aus Gründen der Kompatibilität nutzt man in der Praxis hierzu gängige Netzwerk-Architekturen. Auch ist mittels https die verschlüsselte Übertragung von SOAP-Nachrichten möglich. Das ermöglicht jedoch keine End-to-End-Verschlüsselung. Dies kann man durch WS-Security erreichen. Die Einbindung erfolgt lediglich auf der Ebene der Nachrichten und nicht auf der des unterliegenden Transportprotokolls. Folglich ist es so, dass man das <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> Information Set der SOAP-Anfrage bei Nutzung von https(S) im Body eines https POST Requests als <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a> an eine gegebene URL schickt.</p>



<p>In der Regel setzt man SOAP da ein, wo der direkte Zugang fremder Systeme zu einer Informationsquelle nicht sinnvoll erscheint. Dies kann sowohl an Kompatibilitätsproblemen zwischen verschiedenen Anwendungsarchitekturen liegen aber auch an diversen Sicherheitsaspekten. So kann man einen (partiellen) Zugriff auf eine Datenbank ermöglichen, ohne dem Anwenderprogramm den direkten Zugang zu ermöglichen. Die Menge der ausführbaren Methoden reglementiert und definiert man über die SOAP-Schnittstelle.</p>



<p>Die Kommunikation mit SOAP ermöglicht die Kopplung von Systemen. Der offene Entwurf ermöglicht jedoch lediglich den Aufbau schwach gekoppelter Systeme. Die Flexibilität des Konzeptes erkauft man sich durch die Nachteile beim Übertragungsvolumen und Rechenaufwand. Dies kann teuer werden, da man das <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Dokument beim Sender zunächst aufbaut und anschließend validiert. Das Konzept verfolgt eigentlich das Ziel eines leichtgewichtigen Protokolls. </p>



<p>Doch durch den flexiblen Einsatzbereich führt die zu übertragende Datei eine Reihe von Metadaten mit sich, die bei der Konstruktion des <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Dokuments weiter anwächst. So führt beispielsweise das einfache Versenden von „Wahr“ oder „Falsch“ zu einem Datenvolumen von mehreren hundert Bytes. In einem stark gekoppelten System sollte dafür theoretisch ein Bit reichen. </p>



<p>Durch die Möglichkeit des flexiblen Aufbaus des Dokuments kann man jedoch auch komplexe Transaktionen in einer Anfrage atomar zusammenfassen, während man in stark gekoppelten Systemen hierzu oftmals mehrere Anfragen erstellen muss. Dies verbessert das Nutzlastverhältnis (Nutzdaten zu Meta-Daten) und den Kommunikationsaufwand (für den Aufbau einer Verbindung, nur ein Senden/Empfangen).</p>



<p>SOAP unterscheidet zwischen dem endgültigen Empfänger und den Zwischenempfängern. Dies ermöglicht es, eine Nachricht über verschiedene „Hops“ zu schicken, bei denen man sogar verschiedene Transportprotokolle verwendet. Beispielsweise kann man zum ersten Hop die Nachricht mittels <a href="https://ceosbay.com/2023/03/16/erklaerung-java/" target="_blank" rel="noreferrer noopener">Java</a> Message Service schicken, im Anschluss über E-Mail und schließlich dem Empfänger mittels https weitergeben. Der Absender muss über die Zwischenhops keine Information haben, die Middleware jedoch schon.</p>



<h3 class="wp-block-heading">Wie ist eine SOAP-Nachricht aufgebaut?</h3>



<p>Eine minimale SOAP-Nachricht besteht aus einem Envelope genannten Element, dem man einen lokalen Namen zuweisen muss. Dieses Element referenziert mittels eines Namensraum-Attributes auf https://www.w3.org/2003/05/soap-envelope. Child dieses Elements muss ein Body-Element sein. Optional kann zuvor ein Header-Element stehen. In diesem kann man Meta-Informationen, beispielsweise zum Routing, zur Verschlüsselung oder zu Transaktionsidentifizierung, unterbringen. Im Body-Element sind die eigentlichen Nutzdaten untergebracht. Dies sieht dann folgendermaßen aus:</p>



<pre class="wp-block-code"><code>&lt;?xml version="1.0"?&gt;
&lt;s:Envelope xmlns:s="https://www.w3.org/2003/05/soap-envelope"&gt;
    &lt;s:Header&gt;
    &lt;/s:Header&gt;
    &lt;s:Body&gt;
    &lt;/s:Body&gt;
&lt;/s:Envelope&gt;</code></pre>



<p>Innerhalb des Body-Elements können sowohl Informationen zum Datenaustausch als auch Anweisungen für einen entfernten Prozeduraufruf stehen. Dies ist vom Empfänger entsprechend zu interpretieren.</p>



<p>Im Header gibt man den nächsten Hop (intermediary) und den endgültigen Empfänger (ultimate recipient) an. Ein intermediary kann beispielsweise die Nachricht verschlüsseln, sie loggen oder die Nachricht aufteilen. Ersteres erlaubt es, dass die Anwendungslogik sich nicht um die Sicherheit der Nachricht kümmern muss. Darum kümmert sich die Middleware. Was eine Middleware ist, erkläre ich in einem anderen Beitrag. Die Möglichkeit, dass Intermediaries beliebige Dinge tun können, ermöglicht EAI (Enterprise Application Integration).</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Viele Altsysteme verwenden möglicherweise noch SOAP. In der Vergangenheit war es auch die Lösung schlechthin. Heute ist es eher <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST</a>, welches zum Einsatz kommt und in webbasierten Szenarien häufig als die schnellere Alternative gilt.</p>



<p>Zusammengefasst kann man sagen, dass <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST</a> aus einer Reihe von Richtlinien für eine flexible Implementierung besteht und SOAP ein Protokoll mit spezifischen Anforderungen wie <a href="https://ceosbay.com/2022/12/27/erklaerung-xml/" target="_blank" rel="noreferrer noopener">XML</a>-Messaging ist.</p>



<p><a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST-APIs</a> sind schlank und daher ideal für moderne Anwendungen geeignet, wie das Internet of Things (IoT), mobile Anwendungen und Serverless Computing. SOAP-Webservices bieten zwar integrierte Sicherheit und Transaktions-Compliance, die vielen Unternehmensanforderungen entspricht, doch die Erstellung und Wartung ist wesentlich aufwändiger. Darüber hinaus folgen auch viele öffentlich zugängliche APIsheutzutage, den REST-Richtlinien.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2023/03/23/erklaerung-soap/">SOAP &#8211; Effiziente Möglichkeit, um Daten zwischen Systemen zu übertragen</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2023/03/23/erklaerung-soap/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1069</post-id>	</item>
		<item>
		<title>Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</title>
		<link>https://ceosbay.com/2022/12/26/erklaerung-pact-io/</link>
					<comments>https://ceosbay.com/2022/12/26/erklaerung-pact-io/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Mon, 26 Dec 2022 17:30:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Datenbanken]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[Alternativen]]></category>
		<category><![CDATA[Änderungen]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Broker]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Consumer]]></category>
		<category><![CDATA[Contracts]]></category>
		<category><![CDATA[Dependency]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[pact]]></category>
		<category><![CDATA[Provider]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[Source]]></category>
		<category><![CDATA[tests]]></category>
		<category><![CDATA[Type]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1049</guid>

					<description><![CDATA[<p>Pact ist ein Open Source Code-First-Tool zum Testen von https- und Nachrichtenintegrationen mithilfe von Contract Tests. Diese stellen sicher, dass die Nachrichten zwischen den Anwendungen mit einem gemeinsamen Verständnis übereinstimmen, dass in einem Contract dokumentiert &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/26/erklaerung-pact-io/">Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Pact ist ein <a href="https://ceosbay.com/2022/11/16/erklaerung-open-source/" target="_blank" rel="noreferrer noopener">Open Source</a> Code-First-Tool zum Testen von https- und Nachrichtenintegrationen mithilfe von Contract Tests. Diese stellen sicher, dass die Nachrichten zwischen den Anwendungen mit einem gemeinsamen Verständnis übereinstimmen, dass in einem Contract dokumentiert ist. Die Alternative zu Contract Tests, sind Integrationstests, auf die ich in späteren Beiträgen eingehen werde. Alles in allem sind sie dafür da, um sicherzustellen, dass die Anwendungen korrekt zusammenarbeiten.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>Bis zum Aufkommen der Microservice-Architekturen wurde Software klassischerweise als Monolith entworfen. Dabei gab es keinerlei interne Schnittstellen, da alle Informationen im Monolithen weitergereicht werden konnten. Dementsprechend konnte man sich im Testing nur auf die Stufen Unittests, Integrationstests und End-to-End-Tests konzentrieren. Mit dem Aufkommen der Microservice-Architekturen existiert nun eine Vielzahl an internen Schnittstellen und damit entsteht die Notwendigkeit, diese zu testen. Die Kommunikation der Services untereinander geschieht dabei nicht zufällig, sondern folgt klar definierten Regeln, den sogenannten Schnittstellen-Contracts.</p>



<h3 class="wp-block-heading">Was ist Contract Testing?</h3>



<p>Wie bereits angesprochen, wurde die korrekte Zusammenarbeit von API und Consumer meist durch Integrationstests sichergestellt. Da diese allerdings eine lauffähige Systemlandschaft benötigen, können Fehler erst relativ spät erkannt werden. Bei der Entwicklung ist es jedoch von Vorteil, das Feedback so früh wie möglich zu erhalten. Hinzu kommt, dass Integrationstests eigentlich zum Prüfen der Fachlichkeit dienen. In heutigen Testlandschaften stellen sie strenggenommen &#8222;nur nebenher&#8220; fest, wenn es technische Probleme an der Schnittstelle gibt. Das kann sowohl bedeuten, dass der Aufwand bei der Fehlersuche steigt, weil neben fachlichen Problemen auch technische Ursachen zum Fehlschlag des Tests führen können, als auch der Wartungsaufwand der Tests sich erhöht.</p>



<p>Macht also Sinn, dedizierte Tests zu nutzen, um Fehler an Schnittstellen zu finden. Hier bietet sich Contract Testing, genauer gesagt, Consumer Driven Contract Testing (CDCT) an. Verträge für Softwarekomponenten. Der Zusatz &#8222;Consumer Driven&#8220; bedeutet, der Consumer bestimmt den Vertrag (Aus diesem Grund nennt man es auch Consumer Contract) und das sich die API nach dessen Vorgaben richten muss.</p>



<p>Neben Consumer Contracts gibt es die etwas verbreiteteren Provider Contracts wie WSDL-/XML-Schemata von SOAP-APIs oder Werkzeuge wie Swagger im Kontext von <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/" target="_blank" rel="noreferrer noopener">REST-Services</a>.</p>



<p>Auch wenn sich die Funktionsweise von <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> zu <a href="https://ceosbay.com/2022/11/14/erklaerung-frameworks/" target="_blank" rel="noreferrer noopener">Framework</a> unterscheidet, bleibt die Idee dahinter gleich. Der Provider erfüllt den vom Consumer definierten Vertrag.</p>



<p>Der Vertrag enthält die API samt Parameter und die erwartete (minimale) Antwort. Dabei kann die Beschreibung der Parameter durch den Einsatz von regulären Ausdrücken beliebig präzise sein. So kann der Consumer erwarten, beim Aufruf der API einen unbestimmten String-Parameter oder einen bestimmten String-Parameter aus einem vordefinierten Set zu übergeben. Der zweite Fall ist äußerst hilfreich, wenn der Provider diesen String-Parameter in einen Enum-Wert übersetzt.</p>



<h3 class="wp-block-heading">Der Consumer Test mit Pact</h3>



<p>Sämtliche Verträge zwischen dem Consumer und dem Provider werden in einer JSON-Datei, auch Pact-Datei genannt, definiert. Der Consumer generiert diese Pact-Datei beim Ausführen seiner Pact-Tests und veröffentlicht sie auf dem Pact-Broker. Bei den Tests handelt es sich um gewöhnliche Unit-Tests und sie basieren auf einem der vielen von Pact unterstützen Test-Frameworks wie JUnit oder Jest. In dem Test ruft der Consumer die zu testende API inklusive Parameter auf. Der Aufruf wird von einem Mock-Provider, der vom Pact-Framework zur Verfügung gestellt wird, entgegengenommen. Der Mock-Provider prüft, ob dieser Aufruf mit dem Aufruf aus dem Vertrag übereinstimmt. Sind keine Abweichungen gefunden, antwortet der Mock-Provider mit der minimalen Antwort, die ebenfalls aus dem Vertrag stammt. Der Consumer empfängt in seinem Test die Antwort und vergleicht sie mit seiner Erwartung. Stimmen sie überein, ist der Test erfolgreich. Auf diesem Weg stellt der Pact-Test sicher, dass der Consumer den Aufruf tätigen und die Antwort verarbeiten kann.</p>



<p>Der Pact-Broker ist ein Webserver, der sowohl vom Consumer als auch vom Provider erreichbar sein muss. Er verwaltet die Verträge, indem er sie versioniert ablegt, sie dem Provider zur Verfügung stellt und die Testergebnisse speichert. Die Art und Weise wie der Consumer die Verträge auf dem Pact-Broker veröffentlicht, ist abhängig von der eingesetzten Programmiersprache der Tests und/oder dem eingesetzten Dependendency-Management. Für Maven beispielsweise gibt es ein spezielles Pact-Plugin, das den publish-Goal anbietet, für <a href="https://ceosbay.com/2022/11/12/javascript/" target="_blank" rel="noreferrer noopener">JavaScript</a> existiert hingegen eine spezielle Pact-Version mit dem Namen Pact-js.</p>



<h3 class="wp-block-heading">Der Provider Test</h3>



<p>Analog zum Consumer-Test ist der Provider-Test auch ein Unit-Test und wird im Rahmen der restlichen Unit-Tests ausgeführt. Hierbei werden alle Verträge, die der Provider mit seinen Consumern abgeschlossen hat, vom Pact-Broker heruntergeladen. Der Aufruf der APIs erfolgt lokal, sodass ein Aufruf durch den Consumer simuliert wird. Der Provider verarbeitet den Aufruf und generiert seine Antwort, die mit der erwarteten Antwort aus dem Vertrag verglichen wird. Sollten sie gleich sein, hat der Provider den Pact-Test bestanden. Ansonsten gilt der Test als fehlgeschlagen und das Artefakt des Providers kann nicht ordnungsgemäß gebaut werden. Die Ursache für Fehlschläge sind in den meisten Fällen Code-Änderungen am Provider ohne den Consumer entsprechend angepasst zu haben oder die Erwartungshaltung des Consumers ist fehlerhaft. In beiden Fällen wird durch CDCT ein Missstand aufgedeckt, der erst zur Laufzeit bemerkbar gewesen wäre.</p>



<h3 class="wp-block-heading">Alternativen zu Pact</h3>



<p>Natürlich ist Pact nicht das einzige Framework zum Implementieren von CDCT, wenn auch aktuell eines der am weitesten verbreiteten. Neben Pact existieren noch ein paar weitere Möglichkeiten für das vertragsbasierte Testen wie Postman, Spring Cloud Contract Project oder Dredd, auf die ich noch in zukünftigen Beiträgen eingehen werde. Aus diesem Grund erfolgt auch das Fazit erst, wenn ich ein paar Vergleiche aufstellen kann.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/26/erklaerung-pact-io/">Pact.io &#8211; Für die nahtlose Integrationstestautomatisierung durch Contract Tests</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/26/erklaerung-pact-io/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1049</post-id>	</item>
		<item>
		<title>REST &#8211; Schönheit der einfachen Architektur</title>
		<link>https://ceosbay.com/2022/12/23/erklaerung-rest/</link>
					<comments>https://ceosbay.com/2022/12/23/erklaerung-rest/#respond</comments>
		
		<dc:creator><![CDATA[CEO]]></dc:creator>
		<pubDate>Fri, 23 Dec 2022 19:00:00 +0000</pubDate>
				<category><![CDATA[Cloud]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[Website]]></category>
		<category><![CDATA[7252]]></category>
		<category><![CDATA[Application]]></category>
		<category><![CDATA[Applikation]]></category>
		<category><![CDATA[Architektur]]></category>
		<category><![CDATA[Client]]></category>
		<category><![CDATA[CoAP]]></category>
		<category><![CDATA[Demand]]></category>
		<category><![CDATA[Get]]></category>
		<category><![CDATA[HATEOAS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Mkcol]]></category>
		<category><![CDATA[Move]]></category>
		<category><![CDATA[Parser]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[Protokoll]]></category>
		<category><![CDATA[Rest]]></category>
		<category><![CDATA[Server]]></category>
		<category><![CDATA[SOAP]]></category>
		<category><![CDATA[URI]]></category>
		<category><![CDATA[URL]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[xml]]></category>
		<guid isPermaLink="false">https://ceosbay.com/?p=1033</guid>

					<description><![CDATA[<p>REST &#8211; Representational State Transfer ist ein Paradigma für die Softwarearchitektur von verteilten Systemen, insbesondere für Webservices. Es ist eine Abstraktion der Struktur und des Verhaltens des WWW (World Wide Web). REST hat das Ziel, &#8230;</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST &#8211; Schönheit der einfachen Architektur</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>REST &#8211; Representational State Transfer ist ein Paradigma für die Softwarearchitektur von verteilten Systemen, insbesondere für Webservices. Es ist eine Abstraktion der Struktur und des Verhaltens des WWW (World Wide Web). REST hat das Ziel, einen Architekturstil zu schaffen, der den Anforderungen des modernen Web besser genügt. Dabei unterscheidet sich REST vor allem in der Forderung nach einer einheitlichen Schnittstelle von anderen Architekturstilen.</p>



<p>Der Zweck von REST liegt schwerpunktmäßig auf der Maschine-zu-Maschine-Kommunikation. REST stellt eine einfache Alternative zu ähnlichen Verfahren wie SOAP (Simple Object Access Protocol), WSDL (Web Services Description Language) und dem verwandten Verfahren RPC (Remote Procedure Call) dar. Anders als bei vielen verwandten Architekturen kodiert REST keine Methodeninformation in den URI (Uniform Resource Identifier), da der URI Ort und Namen der Ressource angibt, nicht aber die Funktionalität, die der Web-Dienst zu der Ressource anbietet. Der Vorteil von REST liegt darin, dass im WWW bereits ein Großteil der für REST nötigen Infrastruktur (z. B. Web- und Application-Server, https-fähige Clients, HTML- und XML-Parser, Sicherheitsmechanismen) vorhanden ist und viele Web-Dienste per se REST-konform sind. Eine Ressource kann dabei über verschiedene Medientypen dargestellt werden, auch Repräsentation der Ressource genannt.</p>



<p>So ist ein Online-Dienst, der lediglich unveränderte Seiteninhalte nach dem Internetstandard https anbietet, bereits REST-konform. Dynamisch erzeugte Seiten folgen diesem Paradigma jedoch meistens nicht. So bieten beispielsweise Nachrichtenseiten sich ständig ändernde Informationen mit sowohl unterschiedlichem Format als auch Inhalt an, die nur schwer automatisch verarbeitet werden können. Bliebe das Format unverändert, so wäre eine essenzielle REST-Eigenschaft erfüllt. So ist eine Webseite, auf der ständig die aktuelle Uhrzeit in immer demselben Format abrufbar ist, REST-konform.</p>



<p>Die Bezeichnung „Representational State Transfer“ soll den Übergang vom aktuellen Zustand zum nächsten Zustand (State) einer Applikation verbildlichen. Dieser Zustandsübergang erfolgt durch den Transfer der Daten, die den nächsten Zustand repräsentieren.</p>



<h3 class="wp-block-heading">Kurze Zeitreise</h3>



<p>Das REST-Paradigma entwickelte sich aus dem 1994 von Roy Fielding entworfenen https Object Model. Fielding entwickelte seine Idee von einem einheitlichen Konzept über die Jahre weiter, bis er 2000 den REST-Architekturstil im Rahmen seiner Dissertation (<a href="https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf" target="_blank" rel="noreferrer noopener">Hier der Link zu der Arbeit</a>) veröffentlichte. Das Programmierparadigma der „RESTful Application“ wurde allerdings häufig falsch umgesetzt und findet erst seit 2014 Anklang in der Welt des WWW. In seiner Arbeit geht Fielding dabei auf die verschiedenen Anforderungen ein, die für die Webarchitektur wichtig sind.</p>



<h3 class="wp-block-heading">Wie funktioniert REST?</h3>



<p>Der Architektur-Stil verweist auf sechs Eigenschaften, die ein Dienst haben muss. Dabei ist nicht festgelegt, wie man diese Prinzipien implementieren muss. Fielding beschreibt für jedes Architekturprinzip dessen Vor- und Nachteile. Dabei handelt es sich um Client-Server, Zustandslosigkeit, Caching, Einheitliche Schnittstellen, Mehrschichtige Systeme und optional Code on Demand, auf die ich nachfolgend eingehen werde.</p>



<ul class="wp-block-list">
<li>Client-Server (Es gilt generell die Anforderung, dass alle Eigenschaften der Client-Server-Architektur gelten. Der Server stellt dabei einen Dienst bereit, der bei Bedarf vom Client abgefragt wird. Der Hauptvorteil dieser Anforderung ist die einfache Skalierbarkeit der Server, da diese unabhängig vom Client agieren. Dies ermöglicht des Weiteren eine unterschiedlich schnelle Entwicklung der beiden Komponenten.)<br></li>



<li>Zustandslosigkeit (Jede REST-Nachricht enthält alle Informationen, die für den Server bzw. für den Client notwendig sind, um die Nachricht zu interpretieren. Weder der Server noch die Anwendung soll Zustandsinformationen zwischen zwei Nachrichten speichern. Man spricht daher von einem zustandslosen (englisch: stateless) Protokoll. Jede Anfrage eines Clients an den Server ist insofern in sich geschlossen, als dass sie sämtliche Informationen über den Anwendungszustand beinhaltet, die vom Server für die Verarbeitung der Anfrage benötigt. Zustandslosigkeit in der hier beschriebenen Form begünstigt die Skalierbarkeit eines Webservices. Beispielsweise können eingehende Anfragen im Zuge der Lastverteilung unkompliziert auf beliebige Maschinen verteilt werden, da jede Anfrage in sich geschlossen ist und Anwendungsinformationen somit ausschließlich auf der Seite des Clients vorgehalten werden. Aus diesem Grund ist auf der Seite des Servers keine Sitzungsverwaltung erforderlich. In der Praxis nutzen deswegen viele https-basierte Anwendungen Cookies und andere Techniken, um Zustandsinformationen auf der Client-Seite zu behalten. Weiterhin begünstigt wird die Ausfallsicherheit, weil die Zustandslosigkeit fordert, dass transaktionale Datenübertragung in einem einzigen Seitenaufruf erfolgt. Die Zustandslosigkeit bringt dabei aber den Nachteil mit, dass sich die Netzwerkperformance verschlechtert. Da bei jeder Abfrage alle Informationen zum Interpretieren mitgeschickt werden müssen, sind aufwendigere Abfragen nötig, als wenn sich der Server die Interaktionen merken würde.)<br></li>



<li>Caching (https-Caching soll genutzt werden, wobei aber gilt: Eine Anfrage, die nicht gestellt werden muss, ist die schnellste Anfrage. Fielding führt dabei den Nachteil auf, dass der Client auf veraltete Cache-Daten zurückgreifen könnte, statt die neue Ressource abzufragen. Wir kennen dies beispielsweise, wenn wir an einer Website unsere Änderungen vorgenommen haben aber die aktualisierten Informationen nach der Synchronisierung mit dem Server nicht richtig angezeigt werden bzw. lediglich die alten Informationen)<br></li>



<li>Einheitliche Schnittstelle (Dies ist das Hauptunterscheidungsmerkmal aller weiteren Architekturstile. Dabei besteht diese aus vier weiteren Eigenschaften.)</li>
</ul>



<ol class="wp-block-list" type="1">
<li>Die Adressierbarkeit von Ressourcen, bei der jede Information, die über einen URI kenntlich gemacht wird, als Ressource gekennzeichnet wird. Jeder REST-konforme Dienst eine eindeutige Adresse hat und dem Uniform Resource Locator (URL). Diese „Straße und Hausnummer im Netz“ standardisiert den Zugriffsweg zum Angebot eines Webservices für eine Vielzahl von Anwendungen (Clients). Eine konsistente Adressierbarkeit erleichtert es außerdem, einen Webservice als Teil eines Mashups weiterzuverwenden.<br></li>



<li>Repräsentationen zur Veränderung von Ressourcen, wodurch die unter einer Adresse zugänglichen Dienste unterschiedliche Darstellungsformen (Repräsentationen) haben können. Ein REST-konformer Server kann je nachdem, was die Anwendung anfordert, verschiedene Repräsentationen einer Ressource ausliefern, z. B. in verschiedenen Sprachen oder Formaten (HTML, JSON oder XML) oder auch die Beschreibung oder Dokumentation des Dienstes. Die Veränderung einer Ressource (also deren aktuellen Status) soll nur über eine Repräsentation erfolgen.<br></li>



<li>Selbstbeschreibende Nachrichten, REST-Nachrichten sollen selbstbeschreibend sein. Dazu zählt u. a. die Verwendung von Standardmethoden. Über diese Standardmethoden lassen sich Ressourcen manipulieren.<br></li>



<li>„Hypermedia as the Engine of Application State“ (HATEOAS)&nbsp;laut Fielding die wichtigste Eigenschaft</li>
</ol>



<p>Ziel ist die Einheitlichkeit der Schnittstelle und somit ihre einfache Nutzung.&nbsp;</p>



<ul class="wp-block-list">
<li>Mehrschichtige Systeme, bei dem die Systeme mehrschichtig aufgebaut sein sollen. Dadurch reicht es, dem Anwender lediglich eine Schnittstelle anzubieten. Dahinterliegende Ebenen können verborgen bleiben und somit die Architektur insgesamt vereinfachen. Vorteile dabei sind die bessere Skalierbarkeit der Server, sowie eine mögliche Abkapselung durch Firewalls. Durch Cache-Speicher an den Grenzen (z.B. vom Server zum Web) steigert man die Effizienz der Anfragen (Siehe Caching).<br></li>



<li>Code on Demand, wobei diese Forderung von Fielding optional ist. Unter Code on Demand versteht man die Übertragung an den Client Code erst im Bedarfsfall. Folglich zur lokalen Ausführung.&nbsp;Ein Beispiel hierfür wäre die Übertragung von JavaScript-Code bei einer HTML-Repräsentation.</li>
</ul>



<p>Folglich kommt für die Umsetzung des REST-Paradigmas ein zustandsloses Client-Server-Protokoll zum Einsatz. Als Anwendungsschicht-Protokolle werden hauptsächlich https und https eingesetzt. Dies liegt unter anderem daran, dass sich diese im WWW etabliert haben, über einen vergleichsweisen einfachen Aufbau verfügen und mit so gut wie jeder Firewall kompatibel sind. REST vereinheitlicht die Schnittstelle zwischen Systemen auf eine überschaubare und bezüglich des zu erwartenden Verhaltens standardisierte Menge von Aktionen. Welche Aktionen dies sind, ist in REST nicht festgelegt aber alle Aktionen sind allgemein definiert. In der Regel durch die verwendeten Protokolle der Anwendungsschicht.</p>



<p>Während REST als Abstraktion des WWW keine spezielle Implementierung und kein spezielles Protokoll fordert, ist doch zu beobachten, dass fast ausschließlich https zum Einsatz kommt. Dadurch werden auch die Menge der Aktionen festgelegt.</p>



<p>Wird über https zugegriffen, so gibt die verwendete https-Methode, darunter GET, POST, PUT und DELETE, an, welche Operation des Dienstes gewünscht ist. https schreibt vor, dass GET „safe“ (sicher) sein muss, was bedeutet, dass diese Methode nur Informationen beschafft und keine sonstigen Effekte verursacht. Die Methoden GET, HEAD, PUT und DELETE müssen laut https-Spezifikation idempotent (dasselbe) sein, was in diesem Zusammenhang bedeutet, dass das mehrfache Absenden der gleichen Anforderung sich nicht anders auswirkt als ein einzelner Aufruf. Abhängig von der Implementierung können noch weitere https-Befehle unterstützt werden. Dazu gehören COPY, MOVE, MKCOL, LOCK und UNLOCK des WebDAV-Protokolls, sowie LINK und UNLINK aus RFC 2068. Bei der Kommunikation über UDP kann zudem das CoAP aus RFC 7252 statt https eingesetzt werden, welches leicht abweichende Bedeutungen für GET, POST, PUT und DELETE besitzt.</p>



<h3 class="wp-block-heading">Fazit</h3>



<p>Die meisten Unternehmen verwenden den REST-Architekturstil für die Entwicklung / Implementierung von Webdiensten, da es sich um eine einfache und benutzerfreundliche Oberfläche handelt, die weniger Schulung für die vorhandenen / neuen Mitglieder des Projekts erfordert. Unternehmen erwägen REST zusammen mit ihren vorhandenen Webdiensten.</p>
<p>Der Beitrag <a href="https://ceosbay.com/2022/12/23/erklaerung-rest/">REST &#8211; Schönheit der einfachen Architektur</a> erschien zuerst auf <a href="https://ceosbay.com">CEOsBay</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ceosbay.com/2022/12/23/erklaerung-rest/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1033</post-id>	</item>
	</channel>
</rss>
