O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

REST Problems

339 visualizações

Publicada em

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.

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

REST Problems

  1. 1. REST Problems Version 1.1 vom 2.10.2017 Thomas Bayer bayer@predic8.de @thomasub
  2. 2. www.predic8.de Einführung Probleme Alternativen
  3. 3. www.predic8.de Server Remote Procedure Call (!= REST) product = produktService.find( 65) Funktion Parameter Service Produkt Service 64 65 66 Client Produkt Service Stub find( 65)
  4. 4. www.predic8.de Server REST GET /produkte/65 /produkte/64 /produkte/65 /produkte/66 Client HTTP Client Repräsentation { name: ... } Kopie! Ressource HttpClient client = new HttpClient(); GetMethod method = new GetMethod("http://api.predic8.de/shop/products/65"); method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); int sc = client.executeMethod(method); if (sc != HttpStatus.SC_OK) { System.err.println(method.getStatusLine()); } byte[] responseBody = method.getResponseBody(); 200 OK
  5. 5. www.predic8.de Quelle: https://trends.google.de/trends/explore?date=all&q=%2Fm%2F03nsxd,%2Fm%2F0315s4 SOA & REST Hype Cycle
  6. 6. www.predic8.de Quelle: https://trends.google.de/trends/explore?date=all&q=%2Fm%2F03nsxd,%2Fm%2F0315s4 SOA & REST Hype Cycle REST Ressource!
  7. 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. 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
  9. 9. www.predic8.de Die Bibel HTTP Spezifikationen sind verbindlich
  10. 10. www.predic8.de Quellen: https://www.ics.uci.edu/~fielding/pubs/dissertation/fielding_dissertation.pdf https://de.wikipedia.org/wiki/Roy_Fielding#/media/File:Roy_Fielding.jpg Wichtige Schrift für REST Fans! Geniales Papier über die Architektur des Webs, aber nichts Konkretes zu REST APIs. Fielding Dissertation
  11. 11. www.predic8.de Bhagavad Gita Quelle: https://de.wikipedia.org/wiki/Bhagavad_Gita#/media/File:Bhagavad_Gita,_a_19th_century_manuscript.jpg Wichtige Schrift für Yogis! Enthält aber nichts Konkretes zu den Yoga Übungen!
  12. 12. www.predic8.de Guidelines • Whitehouse • Twitter • Haufe Lexware • ...
  13. 13. www.predic8.de Auslegungssache Quellen: https://mmikowski.github.io/the_lie/ https://stackoverflow.com/questions/5948659/when-should-i-use-a-trailing-slash-in-my-url https://stackoverflow.com/questions/630453/put-vs-post-in-rest
  14. 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
  15. 15. www.predic8.de GET /products oder GET /products/ ?
  16. 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 ?
  17. 17. www.predic8.de Subresouces /products/11/photo /kunden/65/vertraege/ /vendors/32/products/ /kunden/65/vertraege/6/policy/24 ?
  18. 18. www.predic8.de /shop/products/65 /shop/products/65?limit=10 /shop/products/65?limit=10 /shop/products;limit=10/ { “Limit“: 10 } Parameter ?Limit: 10
  19. 19. www.predic8.de ?Quelle: https://httpstatusdogs.com/
  20. 20. www.predic8.de CRUD Mapping Tunwörter zu Hauptwörter: überweisen( account_1, account_2, 1000 ) POST /überweisungen/ { “from“ : “1234“, “to“ : “6789“, “amount“ : 1000 }
  21. 21. www.predic8.de C POST /products/ R GET /products/65 U PUT /products/65 D DELETE /products/65 REST ist ohne Hypermedia CRUD over HTTP!
  22. 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. 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?
  24. 24. www.predic8.de Client Server t Zeitverhalten entfernter Aufrufe
  25. 25. www.predic8.de Client API /shop/products/ /shop/products/3 /shop/products/10 /shop/products/33 Eine Abfrage der Container Ressource n-Abfragen für alle Produkte der Liste N + 1 Calls! Chatty
  26. 26. www.predic8.de API Design: The Musical Quelle: https://events.drupal.org/losangeles2015/sessions/api-design-musical Play
  27. 27. www.predic8.de Automatisierte Design Tests
  28. 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. 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. 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
  31. 31. www.predic8.de Hypermedia ist cool!
  32. 32. www.predic8.de
  33. 33. www.predic8.de Wer verwendet Hypermedia?
  34. 34. www.predic8.de und auf dem Client?
  35. 35. www.predic8.de
  36. 36. www.predic8.de
  37. 37. www.predic8.de
  38. 38. www.predic8.de
  39. 39. www.predic8.de Hypermedia Probleme  Design ist aufwendig  Dokumente werden lang und häßlich  Viele Formate, Best Practice, ...  Client verschmäht Hypermedia
  40. 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. 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
  42. 42. www.predic8.de
  43. 43. www.predic8.de • Das Remoting ist komplett verborgen • RPC sieht genauso aus
  44. 44. www.predic8.de Id angeben anstatt Link verfolgen. URI Template
  45. 45. www.predic8.de /produkt/{pid} + 65 = /produkt/65 URI Templates sind nicht REST!
  46. 46. www.predic8.de Regex macht aus URI id für Template Erzeugte Methode erfordert Id
  47. 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
  48. 48. www.predic8.de REST ist nur (gutes) REST mit Hypermedia Keiner macht Hypermedia => REST?
  49. 49. www.predic8.de REST ALTERNATIVEN
  50. 50. www.predic8.de Alternativen  RPC  GRPC  JSON RPC  Query Sprache  GraphQL  Messaging  MQTT  STOMP  WAMP Autobahn + Crossbar.io
  51. 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
  52. 52. www.predic8.de Java ServerObjective-C Client Stub get(id) gRPC Server get(id) MyCode MyCode protoc .proto service ProductManager { rpc get(int32) returns (Product) {} } protobuf
  53. 53. www.predic8.de GraphQL
  54. 54. www.predic8.de REST is dead.
  55. 55. www.predic8.de REST is dead. Long live REST!
  56. 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
  57. 57. www.predic8.de @thomasub bayer@predic8.de
  58. 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/

×