2008-11-21 9 views
5

Je vois deux types d'exemples dans divers endroits. On utilise des champs de formulaire commeQuelle est la charge utile de demande recommandée/effective pour une méthode REST PUT?

boucle -X PUT -d "téléphone = 123.456.7890" "http://127.0.0.1/services/rest/user/123"

et l'autre utilise un contenu XML comme (une variante de) cette

echo "< utilisateur> < id> 123 </id> < téléphone> 123.456.7890 </téléphone> </user>" | boucle -X PUT -d @ - « http://127.0.0.1/services/rest/user/ »

Il semble que l'utilisation des champs de formulaire a l'avantage de la concision et en identifiant clairement l'intention du client en ciblant uniquement les champs modifiés, mais le rend difficile à traiter « plus profond "métadonnées. L'utilisation du contenu XML présente l'avantage d'être plus complète, mais l'inconvénient de déterminer quel champ le client est réellement en train de modifier (en supposant qu'il renvoie toute la ressource avec de petites modifications).

Existe-t-il une meilleure pratique ou même une pratique plus courante?

Répondre

0

Dans le deuxième exemple, l'URL ne fait pas référence à une ressource spécifique, donc à mon humble avis, elle n'est pas RESTful.

Si vous corrigez cela, le choix se résume à la forme et au codage XML.

Si vous avez besoin des données structurées et extensible, puis XML pourrait être utile:

<phone type="work, mobile"><num>555-555</num><ext>123</ext></phone> 

mais non nécessaire:

phone=555-555&phone-ext=123&phone-type=work&phone-type=mobile 

Beaucoup d'utilisateurs de l'API peuvent obtenir l'encodage XML mal, d'espace de noms saisir des problèmes indirection, donc l'encodage de formulaire pourrait être mieux pour un large public.

0

Bonne question! Je ne connais pas de meilleure pratique ou pratique commune. Mais je tiens à souligner que la question ne concerne pas vraiment les champs de formulaire ou XML, mais plutôt les représentations partielles par rapport aux représentations complètes. Vous avez succinctement décrit les différences pratiques entre eux. Un aspect de la question est de savoir qui a la responsabilité de déterminer ce qui a changé: le client ou le serveur.

Une option hybride serait une sorte de forme dans laquelle un client peut spécifier ce exactement a changé, en utilisant une syntaxe pour pointer vers les métadonnées « plus profondes », comme XPath ou JSONpath, ainsi que la nouvelle valeur.

2

Cela pourrait être quelque chose comme JSON (P)? (Je ne suis pas sûr de la syntaxe exacte):

$ echo '{user: {id: 123, phone: 123.456.7890}}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/' 

Ou

$ echo '{phone: 123.456.7890}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/123.json' 
Questions connexes