Frage

Wenn ich in Ruhe Stil richtig verstehen, jede Abfrage (das heißt, jede Aktion auf jeder Ressource, die nicht die Status der Ressource nicht modifiziert) soll in dem Query-String codiert werden, eine get-Methode, mit überhaupt keinen Körper.

Habe ich Recht?

Nun, ich habe mehrere Anwendungen, die mit dem db durch eine XML-Nachricht zu kommunizieren, die von einer Visual Basic 6-Komponente behandelt wird.

die Nachricht für eine Abfrage ist so etwas wie diese

<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>

Im Moment sind wir dabei, unsere XML-Nachrichten neu zu gestalten, und wir möchten, dass in einer solchen Art und Weise zu tun, dass sie leicht auf eine RESTful-Schnittstelle zugeordnet werden konnte.

Im vorherigen Beispiel, wir müssen die „Bedingungen“ Tags, um Kollisionen zwischen den Parametern zu verhindern und den Bedingungen (dh, was passiert, wenn ich ein Feld mit dem Namen „Ordnung“ habe, „Seite“ oder so ähnlich .. .

Wir dachten über die Parameter mit einem Präfix, so etwas wie

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

und die XML wäre so etwas wie

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

Wir versuchen, einige wirklich einfache XML-Format für CRUD-Operationen zu definieren, und dass die resultierende XML leicht zur Ruhe oder JSON zugeordnet werden könnten.

Wie würden Sie diese Art von Abfrage in einer Ruhe Anwendung Karte? Gibt es einen Standard definiert? oder eine Seite mit crud rest / XML / JSON Proben? wie über die Rückkehr Fehler oder verschachtelte Datensätze?

Vielen Dank.

War es hilfreich?

Lösung

IMHO, um Ihr System wirklich RESTful, damit Sie alle Nachrichten / Abfragen überdenken müssen, die Sie senden.

Dieser Teil:

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

ist der schwierige Teil. Welche anderen Bedingungen haben Sie? Sind da viele? Dieses spezielle Beispiel macht ich denke, dass Sie Rechnungen als subresource eines Kunden zu behandeln. Wenn ich Rest versuche ich immer Ressource auf dem Weg zu identifizieren und wenn eine Abfrage stil alle Parameter benötigt, ich bewege sie Zeichenfolge abzufragen. Also würde ich so etwas schreiben:

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

über die Beziehungen zwischen den Ressourcen. Lassen Sie uns sagen, dass wir Ressourcentyp Foo ähnliche Ressourcentyp Bar von einem -bis-viele Beziehung haben. In diesem Fall können Sie über diese Beziehung wie folgt fragen: GET /foo/123/bar und Abfrage-String-Parameter hinzufügen, um es zu filtern. Das Problem beginnt, wenn Sie es in einer Weise filtern möchten, dass die Beziehungen zu anderen Ressourcen beinhaltet. IMHO bedeutet dies, dass Ihre Ressource Design nicht wirklich RESTful ist.

Andere Tipps

Sie müßten die XML-URL-Codierung der Lage sein, es zu passieren, aber, wenn Sie die xml dann in JSon Sie diese Zeichenfolge passieren könnten und dann JSON-> xml oder JSON-> Objekt, um es zu verarbeiten. Dies würde ermöglichen es Ihnen, komplexere Objekte zu übergeben um.

Es ist nicht perfekt, aber funktioniert. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top