Reposant ressource accepte une liste d'objets

Je suis en train de construire une collection de RESTful ressources qui travaillent comme suit: (je vais utiliser le "peuple", comme un exemple):

 OBTENIR /personnes/{clé} 
- retourne un objet personne (JSON) 
 OBTENIR /les gens?prenom=Bob 
- retourne une liste d'objets de la personne qui est "prenom" est "Bob" (JSON) 
 METTRE /personnes/{clé} 
- attend un objet de personne dans la charge utile (JSON), les mises à jour de la personne dans le 
banque de données avec le {clé} trouvée dans le paramètre de l'URL pour correspondre à la charge utile. 
Si c'est un nouvel objet, le client spécifie la clé de l'objet nouveau. 

Je me sens assez à l'aise avec la conception jusqu'à présent (bien que toute entrée/critiques sont les bienvenues).

J'aimerais aussi pouvoir METTRE une liste de personnes, cependant, je ne suis pas confiant dans le Repos de ma conception. C'est ce que j'ai à l'esprit:

 METTRE /personnes 
- attend une liste d'objets JSON forme avec les touches inclus dans l'objet 
("key":"32948"). Les mises à jour de tous les objets correspondants dans la base de données. 

Cette opération sera la quantité, donc je voudrais l'utiliser "PUT". Cependant elle se brise une règle, car une requête GET à cette même ressource ne sera pas de retour l'équivalent de ce que le client vient de METTRE, mais plutôt de retourner tous les "gens" des objets (puisqu'il n'y aurait pas de filtres sur la requête). Je soupçonne qu'il y a aussi quelques autres règles qui peuvent être brisées ici.

Quelqu'un a mentionné l'utilisation d'un "PATCH" demande dans une question précédente que j'ai eu: RESTE la ressource de la Liste des biens

"PATCH" a l'air fantastique, mais je ne veux pas l'utiliser car elle n'est pas dans l'échelle de l'utiliser encore et n'est pas compatible avec un grand nombre de programmes et d'Api encore.

Je préfère ne pas utiliser de POST, parce que POST indique que la demande n'est pas idempotent.

Quelqu'un avez des commentaires /suggestions?

Suivi:::

Alors que j'ai hésité à utiliser la POSTE, car il semble être le moins-petit dénominateur commun, fourre-tout pour les opérations RESTful et plus peut être dit à propos de cette opération (plus précisément, qu'il est idempotent), METTRE ne peuvent pas être utilisés parce que ses exigences sont trop étroites. Plus précisément: la ressource n'est pas complètement ré-écrit et l'équivalent de la ressource n'est pas d'être envoyé à partir d'une requête GET à la même ressource. À l'aide d'un METTRE avec des propriétés en dehors de ses spécifications peuvent causer des problèmes lorsque les applications, api, et/ou les programmeurs de tenter de travailler avec la ressource et sont remplies avec un comportement inattendu de la ressource.

En plus de la accepté de répondre, Darrel Miller a eu une excellente suggestion, si l'opération devait absolument être MIS et c'était pour ajouter un UUID sur la fin du chemin d'accès aux ressources, donc un équivalent OBTENIR la demande sera de retour l'équivalent des ressources.

OriginalL'auteur Chris Dutrow | 2010-07-07