

# REL03-BP03 Stellen Sie Serviceverträge bereit per API
<a name="rel_service_architecture_api_contracts"></a>

Dienstleistungsverträge sind dokumentierte Vereinbarungen zwischen API Herstellern und Verbrauchern, die in einer maschinenlesbaren API Definition definiert sind. Eine Strategie zur Versionierung von Verträgen ermöglicht es den Verbrauchern, die vorhandenen weiterhin zu verwenden API und ihre Anwendungen auf eine neuere zu migrieren, API sobald sie bereit sind. Die Bereitstellung durch den Produzenten kann jederzeit erfolgen, solange der Vertrag eingehalten wird. Serviceteams können den Technologie-Stack ihrer Wahl verwenden, um den API Vertrag zu erfüllen. 

 **Gewünschtes Ergebnis:** Anwendungen, die mit serviceorientierten Architekturen oder Microservice-Architekturen erstellt wurden, können unabhängig voneinander betrieben werden und verfügen gleichzeitig über eine integrierte Laufzeitabhängigkeit. Änderungen, die an einem API Verbraucher oder Hersteller vorgenommen werden, beeinträchtigen nicht die Stabilität des Gesamtsystems, wenn beide Seiten einen gemeinsamen Vertrag einhalten. API Komponenten, die über den Service kommunizieren, APIs können unabhängige funktionale Releases durchführen, Upgrades auf Laufzeitabhängigkeiten durchführen oder ein Failover zu einem Disaster Recovery (DR) -Standort durchführen, ohne sich gegenseitig zu beeinträchtigen. Darüber hinaus können spezialisierte Services unabhängig voneinander skaliert werden und können dabei den Ressourcenbedarf absorbieren, ohne dass andere Services ebenfalls skaliert werden müssen. 

 **Typische Anti-Muster:** 
+  Ein Dienst wird APIs ohne stark typisierte Schemas erstellt. Dies führt dazuAPIs, dass sie nicht zum Generieren von API Bindungen und Nutzlasten verwendet werden können, die nicht programmgesteuert validiert werden können. 
+  Es wird keine Versionierungsstrategie angewendet, die API Verbraucher dazu zwingt, Updates und Releases vorzunehmen, andernfalls scheitern sie, wenn sich die Serviceverträge weiterentwickeln. 
+  Fehlermeldungen, die Details der zugrundeliegenden Service-Implementierung preisgeben, anstatt Integrationsfehler im Kontext und in der Sprache der Domain zu beschreiben. 
+  Keine Nutzung von API Verträgen zur Entwicklung von Testfällen und API Scheinimplementierungen, um unabhängige Tests von Servicekomponenten zu ermöglichen. 

 **Vorteile der Einführung dieser bewährten Methode:** Verteilte Systeme, die aus Komponenten bestehen, die über API Serviceverträge miteinander kommunizieren, können die Zuverlässigkeit verbessern. Entwickler können potenzielle Probleme frühzeitig im Entwicklungsprozess catch, indem sie während der Kompilierung eine Typprüfung durchführen, um sicherzustellen, dass Anfragen und Antworten dem API Vertrag entsprechen und die erforderlichen Felder vorhanden sind. APIVerträge bieten eine klare, sich selbst dokumentierende Schnittstelle für eine bessere Interoperabilität zwischen verschiedenen Systemen APIs und Programmiersprachen und sorgen für eine bessere Interoperabilität. 

 **Risikostufe bei fehlender Befolgung dieser bewährten Methode:** Mittel 

## Implementierungsleitfaden
<a name="implementation-guidance"></a>

 Sobald Sie Geschäftsbereiche identifiziert und Ihre Workload-Segmentierung festgelegt haben, können Sie Ihren Service weiterentwickeln. APIs Definieren Sie zunächst maschinenlesbare Serviceverträge für APIs und implementieren Sie anschließend eine API Versionierungsstrategie. Wenn Sie bereit sindREST, Dienste über gängige Protokolle wie GraphQL oder asynchrone Ereignisse zu integrieren, können Sie AWS Dienste in Ihre Architektur integrieren, um Ihre Komponenten mit stark API typisierten Verträgen zu integrieren. 

 **AWS Dienste für Serviceverträge API** 

 Integrieren Sie AWS Services wie [Amazon API Gateway](https://aws.amazon.com/api-gateway/) und [Amazon EventBridge](https://aws.amazon.com/eventbridge/) in Ihre Architektur [AWS AppSync](https://aws.amazon.com/appsync/), um API Serviceverträge in Ihrer Anwendung zu verwenden. Amazon API Gateway unterstützt Sie bei der direkten Integration mit nativen AWS Diensten und anderen Webdiensten. APIGateway unterstützt die [APIOpen-Spezifikation](https://github.com/OAI/OpenAPI-Specification) und Versionierung. AWS AppSync ist ein verwalteter [GraphQL-Endpunkt](https://graphql.org/), den Sie konfigurieren, indem Sie ein GraphQL-Schema definieren, um eine Serviceschnittstelle für Abfragen, Mutationen und Abonnements zu definieren. Amazon EventBridge verwendet Ereignisschemas, um Ereignisse zu definieren und Codebindungen für Ihre Ereignisse zu generieren. 

## Implementierungsschritte
<a name="implementation-steps"></a>
+  Definieren Sie zunächst einen Vertrag für Ihren. API Ein Vertrag drückt die Fähigkeiten eines aus und API definiert stark typisierte Datenobjekte und Felder für die API Eingabe und Ausgabe. 
+  Bei der Konfiguration APIs in API Gateway können Sie Open API Specifications für Ihre Endgeräte importieren und exportieren. 
  +  Der [Import einer offenen API Definition](https://docs.aws.amazon.com/apigateway/latest/developerguide/import-edge-optimized-api.html) vereinfacht die Erstellung Ihrer Definition API und kann als Codetools wie [AWS Serverless Application Model](https://aws.amazon.com/serverless/sam/)und [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk/)in die AWS Infrastruktur integriert werden. 
  +  Das [Exportieren einer API Definition](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-export-api.html) vereinfacht die Integration mit API Testtools und bietet dem Servicenutzer eine Integrationsspezifikation. 
+  Sie können APIs GraphQL definieren und verwalten, AWS AppSync indem Sie [eine GraphQL-Schemadatei definieren](https://docs.aws.amazon.com/appsync/latest/devguide/designing-your-schema.html), um Ihre Vertragsschnittstelle zu generieren und die Interaktion mit komplexen REST Modellen, mehreren Datenbanktabellen oder älteren Diensten zu vereinfachen. 
+  [AWS Amplify](https://aws.amazon.com/amplify/)Projekte, die integriert sind, AWS AppSync generieren stark typisierte JavaScript Abfragedateien zur Verwendung in Ihrer Anwendung sowie eine AWS AppSync GraphQL-Clientbibliothek für [Amazon DynamoDB-Tabellen](https://aws.amazon.com/dynamodb/). 
+  Wenn Sie Serviceereignisse von Amazon nutzen EventBridge, entsprechen Ereignisse Schemas, die bereits in der Schemaregistrierung vorhanden sind oder die Sie mit der Open API Spec definieren. Mit einem in der Registrierung definierten Schema können Sie auch Client-Bindungen aus dem Schemavertrag generieren, um Ihren Code in Ereignisse zu integrieren. 
+  Erweiterung oder Versionierung Ihrer. API Das Erweitern von API ist eine einfachere Option, wenn Felder hinzugefügt werden, die mit optionalen Feldern oder Standardwerten für Pflichtfelder konfiguriert werden können. 
  +  JSONbasierte Verträge für Protokolle wie REST GraphQL können sich gut für eine Vertragsverlängerung eignen. 
  +  XMLVerträge, die auf Protokollen basieren, SOAP sollten mit den Nutzern der Dienste getestet werden, um festzustellen, ob eine Vertragsverlängerung durchführbar ist. 
+  Bei der Versionierung einer sollten Sie die Implementierung einer Proxy-Versionierung in Betracht ziehenAPI, bei der eine Fassade zur Unterstützung von Versionen verwendet wird, sodass die Logik in einer einzigen Codebasis verwaltet werden kann. 
  +  Mit API Gateway können Sie [Anfragen- und Antwortzuordnungen](https://docs.aws.amazon.com/apigateway/latest/developerguide/request-response-data-mappings.html#transforming-request-response-body) verwenden, um die Übernahme von Vertragsänderungen zu vereinfachen, indem Sie eine Fassade einrichten, um Standardwerte für neue Felder bereitzustellen oder entfernte Felder aus einer Anfrage oder Antwort zu entfernen. Mit diesem Ansatz kann der zugrunde liegende Service mit einer einzelnen Codebasis betrieben werden. 

## Ressourcen
<a name="resources"></a>

 **Zugehörige bewährte Methoden:** 
+  [REL03-BP01 Wählen Sie, wie Sie Ihre Arbeitslast segmentieren möchten](rel_service_architecture_monolith_soa_microservice.md) 
+  [REL03-BP02 Entwickeln von Services, die sich auf bestimmte Geschäftsdomänen und Funktionen konzentrieren](rel_service_architecture_business_domains.md) 
+  [REL04-BP02 Lose gekoppelte Abhängigkeiten implementieren](rel_prevent_interaction_failure_loosely_coupled_system.md) 
+  [REL05-BP03 Steuerung und Begrenzung von Wiederholungsaufrufen](rel_mitigate_interaction_failure_limit_retries.md) 
+  [REL05-BP05 Client-Timeouts festlegen](rel_mitigate_interaction_failure_client_timeouts.md) 

 **Zugehörige Dokumente:** 
+ [Was ist eine API (Anwendungsprogrammierschnittstelle)?](https://aws.amazon.com/what-is/api/)
+ [Implementierung von Microservices auf AWS](https://docs.aws.amazon.com/whitepapers/latest/microservices-on-aws/microservices-on-aws.html)
+ [Microservice Trade-Offs](https://martinfowler.com/articles/microservice-trade-offs.html)
+ [ Microservices - a definition of this new architectural term ](https://www.martinfowler.com/articles/microservices.html)
+ [Microservices auf AWS](https://aws.amazon.com/microservices/)
+ [Ich arbeite mit API Gateway-Erweiterungen für Open API](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-swagger-extensions.html)
+ [APIOpen-Spezifikation](https://github.com/OAI/OpenAPI-Specification)
+ [ GraphQL: Schemata und Typen ](https://graphql.org/learn/schema/)
+ [ EventBridge Amazon-Codebindungen](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema-code-bindings.html)

 **Zugehörige Beispiele:** 
+ [Amazon API Gateway: Konfiguration eines REST API mit Open API](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-import-api.html)
+ [CRUDAnwendung Amazon API Gateway to Amazon DynamoDB mithilfe von Open API](https://serverlessland.com/patterns/apigw-ddb-openapi-crud?ref=search)
+ [Moderne Anwendungsintegrationsmuster in einem serverlosen Zeitalter: API Gateway Service Integration](https://catalog.us-east-1.prod.workshops.aws/workshops/be7e1ee7-b91f-493d-93b0-8f7c5b002479/en-US/labs/asynchronous-request-response-poll/api-gateway-service-integration)
+ [Implementierung einer Header-basierten API Gateway-Versionierung mit Amazon CloudFront](https://aws.amazon.com/blogs/compute/implementing-header-based-api-gateway-versioning-with-amazon-cloudfront/)
+ [AWS AppSync: Building a client application ](https://docs.aws.amazon.com/appsync/latest/devguide/building-a-client-app.html#aws-appsync-building-a-client-app)

 **Zugehörige Videos:** 
+ [Verwenden von Open API in AWS SAM zur Verwaltung von Gateway API](https://www.youtube.com/watch?v=fet3bh0QA80)

 **Zugehörige Tools:** 
+ [APIAmazon-Gateway](https://aws.amazon.com/api-gateway/)
+ [AWS AppSync](https://aws.amazon.com/appsync/)
+ [Amazon EventBridge](https://aws.amazon.com/eventbridge/)