Affichage de la liste des éléments à l'aide de REPOS
Je suis à la recherche d'une convention sur comment sérialiser mes données quand j'ai une (longue) liste des éléments que je souhaite publier sur le serveur.
Par exemple, si j'ai une ressource /users
et je voulais POSTER un nouveau, je serais http-encoder les champs pour le nouvel utilisateur et de le mettre dans le corps de la requête comme ceci: name=foo&age=20
Mais si j'ai une liste d'utilisateurs, à l'instar de ce [{ name: 'foo', age: 20 }, { name: 'bar', age: 10 }]
, est-il une façon traditionnelle de ce Détachement?
Je pense name[0]=foo&age[0]=20&name[1]=bar&age[1]=10
mais je ne trouve rien à sauvegarder. Ce n'serveurs web acceptent généralement d'/attendre?
OriginalL'auteur Jakob | 2011-11-19
Vous devez vous connecter pour publier un commentaire.
Question rapide qui peut changer ma réponse: Êtes-vous publier directement à partir d'un formulaire HTML ou vous attendez-vous à quelque chose de plus sophistiqué (par exemple javascript processsing, ou même pas un client basé sur le web)
Si vous avez un assez sophistiqué client, vous pouvez simplement construire une chaîne JSON et POST avec un type de contenu de
application/json
. Ensuite, quelle que soit la ressource est la transformation de la POSTE pourrait utiliser n'importe quel nombre de json bibliothèques pour lire le panneau de chaîne et de processus.Plus De La Randonnée:
Ce cadre sont les langues que vous utilisez pour construire votre service REST? - Ils ont des fonctionnalités intégrées/conventions de vous aider?
Par exemple, si vous êtes à l'aide de JAX-RS pour construire votre service, il est construit dans l'annotation @FormParam qui peut être utilisé pour traiter posté formes... par exemple: si vous avez posté la suite avec un type de contenu de
application/x-www-form-urlencoded
:name=foo&age=20&name=bar&age=10
Vous pouvez les récupérer en parallèle des listes sur le côté service via:
Mais il vous faudra alors composer avec la question de savoir si une liste est plus courte/longue que l'autre, comment résolvez-vous cela? Qu'advient-il si un nouveau champ est obligatoire ou facultatif de créer une liste d'utilisateurs? (Mais comme je l'ai mentionné au départ, un tableau JSON JSON objets permettrait de résoudre ce problème... il y a un certain nombre de bibliothèques qui prennent en charge automagic JSON désérialisation de JAX-RS ou il y a aussi la possibilité de créer votre propre MessageBodyReader.
(Avertissement sur la section suivante: je ne sais pas de rails, mon expérience est plus dans les services Java monde... je suis en la fondant sur des ce guide). Il ressemble Rails a une convention de
name[]=foo&name[]=bar
pour traiter les données publiées dans les tableaux magiquement, et une convention analogue à remplir structure commeuser[name]=foo&user[age]=20
... peut-être que si vous êtes sur des rails, il est d'une certaine façon à l'usage/l'abus de ces deux caractéristiques pour obtenir le résultat souhaité?De REPOS des cadres et des langues peuvent avoir leurs propres conventions et de fonctionnalité 🙂
Désolé, j'ai été plongé dans l'randonnée plus et viens de voir votre commentaire. 🙂 Le tl;dr; version de mon second point de mon post: Avez-vous atterri sur un cadre pour votre REPOS, de services? Ont-ils intégré dans la convention pour de telles choses (ce qui rendrait la vie plus facile)?
ach_l a un très bon point en ce que la chose la plus importante est ce que de votre côté serveur acceptera (qui implique qu'il n'y a pas de véritable standard pour ce genre de chose -- je ne pense pas que les gens qui ont écrit la spécification de retour dans le pionnier de l'âge du web prévoyait hiérarchique du contenu).
OriginalL'auteur Charlie
Rails sérialise les formes sur le format n'est pas, contrairement à ce que vous suggérez. Si vous avez un modèle imbriqué il code comme ceci:
(l'équivalent JSON serait
{"name": "theo", "company": {"name": "acme"}}
)Je ne peux pas dire que j'ai vu une application Rails, l'envoi de tableaux, mais il n'y a aucune raison pourquoi ça ne marcherait pas (dans le pire des cas, vous vous retrouvez avec un hachage avec des clés de chaîne).
PHP a une autre convention, si vous souhaitez envoyer un tableau et que vous ne
Mais je ne sais pas comment vous faites les objets imbriqués de cette façon.
La spécification HTTP, ou si c'est l'URI spec, pas sûr que l'atm, en réalité précise que, si vous passez le même argument plusieurs fois, vous aurez le tableau de valeurs (au lieu de la dernière remporte le comportement de la plupart des cadres). Vous pouvez voir cela dans les docs de l'API pour la Jetée, par exemple: http://api.dpml.net/org/mortbay/jetty/6.1.5/org/mortbay/jetty/Request.html#getParameterValues(java.lang.String)
Cependant, la plupart de cela s'applique à
GET
des demandes, mais pas nécessairementPOST
(mais peut-êtreapplication/x-url-encoded
doivent respecter les mêmes normes que lesGET
).En bref, je ne pense pas qu'il y est un standard pour ce faire,
POST
corps sont un peu sauvages de l'ouest du territoire. Je pense, cependant, que vous devriez aller avec JSON, parce qu'elle est faite pour décrire les structures, etapplication/x-url-encoded
n'est pas, ou vous devriez essayer de représenter la structure de vos données de mieux, quelque chose comme:Qui a une sorte de chances d'être réellement interprétable par une application Rails, hors de la boîte, par exemple.
OriginalL'auteur Theo