2009-01-30 5 views
10

Jak zaprojektowałbyś zapytanie RESTful do obsługi operandu OR między parametrami. Powiedzmy, że mój zasób ma dwa pola field1 & field2. W jaki sposób można zaprojektować URL, aby umożliwić następujące zapytanie:Projektowanie RESTful URL - jak zapytać używając OR między parametrami

„Get myresources gdzie pole1 = x OR Pole2 = Y”

zapytania projektowania w reszta jest dość prosta, ale widziałem tylko zapytania, które wspiera i między polami zapytania. na przykład/Myresource pole1 = X & pole2 = Y

Możliwym rozwiązaniem może być w celu zapewnienia jednego parametru zapytania wyrazów, w którym część, na przykład:?

GET/myresource P = {pole1 = X lub Pole2 = y}

Ale to spowodowałoby, że klienci mogliby parsować i rozszerzać lub zmniejszać filtrowane pola.

Co sugerujesz?

Odpowiedz

10

Parametry zapytania nie są z definicji ORAZ powiązane, są po prostu bezwartościowymi parametrami - sposób ich obsługi zależy od Ciebie. Dla wyszukiwania lub sugeruję:

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

Jeśli chcesz domyślnie AND związek (uzasadnione) oraz wszelkie inne rozszerzenie chcesz to oczywiście możliwe.

2

Na co warto, SO wykorzystuje następujące formatu znalezieniu pytania z wieloma Tagi:

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

Jest to całkowicie uzasadnione, aby oddzielić je , lub ; zakładając te nie są ważne znaków dla tagów sami. Wyszukiwarki zazwyczaj używają q=keyword1+keyword2 i kodują w dowolny sposób słowa +, co sugerowałbym, aby zrobić, jeśli dotyczy to identyfikatora URI wyszukiwania.

1

zależy

jeśli chcesz, aby Twój zasób, aby zawsze dobrze być dostępne z warunek1 LUB warunek2 swoimi można po prostu traktować je w ten sposób ...

ale jeśli chcesz mieć obie możliwości (za pomocą AND lub OR) musiałbyś zaimplementować coś takiego jak annakata powiedział, parametr wskazujący, w jaki sposób warunki powinny być dodane do zapytania que ...

jeśli chcesz mieć bardziej elastyczne podejście (cond1 i cond2 lub cond3), nie widzę innego wyboru ale wprowadzasz własne zapytanie z bezpłatnym tekstem, tak jak powiedziałeś ...

Z drugiej strony, jeśli ciągle pytasz o to samo pole (co moim zdaniem nie dotyczy, ponieważ podałeś pole1, pole2), możesz użyć podejścia allemb i po prostu użyć jakiegoś znaku ("," lub ";") w celu oddzielenia wartości ...

osobiście, mam opracowane jakieś mikro języka zapytań, jak

pole1 = val1 ..wart2 (pole1 pomiędzy val1 i wart2) pole1 => wart2 (pole1> wart2) pole1 = wart1; wart2 (pole1 = wart1 lub pole1 = wart2) filed1 = wart1 (pole1 zawiera wart1)

pole1 = val1..val2 &> val3 (pole1 między val1 i val2 i pole1> val3 ...

dobrze, masz pomysł

ale potem połączyć z każdą sytuację, a więc jest to tylko przykład rozszerzony z waht aleemb mówił ...

Powiązane problemy