Question

Si je comprends bien, dans le style de repos, toutes les requêtes (qui est, chaque action sur toutes les ressources qui ne modifie pas l'état de la ressource) doit être codé dans la chaîne de requête, en utilisant une méthode get, sans corps du tout.

Ai-je raison?

Eh bien, j'ai plusieurs applications qui communiquent avec le db à travers un message XML qui est géré par un composant Visual Basic 6.

le message pour une requête est quelque chose comme ceci

<xml>
  <service>account</service>
  <resource>invoice</resource>
  <action>query</action>
  <parameters>
    <page>1</page>
    <page_len>10</page_len>
    <order>date</order>
    <fields>*</fields>
    <conditions>
      <date>2009-01-01..2009-01-31</date>
      <customer_id>24</customer_id>
    </conditions>
  </parameters>
</xml>

En ce moment, nous sommes en train de redessiner nos messages XML, et nous aimerions faire de telle sorte qu'ils puissent être facilement mis en correspondance avec une interface RESTful.

Dans l'exemple précédent, nous avons besoin des « conditions » balises afin d'éviter les collisions entre les paramètres et les conditions (c.-à-ce qui se passe si j'ai un champ nommé « ordre », « page » ou quelque chose comme ça .. .

si d'envoyer les paramètres avec un préfixe, quelque chose comme

http://account/invoice/?_page=1&_page_len=10&_order=date&_fields=*&date=2009-01-01..2009-01-31&customer_id=24

et le XML serait quelque chose comme

[...]
    <_order>date</_order>
    <_fields>*</_fields>
    <date>2009-01-01..2009-01-31</date>
    <customer_id>24</customer_id>
[...]

Nous essayons de définir un format XML très simple pour les opérations de CRUD, et que le XML résultant pourrait être facilement mis en correspondance reposer ou JSON.

Comment la carte vous ce genre de requête dans une application de repos? Y at-il une norme définie? ou une avec des échantillons reste crud / XML / JSON? Que diriez-vous d'erreur de retour, ou des ensembles de données imbriquées?

Merci beaucoup.

Était-ce utile?

La solution

à mon humble avis, afin de rendre votre système vraiment RESTful vous devez repenser tous les messages / questions que vous enverrez.

Cette partie:

<conditions>
  <date>2009-01-01..2009-01-31</date>
  <customer_id>24</customer_id>
</conditions>

est la partie la plus délicate. Quel genre d'autres conditions avez-vous? Sont-ils nombreux? Cet exemple particulier me fait penser que vous pouvez traiter les factures comme un sous-ressource d'un client. Quand je reste, j'essaie toujours d'identifier les ressources dans le chemin et si une requête doit Stil tous les paramètres, je les passer à la chaîne de requête. Alors j'écrire quelque chose comme ceci:

GET /customers/24/invoices?start_date=2009-01-01&end_date=2009-01-31

Pensez à des relations entre vos ressources. Disons que nous avons le type de ressources connexes Foo type de ressource Bar par un -à-plusieurs. Dans ce cas, vous pouvez poser des questions sur cette relation comme ceci: et ajouter des paramètres GET /foo/123/bar de chaîne de requête pour filtrer. Le problème commence lorsque vous souhaitez filtrer d'une manière qui implique des relations avec d'autres ressources. À mon humble avis, cela signifie que votre conception de ressources ne sont pas vraiment RESTful.

Autres conseils

Vous devrez encode url du xml pour pouvoir passer, mais, si vous avez converti le fichier XML JSON alors vous pouvez passer cette chaîne et json-> xml objet ou json-> pour traiter. Cela vous permettra de passer des objets plus complexes autour.

Il est pas parfait, mais fonctionne. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top