Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Frage zu Rest-API-Design (https://www.delphipraxis.net/206525-frage-zu-rest-api-design.html)

Der schöne Günther 31. Dez 2020 19:39

Frage zu Rest-API-Design
 
Ich biete per Http GET Daten zum Auslesen an.

Für GET http://localhost/api/ bekommt man alles:
Code:
{
   "system": {
      "softwareVersion": "1.0.0",
      "localClock": "2020-12-31T19:31:00.000"
   },
   
   "control": {
      "isEnabled": true,
      "isInTurboMode": false
   },
   
   "order": {
      "orderNumber": "ABC \/ 123",
      "limits" : {
         "upper": 1.25,
         "lower": 0.8
      }
   }
}
Für GET http://localhost/api/order/limits bekommt man:
Code:
{
   "upper": 1.25,
   "lower": 0.8
}
Soweit noch ganz unspannend.

Nun möchte ich per Http PUT und Http PATCH Änderungen zulassen. Es macht hier nur Sinn bestehendes zu modifizieren, nicht etwas neues hinzuzufügen (daher kein Http POST).


Jetzt stutze ich etwas, was erwartet der typische Benutzer? Angenommen er möchte order/limits/lower ändern.

Mir fallen so viele Dinge ein die man tun könnte:
Code:
Http PATCH http://localhost/api/order/limits

{
  "lower": 0.5
}
oder

Code:
Http PATCH http://localhost/api/

{
  "order": {
    "limits": {
      "lower": 0.5
    }
  }
}
oder

Code:
Http PUT http://localhost/api/order/limits

{
   "upper": 1.25,
   "lower": 0.5
}
oder

Code:
Http PUT http://localhost/api/order/limits/lower

0.5
Was ist das üblichste? Ist das letzte überhaupt gültig?

sh17 31. Dez 2020 21:15

AW: Frage zu Rest-API-Design
 
den Unterschied zwischen PUT und PATCH hast DU ja schon richtig. Hier nochmal erklärt

https://www.predic8.de/post-put-patch-beispiel.htm

Ansonsten wären meiner Meinung nach Deine Beispiel 1 und 3 richtig

jfheins 1. Jan 2021 22:48

AW: Frage zu Rest-API-Design
 
Ich kenne deinen API use-case nicht, aber die Frage stellt sich: Muss man alles ändern können, oder gibt es nur bestimmte Sachen die man ändern kann?

Wenn man nur bestimmte Sachen ändern können soll (lower limit, aber nicht upper limit) dann biete auch nur das an. (Also keinen Patch Endpunkt)

Nebenbei würde ich dir noch GraphQL ans Herz legen, falls das ein guter Fit ist. (Nicht einfach REST nutzen, weil das das erste Projekttemplate ist) ;-)

generic 1. Jan 2021 22:58

AW: Frage zu Rest-API-Design
 
Schau dir mal hateos an.


https://m.heise.de/developer/artikel...html?seite=all

Uwe Raabe 2. Jan 2021 00:00

AW: Frage zu Rest-API-Design
 
Zitat:

Zitat von generic (Beitrag 1480183)
Schau dir mal hateos an.

Ich dachte erst, das wäre ein neues Betriebssystem - dem allgemeinen Trend folgend :)

DeddyH 2. Jan 2021 10:35

AW: Frage zu Rest-API-Design
 
Was so ein „a“ nicht alles ausmachen kann :)

bernau 2. Jan 2021 13:42

AW: Frage zu Rest-API-Design
 
Mit fällt bei REST-Schnittstellen immer mehr auf, dass Swagger als Designtool verwendet wird.

Ist auf jeden Fall mal ein Blick wert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf