17 years after Fieldings paper REST is at its peak. Every interface has to use REST. But there are many problems in using and designing REST APIs. This sessions describes the problems and encourages to use besides REST other means of communication.
7. www.predic8.de
REST Vorteile
Niedrige Einstiegshürde
Tools
Keine speziellen Werkzeuge notwendig
• Kein IDL Compiler, WSDL2JAVA, ...
Gute Tool Unterstützung
• Browser ,Curl, Postman, Insomnia, Frameworks ...
Nutzt das Web
Firewalls
Skalierbar
Caching
Geneignet für
Public APIs
Integration
Dokumente
• Große
• Verschiedene Inhalte
REST rocks!
8. www.predic8.de
REST Probleme
#1 Kein „Standard“
#2 Design ist kompliziert
#3 Fehlersuche ist aufwendig
#4 Hypermedia wird nicht genutzt
#5 Verwendung von API Beschreibungen
14. www.predic8.de
REST Probleme
#1 Kein „Standard“
#2 Design ist kompliziert
#3 Fehlersuche ist aufwendig
#4 Hypermedia wird nicht genutzt
#5 Verwendung von API Beschreibungen
16. www.predic8.de
POST /produkte/
PUT /produkte/65
PATCH /produkte/65
Resource GET POST PUT DELETE
/articles/ List aller Artikel 201 Created
Neuer Artikel
erzeugen*
Location
Header setzen!
400 Bad
Request
Alle Artikel
löschen
/articles/7 Details zu
einem Artikel
400 Bad
Request
Artikel
erzeugen* oder
ändern
Artikel löschen
?
22. www.predic8.de
Prozesse &
Nicht-Ressource Anfragen
Ressourcen passen irgendwie nicht richtig oder sind uninteressant
Beispiele
Errechnen
Umwandeln
Prozess als Ressource oft umständlich
/order/4/actions/cancel
/antrag/4354/freigabe
/calculator/compute
23. www.predic8.de
REST Design Probleme
Mehrere Lösungen für ein Problem
REST ist nicht einfach, wenn die Aufgaben größer werden
Styleguide ist notwenig
Auswahl & Erstellung sind schwer
Es gibt keinen perfekten Styleguide
Auswirkung vieler Designentscheidungen nicht sofort erkennbar!
Viel Interpretation und Kreativität ist gefordert
Man beschäftigt sich mehr mit der Auslegung von REST als mit der
Fachlichkeit
Welches REST API hat ein gutes Design?
28. www.predic8.de
REST Probleme
#1 Kein „Standard“
#2 Design ist kompliziert
#3 Fehlersuche ist aufwendig
#4 Hypermedia wird nicht genutzt
#5 Verwendung von API Beschreibungen
29. www.predic8.de
Wo schau ich nach wenn etwas nicht geht?
Methode
Pfad
Query Parameters
Headers:
Content-Type
Accept
Body
Status Code
Ok: HTTP ist immer noch einfacher zu debuggen als z.B. CORBA
30. www.predic8.de
REST Probleme
#1 Kein „Standard“
#2 Design ist kompliziert
#3 Fehlersuche ist aufwendig
#4 Hypermedia wird nicht genutzt
#5 Verwendung von API Beschreibungen
40. www.predic8.de
REST Probleme
#1 Kein „Standard“
#2 Design ist kompliziert
#3 Fehlersuche ist aufwendig
#4 Hypermedia wird nicht genutzt
#5 Verwendung von API Beschreibungen
41. www.predic8.de
Code First mit Swagger
Swagger
mvn deploy
MVN
client.jar
Dependency
call
Projekt wird nur
gebaut. Kein
eigener Code
notwendig.
Code
Generation
Server Stub wird um
die Implementierung
erweitert
47. www.predic8.de
Problem Swagger
Erst mach ich mir die Mühe und erstelle ein API mit Hypermedia und
dann wird die nur über Swagger generierte Clients im RPC Stil genutzt
genutzt!
REST kann für Swagger nichts!
Swagger kills Hypermedia
+
• Swagger hat Vorteile
• HATEOAS hat Vorteile
• Swagger + HATEOAS gleichzeitig
• => Nachteil
51. www.predic8.de
GRPC
RPC Framework
Basiert auf Google Protocol Buffers
Verwendet IDL
Protocol Buffers als Message Format
• JSON ist auch möglich
Art neues CORBA
HTTP/2 Transport
Geeignet für Mobile
Google stellt auf GRPC für Microservices um
Sprachunterstützung
Android, C++,C#, Go, Java, Node, Objective-C, PHP, Python, Ruby
Quellen
https://grpc.io
56. www.predic8.de
Fazit
REST ist ideal für Public APIs mit überschaubaren
Ressourcen
Es gibt bereits große Investitionen in REST!
REST muss nicht der einzige Ansatz für Remoting
sein
Es gibt auch einen Platz für Messaging, RPC & Queries
58. www.predic8.de
Quellen
Architectural Styles and the Design of Network-based Software
Architectures, Roy Thomas Fielding
https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
RFC 7230, Hypertext Transfer Protocol (HTTP/1.1): Message
Syntax and Routing
https://tools.ietf.org/html/rfc7230
RFC 7231, Hypertext Transfer Protocol (HTTP/1.1): Semantics and
Content
https://tools.ietf.org/html/rfc7231
White House Web API Standards
https://github.com/WhiteHouse/api-standards
Haufe API Style Guide
https://github.com/Haufe-Lexware/api-style-guide
RESTful APIs, the big lie, Michael S. Mikowski
https://mmikowski.github.io/the_lie/
Status Dogs
https://httpstatusdogs.com/
Editor's Notes
Wir reden heute über REST API
Interfaces zw. Client und Server zw. Maschine und Maschine