2009-01-30 4 views
10

Wie würden Sie eine RESTful-Abfrage entwerfen, um OR-Operanden zwischen Parametern zu unterstützen. Angenommen, meine Ressource hat zwei Felder field1 & field2. Wie würden Sie die URL entwerfen Sie die folgende Abfrage zu aktivieren:RESTful-URL-Design - Abfrage mit OR zwischen Parametern

„Get MyResources wo field1 = x OR field2 = y“

Designing-Abfragen in REST ist ziemlich geradlinig, aber ich habe nur Abfragen gesehen, dass unterstützt und zwischen Abfragefeldern. z.B. x/myresource feld1 = & field2 = y

Eine mögliche Lösung kann einen einzelnen Abfrageparameter mit freiem Text zu liefern, wenn ein Teil, zum Beispiel:?

GET/myresource q = {field1 = x OR field2 = y}

Aber das würde es für Clients komplizierter machen, gefilterte Felder zu analysieren und zu erweitern oder zu reduzieren.

Was schlagen Sie vor?

Antwort

10

Abfrageparameter sind nicht per Definition und verwandt, sie sind nur inerte Parameter - wie Sie mit ihnen umgehen, liegt an Ihnen. Ich würde für eine ODER-Suche vorschlagen:

GET /myresources?field1=x&field2=y&inclusive=true 

Wenn Sie eine AND-Beziehung (vernünftig) auf die Standard wollen, und jede andere Erweiterung, die Sie ist möglich, natürlich möchten.

2

Für das, was ihren Wert, SO verwendet das folgende Format für Fragen mit mehreren Tags zu finden:

http://stackoverflow.com/questions/tagged?tagnames=jquery or css or asp.net or php or web-development or svn

Es ist durchaus sinnvoll, sie zu trennen mit , oder ; das sind keine gültigen Zeichen für die Tags unter der Annahme, sich. Suchmaschinen verwenden normalerweise q=keyword1+keyword2 und URL-Encoding-beliebige + in den Schlüsselwörtern selbst was ist, was ich vorschlagen würde Sie tun, wenn dies für eine Suche URI ist.

1

es hängt

, wenn Sie Ihre Ressource wollen mit condition1 werden zugegriffen Allways ODER Ihre Bedingung2 können sie nur behandeln, dass die Art und Weise ...

aber wenn man beide Möglichkeiten haben wollen (mit AND oder OR) Sie müssten etwas implementieren, wie annakata sagte, ein Parameter, der angibt, wie Bedingungen zu que Abfrage hinzugefügt werden sollen ...

Wenn Sie s flexibler Ansatz haben wollen (cond1 und cond2 oder cond3) sehe ich keine andere Wahl aber implementieren Sie Ihre eigene Abfrage mit freiem Text, wie Sie sagten ...

Auf der anderen Seite, wenn Sie immer das gleiche Feld abfragen (was nicht der Fall ist, weil Sie field1, field2 angegeben haben), können Sie den Ansatz von allenb verwenden und einfach ein Zeichen ("," oder ";") Werte zu trennen ...

persönlich, habe ich eine Art Mikro-Abfragesprache entwickelt, wie

field1 = val1 ..val2 (feld1 zwischen val1 und val2) feld1 => val2 (field1> val2) feld1 = Wert1; val2 (field1 = Wert1 oder feld1 = Wert2) filed1 = val1 (feld1 enthält Wert1)

feld1 = val1..val2 &> val3 (field1 zwischen val1 und val2 und field1> val3 ...

gut, erhalten Sie die Idee

aber dann verbinde ich jeden Zustand mit und, so ist dies nur ein erweitertes Beispiel von wahle aleemb sagte ...

Verwandte Themen