REST APIs liegen im Trend und werden daher in vielen Projekten eingesetzt. REST besitzt Schwächen, die bei falschem Einsatz schnell sichtbar werden. Dieser Vortrag zeigt die Probleme und Schächen von REST und beschreibt die Alternativen: GraphQL, JSON Path und GRPC.
1. REST: Versprechen,
Wirklichkeit & die
Alternativen GraphQL,
gRPC, JSON RPC...
Version 1.2 vom 17.4.2017
Thomas Bayer
bayer@predic8.de
@thomasub
2. REST
#1 ist zu technisch
#2 ist kein Standard
#3 ist datengetrieben
#4 Design ist kompliziert
#5 fehlen Hypermedia Clients
#6 wird von Swagger bedroht!
9. REST
#1 ist zu technisch
#2 ist kein Standard
#3 ist datengetrieben
#4 Design ist kompliziert
#5 fehlen Hypermedia Clients
#6 wird von Swagger bedroht!
28. REST
#1 ist zu technisch
#2 ist kein Standard
#3 ist datengetrieben
#4 Design ist kompliziert
#5 fehlen Hypermedia Clients
#6 wird von Swagger bedroht!
30. 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
?
34. 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
35. 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?
36. API Design: The Musical
Quelle: https://events.drupal.org/losangeles2015/sessions/api-design-musical
Play
57. Wer URIs dokumentiert macht RPC!
Fixe URIs führen zu starker Kopllung!
Mediatypes erfordern Dokumentation
Fielding, Kapitel 5!
58. Contract 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
Client
59.
60.
61. • Das Remoting ist komplett
verborgen
• RPC sieht genauso aus
81. Chunky or Chatty?
Over Fetching
Mehr Daten als notwendig werden übertragen
=> Chunky
Under Fetching
Nicht genug Daten werden übertragen
• => Subressourcen oder Relationen müssen verfolgt werden
• => Chatty
Quelle:
• https://pixabay.com/de/blabla-tafel-belanglosigkeit-1432922/
• https://pixabay.com/de/katze-dunkel-kaffee-faul-liegen-1351612/
87. 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
Features
Streaming
Sprachunterstützung
Android, C++,C#, Go, Java, Node, Objective-C, PHP, Python, Ruby
Quelle
https://grpc.io
94. „The REST interface is designed to be efficient for large-
grain hypermedia data transfer, optimizing for the
common case of the Web, but resulting in an interface that
is not optimal for other forms of architectural
interaction.“
Quelle: https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Fielding in 5.1.5 Uniform Interface
99. 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/
Notes de l'éditeur
Technik ist verborgen
Wir reden heute über REST API
Interfaces zw. Client und Server zw. Maschine und Maschine
Sollen Anwendungsentwickler oder Schnittstellendesigner die HTTP Spec auswendig lernen?
2000
Kapitel 5: REST
Kapitel 6: Probleme bei REST auf HTTP übertragen
Steht alles was ich wissen muss, wenn ich REST richtig mache!
In den Köpfen ist POST zum Anlegen
Ich habs Probiert idempotentes Anlegen mit PUT wird nicht akzeptiert und führt immer wieder zu Diskussion
Erfahrung der Kommunity und Beispiele in Produkten.
Auslegung: Relgion
Notwendig, zum Teil wiedersprüchlich
Welche Methode, Wie Life-Cycle?
REST ist nicht uniform!
Ab 5:28 abspielen!
Kunden wollen URIs modellieren, kein Interesse am Design der Daten
Alle einverstanden
Welche API verarbeitet links in Repräsentationen, die von Clients übergeben werden?
Von irgendwo kenne ich das
API Beschreibung von CORBA/Web Services
REST ist das verfolgen von Links
REST kann für Swagger nichts!
Hypermedia war nie lebendig
Nicht Messaging, aber da gibt es auch Alternativen
RPC Protokoll
Designed to be simple
Transport Agnostisch
HTTP, TCP, Memory
Positional & Named Parameters
Batches
Spezifikation
JSON-RPC 2.0 ( März 2010)
In 10 Minuten gelesen
Pfeil normal wagrecht, aber um Zeit zu illustrieren nach unten
Verzögerung spielt bei Mobile die größte Rolle
Pfeil normal wagrecht, aber um Zeit zu illustrieren nach unten
Verzögerung spielt bei Mobile die größte Rolle
Chattyhttps://pixabay.com/de/blabla-tafel-belanglosigkeit-1432922/