REST-API, Pfadvariable vs. Anforderungs-Parameter

9

Ich schreibe gerade einen Webservice, der Zugriff auf einige Ressourcen bietet. Ich versuche REST zu folgen, aber ich habe ein Problem mit einigen Teilen meiner API.

Ich habe die folgenden uris:

  • / myservice / users / : um alle Benutzer
  • zu erhalten
  • / myservice / users / {userId} : um einen bestimmten Benutzer zu erhalten
  • / myservice / badges / : um alle Abzeichen zu erhalten
  • / myservice / badges / {badgeId} : um ein bestimmtes Badge zu erhalten

Nun, mein Problem ist, ich muss einen Weg implementieren, um alle Benutzer mit einem bestimmten Abzeichen zu bekommen. Ich kann berücksichtigen, dass dies nur ein Filter ist, den ich auf die Liste der Benutzer anwende, daher die folgende uri:

  • / myservice / users /? filter = badge: {badgeId}

Oder ich kann bedenken, dass dies nur eine Unter-Ressource eines Badges ist, daher die folgende uri:

  • / myservice / badges / {badgeId} / users /

Welche scheint das muss "REST-konform"?

Ich muss sagen, ich habe einige Beiträge zu diesem Thema speziell diese gelesen: Rest Standard: Pfadparameter oder Anforderungsparameter , aber sie scheinen mein Problem nicht zu decken.

    
Guillaume D 27.03.2012, 16:25
quelle

2 Antworten

5

Wenn Sie REST-fähig sein möchten, sollten Sie HATEOAS in Betracht ziehen (schreckliches Akronym, aber der Schlüssel, um wirklich RESTful zu sein) .

Mit HATEOAS könnte Ihre Badge-Darstellung etwa so aussehen:

%Vor%

Damit können Ihre Clients vom URI-Schema Ihres Servers entkoppelt werden, da sie einfach auf was auch immer href die / rel / users-Verbindung zur Verfügung stellt. Zugegeben, Ihr Server muss noch intern ein URI-Schema definieren, aber wenn Sie irgendwann entscheiden, dass Sie sich nicht darum kümmern, können Sie es einfach ändern, ohne Ihre Clients zu stören. Zum Beispiel möchten Sie vielleicht Ihr URI-Schema auf Ihre zweite Option ändern, was dazu führen würde, dass Ihre Badge-Repräsentation sich folgendermaßen ändert:

%Vor%

Clients, die die Beziehungsbeziehung / rel / users verwenden, sind von der URI-Änderung nicht betroffen. Worauf das hinausläuft, ist ... Verwenden Sie HATEOS, und das URI-Schema ist nicht wirklich wichtig .

Prost!

    
Andaris 28.03.2012 23:53
quelle
0

Ich bevorzuge /myservice/users/?filter=badge:{badgeId} und ich denke, dass mehr APIs dieses Format verwenden.

    
abraham 27.03.2012 16:33
quelle

Tags und Links