Skip to content

REST beyond the obvious (Oliver Drotbohm)

MaxSimon95 edited this page Feb 17, 2019 · 3 revisions

Rolle von JPA

JPA (Java Persistence API) wird verwendet um das abstrahierte Geschäftsmodell in Spring Boot als Framework abzubilden

Referenzierung von Geschäftsobjekten

Es sollte keine Komplett-Referenzierung auf andere Entitäten geben. Vielmehr sollte immer nur auf die ID eines Geschäftsobjektes/Aggregats-Entität verwiesen werden um bei Datenverkehr, beispielsweise über JSON, eine Kaskadierung von aufeinander referenzierenden Objekten zu verhindern.

Explizitheit

DDD (Domain Driven Design)sieht es hauptsächlich vor Dinge explizit zu machen - nicht implizit. Beispielsweise einen ZIP-Code nicht als Integer verwenden, sondern besser als als explizites Konzept Zip-Code.

Geschäftslogik von Clients entkoppeln

Um die Wartbarkeit, Austauschbarkeit und Kompatibilität von Clients zu erhöhen, wird empfohlen das Domänenwissen möglichst von den Clients zu entfernen. Stattdessen soll das Protokollwissen der Clients, beispielsweise über HAL erhöht werden. Diese standardisierten Notationen verändern sich seltener als Geschäftsvorgänge, weshalb Clients seltener und unabhängiger von sich ändernden Prozessen ein Update erfahren müssen.

HAL als Lösungsmöglichkeit

HAL steht für Hypertext Application Language und dient durch eine standardisierte Darstellung der Bekanntmachung von Links via JSON oder XML. Eine Übersicht allgemein gängiger Links, wie sie auch in HTTP Headern verwendet werden, sind auf der Seite der IANA zu finden.

Hypermedia als State Machine (example: Restbucks)

Analog zu einem Geschäftsprozess in der realen Welt, wo einem Kunden alle seine Möglichkeiten dargelegt werden, werden einem Client über die REST API seine Optionen bekannt gegeben. Diese Optionen ergeben sich aus dem Zustand des angestoßenen Prozesses (Applikationsschicht, Geschäftslogik) und werden über ein vorher vereinbartes Protokoll kommuniziert (Hypermedia). Da in Webanwendungen typischerweise REST-Schnittstellen definiert werden, wurde vorgeschlagen, sich ein Konzept wie HAL zunutze zu machen und darüber alle Ressourcen der Serverseite dem Client bekannt zu machen. Damit können, bei geschickt gewähltem Design der Schnittstelle, Statusänderungen einer Geschäftslogik durch Benutzerverhalten entkoppelt werden von der Darstellung in einer Clientanwendung.

state_links_presentation

Clone this wiki locally