2013-05-03 10 views
7

Plural Form für REST API ist natürlicher und mehr verwendet, z. /api/users oder api/users/123.Mischen von REST API Plural und Singular für verschiedene Ressourcen?

Aber für einige Ressourcen nicht natürlich ist zB:

  • /api/login - log in genau einem Benutzer
  • /api/profile - get Profil von angemeldeten Benutzer

diese Ressourcen wird nie mehr verwendet werden das ein Objekt/Modell in meiner App.

Auf der anderen Seite habe ich gelesen, dass Mischen von Plural und Singular Form in Ressourcen Namen ist keine gute Praxis (http://pages.apigee.com/web-api-design-ebook.html).

So halte ich, was zu tun ist:

  1. Verwendung Singular für alle
  2. Verwendung Plural für alle (mit einigen dummen Formen wie /api/logins)
  3. inkonsistent zu sein und für fast alle Ressourcen Plural verwenden erwarten einige spezielle Ressourcen wie /api/login oder /api/profile, die immer mit einem Objekt/Modell verwendet werden.

Was ist der bessere Ansatz?

+0

Ich befolge die gleichen Regeln wie Datenbanktabellen: singular. Es ist die Produkttabelle, nicht die Produkttabelle. Sie erhalten ein Produkt oder ein Produktset. Es gibt keine Notwendigkeit, mit Deklinationen mit deinen Substantiven umzugehen; Sie erhalten eine Entität oder eine Menge einer Entität. –

Antwort

6

Es gibt keine strengen Richtlinien für die Definition einer RESTful-API, aber was ich am meisten gelesen habe, ist, dass der gesunde Menschenverstand die Oberhand haben sollte.

Daher Option 3:

als unvereinbar und Plural verwenden fast alle Ressourcen erwarten einige spezielle Ressourcen wie/api/login oder/api/Profil, das immer mit einem Objekt/Modell verwendet.

ist die logischste. Sie sollten immer in der Lage sein, die URL zu erraten, wenn Sie denken "Ich brauche Ressource X, wie würde diese URL aussehen"?

2

REST (Representational State Transfer) ist grundsätzlich für eine einzelne Entität und um CRUD darauf zu tun. Singular macht mir mehr Sinn. Aber wenn Sie die Liste brauchen, dann macht Plural Sinn. Zum Beispiel:

Sie wollen, müssen ein Benutzer dann erhalten/api/user/{id}

Aber wenn Sie die Liste der Benutzer erhalten möchten, dann haben/api/users

+0

Der De-facto-Standard ist die Verwendung von GET/entity? Filter = was auch immer für multiple und GET/entity/{id} für single. Ihre Entität hat keine Deklinationsanforderung; Sie erhalten die singuläre Entität oder einen Entitätssatz/eine Liste/eine Serie. Es ist nicht "Entitäten" an sich, sondern ein Entity-Set, eine Liste oder eine Serie. –

3

Ich bin nicht sagen, ich bevorzuge Plural, aber wenn Sie mit Plural gehen, können Sie Ihre speziellen Singulars auf diese Weise versöhnen:

GET /api/forms/login ist das HTML-Login-Formular. Unter Verwendung dieser Perspektive ist login eine ID von nur einem Formular in einer Formularsammlung.

POST /api/forms/login ist, wo das Login-Formular eingereicht wird.

GET /api/users/{id}/profile ruft das Profil des angegebenen Benutzers ab.Dies funktioniert in vielen Fällen, funktioniert aber nicht für Anonymitäts-Websites, bei denen die Identität des Benutzers verborgen bleiben sollte, selbst wenn er sein Profil betrachtet, bei dem die Benutzer-ID und der echte Name fehlen.

GET /api/profiles/{id} entkoppelt die Profileinheit von der Benutzer-ID und würde für eine Anonymitätswebsite funktionieren.

Alternativ können Sie auch GET /api/users/current/profile oder GET /api/sessions/current/profile schreiben, die eine bestimmte ID wie in Ihrem Beitrag auslässt, da der Server mit dem für den aktuellen Benutzer relevanten Inhalt antwortet.

2

Was ich in einigen Projekten gesehen habe ich an diesen Jahren arbeiten, ist, dass singuläre Aussehen freundlicher für die meisten gängigen Operationen, die folgenden Endpunkte zum Beispiel für den Benutzer Ressource haben:

GET /user --> retrieves all users 
GET /user/{id} --> retrieves a user with the given id 
POST /user --> inserts a new user (the user object will come in the request body) 
PUT /user/{id} --> updates a user with the given id (the user object will come in the request body) 
DELETE /user/{id} --> deletes the user with the given id 

das sind gemeinsame Operationen, wenn Sie Bulk insert/update haben/Löschoperationen sollte es dann besser sein Plurale

POST /users (the user objects will come in the request body) 
PUT /users/{listOfIds} (the user objects will come in the request body) 
DELETE /users/{listOfIds} 

GET/Benutzer zu verwenden und GET/users Synonyme sein, würden diese beiden Abfrageparameter akzeptieren um die Ergebnisse zu verfeinern, z

GET /users?status=active 
+0

Warum ruft 'GET/users' nicht alle Benutzer ab? –

+0

Ja GET/Benutzer sollten als Synonym zu GET/user in dem erwähnten Ansatz verwendet werden, ich habe diesen Kommentar gerade hinzugefügt – raspacorp

Verwandte Themen