Einfach ausgedrückt: Sie machen das völlig verkehrt.
Sie sollten dies nicht unter dem Gesichtspunkt betrachten, welche URLs Sie verwenden sollten. Die URLs gibt es im Grunde "umsonst", sobald Sie entschieden haben, welche Ressourcen für Ihr System notwendig sind UND wie Sie diese Ressourcen und die Interaktionen zwischen den Ressourcen und dem Anwendungsstatus darstellen werden.
Um zu zitieren Roy Fielding
Eine REST-API sollte fast die ganze Zeit über Beschreibungsaufwand auf die Definition der Medientyp(en), die für die Darstellung von Ressourcen und zur Steuerung des Anwendungs Anwendungsstatus verwendet werden, oder in der Definition von erweiterten Beziehungsnamen und/oder Hypertext-fähigen Markup für bestehende Standard-Medientypen. Jeder Aufwand für zu beschreiben, welche Methoden für welche URIs von Interesse verwendet werden sollen, sollte vollständig im Rahmen der Verarbeitungsregeln Verarbeitungsregeln für einen Medientyp (und in den meisten Fällen bereits definiert durch bestehende Medientypen). [Versagen bedeutet hier, dass Out-of-Band Informationen die Interaktion steuern anstelle von Hypertext.]
Die Leute fangen immer mit den URIs an und denken, dass dies die Lösung ist, und dann neigen sie dazu, ein Schlüsselkonzept in der REST-Architektur zu übersehen, insbesondere, wie oben zitiert, "Versagen bedeutet hier, dass Out-of-Band-Informationen die Interaktion steuern, anstatt Hypertext."
Um ehrlich zu sein, sehen viele einen Haufen URIs und einige GETs und PUTs und POSTs und denken, REST sei einfach. REST ist nicht einfach. RPC über HTTP ist einfach, das Hin- und Herschieben von Datenpaketen über HTTP-Payloads ist einfach. REST geht jedoch darüber hinaus. REST ist protokollunabhängig. HTTP ist einfach sehr beliebt und eignet sich gut für REST-Systeme.
REST lebt von den Medientypen, ihren Definitionen und der Art und Weise, wie die Anwendung die für diese Ressourcen verfügbaren Aktionen über Hypertext (Links, effektiv) steuert.
Es gibt verschiedene Ansichten über Medientypen in REST-Systemen. Einige bevorzugen anwendungsspezifische Nutzdaten, während andere die vorhandenen Medientypen in Rollen umwandeln, die für die Anwendung geeignet sind. Einerseits gibt es beispielsweise spezifische XML-Schemata, die für Ihre Anwendung geeignet sind, und andererseits die Verwendung von XHTML als Darstellung, vielleicht durch Mikroformate und andere Mechanismen.
Ich denke, dass beide Ansätze ihre Berechtigung haben, wobei XHTML sehr gut in Szenarien funktioniert, die sowohl das menschengesteuerte als auch das maschinengesteuerte Web überschneiden, während die ersteren, spezifischeren Datentypen meiner Meinung nach besser die Interaktion zwischen Maschinen erleichtern. Ich finde, dass die Aufwertung von Standardformaten die Aushandlung von Inhalten potenziell schwierig machen kann. "application/xml+yourresource" ist als Medientyp viel spezifischer als "application/xhtml+xml", da letzteres auf viele Nutzdaten zutreffen kann, die für einen Maschinen-Client von Interesse sein können oder auch nicht, und die er auch nicht ohne Introspektion bestimmen kann.
XHTML funktioniert jedoch (natürlich) sehr gut im menschlichen Web, wo Webbrowser und Rendering sehr wichtig sind.
Ihre Bewerbung wird Sie bei solchen Entscheidungen unterstützen.
Ein Teil des Entwurfsprozesses eines REST-Systems besteht darin, die erstklassigen Ressourcen in Ihrem System zu ermitteln, zusammen mit den abgeleiteten Ressourcen, die zur Unterstützung der Operationen auf den primären Ressourcen erforderlich sind. Sobald die Ressourcen entdeckt sind, ist die Darstellung dieser Ressourcen sowie die Zustandsdiagramme, die den Ressourcenfluss über Hypertext innerhalb der Darstellungen zeigen, die nächste Herausforderung.
Es sei daran erinnert, dass jede Darstellung einer Ressource in einem Hypertextsystem sowohl die eigentliche Ressourcendarstellung als auch die für die Ressource verfügbaren Zustandsübergänge kombiniert. Betrachten Sie jede Ressource als Knoten in einem Graphen, wobei die Links die Linien sind, die von diesem Knoten zu anderen Zuständen führen. Diese Links informieren die Kunden nicht nur darüber, was getan werden kann, sondern auch darüber, was dafür erforderlich ist (da ein guter Link den URI und den erforderlichen Medientyp kombiniert).
Zum Beispiel können Sie haben:
<link href="http://example.com/users" rel="users" type="application/xml+usercollection"/>
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
In Ihrer Dokumentation ist von einem rel-Feld mit dem Namen "users" und dem Medientyp "application/xml+youruser" die Rede.
Diese Links mögen überflüssig erscheinen, da sie alle auf dieselbe URI verweisen, sozusagen. Aber das sind sie nicht.
Der Grund dafür ist, dass der Link für die Beziehung "Benutzer" die Sammlung von Benutzern betrifft, und Sie können die einheitliche Schnittstelle verwenden, um mit der Sammlung zu arbeiten (GET, um alle Benutzer abzurufen, DELETE, um alle Benutzer zu löschen usw.).
Wenn Sie an diese URL POSTen, müssen Sie ein "application/xml+usercollection"-Dokument übergeben, das wahrscheinlich nur eine einzige Benutzerinstanz innerhalb des Dokuments enthält, so dass Sie den Benutzer hinzufügen können, oder vielleicht auch nicht, um mehrere auf einmal hinzuzufügen. Vielleicht schlägt Ihre Dokumentation vor, dass Sie anstelle der Sammlung einfach einen einzelnen Benutzertyp übergeben können.
Sie können sehen, was die Anwendung benötigt, um eine Suche durchzuführen, wie durch den Link "Suche" und seinen Medientyp definiert. In der Dokumentation für den Medientyp "Suche" erfahren Sie, wie sich dies verhält und was Sie als Ergebnis erwarten können.
Die URIs selbst sind jedoch im Grunde genommen unwichtig. Die Anwendung hat die Kontrolle über die URIs, nicht die Clients. Abgesehen von einigen wenigen "Einstiegspunkten" sollten sich Ihre Clients bei ihrer Arbeit auf die von der Anwendung bereitgestellten URIs verlassen.
Der Kunde muss wissen, wie er die Medientypen manipulieren und interpretieren kann, aber er muss sich nicht unbedingt darum kümmern, wohin die Daten gehen.
Diese beiden Links sind in den Augen des Kunden semantisch identisch:
<link href="http://example.com/users?search" rel="search" type="application/xml+usersearchcriteria"/>
<link href="http://example.com/AW163FH87SGV" rel="search" type="application/xml+usersearchcriteria"/>
Konzentrieren Sie sich also auf Ihre Ressourcen. Konzentrieren Sie sich auf ihre Zustandsübergänge in der Anwendung und darauf, wie dies am besten erreicht werden kann.
17 Stimmen
@Daniel, danke für die Bearbeitung. "Ich mehr Verben" war ein absichtliches Wortspiel, aber ich lasse es so, es ist jetzt leichter zu lesen :)
1 Stimmen
Übrigens, zur Fehlerbeschreibung. Ich habe es geschafft, die Fehlerbeschreibung in die Kopfzeile der Antwort zu schreiben. Fügen Sie einfach eine Kopfzeile mit dem Namen "Fehlerbeschreibung" hinzu.
0 Stimmen
Dies sieht eher nach Fragen der Anwendungssicherheit aus. Anwendungssicherheit ist nicht das, worum es bei REST geht.
0 Stimmen
@NazarMerza wie sind 1., 2. und 3. die Fragen zur Anwendungssicherheit?