2009-05-12 10 views
1

Wenn Sie einen ressourcenorientierten RESTful-Service definieren, denken Sie, dass es eine gute Idee ist, eine explizite Operation (Verb) für die Abfrage von Daten zu definieren?RESTful-Service-Operationen für die Abfrage von Daten

Es scheint naheliegend und einfach, CRUD-Operationen auf einem ressourcenorientierten RESTful-Service mit HTTP zu Operationen wie PUT, GET, POST & DELETE abzubilden, aber wie sollten Operationen, die mehrere Ressourcen abfragen, zugeordnet werden - eine neue Operation namens ' QUERY 'oder verwenden Sie immer noch' GET ', die eine Sammlung von Ressourcen zurückgibt.

Ich interessiere mich in Menschen Meinungen und Erfahrungen ...

Antwort

7

REST ist über Ressourcen. Welche Ressource wird Ihre Abfrage zurückgeben? Eine Reihe von Daten? Wie wird das festgelegt? Wie ist es parametrisiert? Dies sollte die URL, die Sie mit der GET-Operation verwenden würde:

GET /customers would retrieve all customers 
GET /customers?q=<query> would retrieve all customers matching the query 

EDIT: Die folgenden nicht ganz so klar für mich

Nachdenken über die Abfrage als etwa das Abrufen einer Ressource, die ist eine Reihe von Kunden (zum Beispiel), begann ich über gut definierte Teilmengen der Menge aller Kunden zu fragen. Betrachten Sie Dinge wie:

GET /customers/state/MA    Retrieve all customers in Massachusetts 
GET /customers/country/UK   All in the UK 
GET /customers/country/UK/postalcode/001-234 All in that postal code in the UK 

Ressourcen wie diese ergeben für mich als klar identifizierte Ressourcen, und nicht als Abfragen. Ich würde weiterhin eine Abfragezeichenfolge verwenden, um eine beliebige Gruppe von Kunden abzurufen, aber bei einer natürlichen Partitionierung von Kunden kann ich dies im URL-Bereich angeben.

Es sei daran erinnert, dass die GET-Operation für idempotente Operationen gedacht ist und Caching fördern soll. Die Antwort auf diese Abfragen sollte eine angemessene Zwischenspeicherung ermöglichen (vielleicht einen Tag). Dies würde es einer Client-Maschine oder einem Proxy-Server ermöglichen, die Ergebnismenge für einen bestimmten Zeitraum zwischenzuspeichern, wodurch Server-Umlaufvorgänge eingespart werden.

+0

mir scheint dies die offensichtliche Art zu denken über die Abfrage von Ressourcen – AwkwardCoder

+1

Lassen Sie uns wissen, ob das für Sie nicht funktioniert. Ich bin kein "Fan" von REST, aber das "R" in "REST" als "Ressource" zu denken ist der einzige Weg, den es für mich sinnvoll macht. –

+0

bevorzugen Sie einen SOAP-Service? – AwkwardCoder

0

Ich würde immer noch eine GET verwenden und die Parameter der Abfrage in der URL an.

0

Gibt eine Liste relevanter Ressourcen-URIs als Antwort zurück.