Domanda

Se ho capito bene, in stile resto, ogni query (cioè ogni azione su ogni risorsa che non modifica lo stato della risorsa) dovrebbe essere codificato nella stringa di query, utilizzando un metodo get, senza corpo a tutti.

Ho ragione?

Bene, ho diverse applicazioni che comunicano con il db attraverso un messaggio XML che è gestito da un Basic 6 componente visiva.

il messaggio per una query è qualcosa di simile

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

In questo momento siamo in procinto di ridisegnare i nostri messaggi XML, e vorremmo farlo in modo tale da poter essere facilmente mappate a un'interfaccia RESTful.

Nell'esempio precedente, abbiamo bisogno delle "condizioni" tag al fine di evitare collisioni tra i parametri e le condizioni (ad esempio, cosa succede se ho un campo chiamato "ordine", "pagina" o qualcosa del genere .. .

se circa l'invio dei parametri con un prefisso, qualcosa come

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

e l'XML sarebbe qualcosa di simile

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

Stiamo cercando di definire alcuni davvero semplice formato XML per le operazioni CRUD, e che l'XML risultante potrebbe essere facilmente mappato per riposare o JSON.

Come ti mappare questo tipo di query in un'applicazione di riposo? C'è qualche standard definito? o qualche pagina con i campioni CRUD resto / XML / JSON? Che ne dite di errore, o insiemi di dati annidati ritorno?

Grazie mille.

È stato utile?

Soluzione

IMHO, al fine di rendere il sistema veramente RESTful è necessario ripensare tutti i messaggi / query che si invia.

Questa parte:

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

è la parte difficile. Che tipo di altre condizioni avete? Ci sono molti? Questo particolare esempio mi fa pensare che si può trattare come fatture subresource di un cliente. Quando faccio riposare cerco sempre di individuare risorse nel percorso e se ha bisogno di una query stil alcun parametro, li sposto per interrogare stringa. Quindi mi piacerebbe scrivere qualcosa di simile:

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

Pensate relazioni tra le risorse. Diciamo che abbiamo tipo di risorsa Foo relativo tipo di risorsa Bar da una relazione -a-molti. In questo caso è possibile chiedere informazioni su questa relazione in questo modo: GET /foo/123/bar e aggiungere parametri di stringa di query per filtrare. Il problema inizia quando si desidera filtrare in un modo che coinvolge i rapporti ad altre risorse. IMHO questo significa che il vostro disegno risorsa non è davvero riposante.

Altri suggerimenti

Si avrebbe bisogno di codifica URL del XML per essere in grado di passare, ma, se è stato convertito il codice XML a JSON, allora si potrebbe passare quella stringa e poi json-> XML o json-> oggetto di elaborarlo. Ciò consentirebbe di passare oggetti più complessi in giro.

Non è perfetto, ma funziona. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top