2010-01-17 4 views
6

Я хотел бы реализовать службу REST, которая может анализировать запрос, такой как поиск пользователей, созданных после начала и до конца, и с привилегией администратора. Кажется, что стандартная реализация REST могла запрашивать только ID. Нужен ли мне для себя определенный протокол, чтобы сделать такой запрос возможным или любым стандартом?Что делать, если я хочу реализовать сложный запрос в REST

Спасибо!

ответ

1

Посмотрите на Google's GDATA Protocol. Это очень RESTful, и у них есть очень хороший способ выполнения сложных запросов, сохраняя при этом чистый URI.

http://code.google.com/apis/gdata/docs/2.0/reference.html#Queries

Вот пример того, что их чистый запрос Юрис

http://example.com/jo/-/Fritz/2006 

вместо

http://example.com/jo?category=Fritz&category=2006 

От Google:

Этот подход идентифицирует ресурс без U петь параметры запроса, и он создает более чистые URI. Мы выбрали этот подход для категорий, потому что считаем, что запросы категорий будут наиболее распространенными запросами.

+1

Я думаю, что это хороший способ, но он не может удовлетворить всю ситуацию. –

+0

Правда. Но это дает вам правильный менталитет. URI следует рассматривать как идентификаторы, а не запросы. Не думайте о своем запросе с точки зрения строки поиска или SQL, скорее подумайте об этом как о идентификаторе, идентифицирующем ресурс (который, возможно, может быть установлен в других ресурсах - гиперссылка - это большая сделка в REST). – nategood

+1

Прошу отличить.Строка запроса * * в URI предназначена именно для запроса. Это не делает подход URI для каждого запроса недопустимым, напротив, он может иметь преимущества, особенно в отношении кэширования. Таким образом, POSTing сложный запрос и выдача перенаправления. Все зависит от ваших потребностей, и ни одно из решений по своей сути не вызывает беспокойства. – SerialSeb

0

Насколько я знаю - все остальное действует для действий CRUD. Вы можете реализовать отдельный метод/url search и передать ему столько параметров, сколько вам нужно. И если вы все еще пытаетесь придерживаться методологий REST - вы должны использовать тип запроса GET.

+1

> спокойный материал действителен для действий CRUD - нет, это не так. – TheWhiteRabbit

+1

@TechExchange Вы правы. Мои знания об REST изменились с тех пор, как я ответил на этот вопрос.) – Eimantas

3

В REST нет ограничений, в которых говорится, что вы можете запросить только идентификатор. Нет ничего плохого в использовании набора параметров запроса для возврата набора пользователей, соответствующих этим критериям поиска.

0

Я беру поле поиска семантики django как рекомендации для сложных поисков. https://docs.djangoproject.com/en/dev/ref/models/querysets/#id4

Не отвлекайтесь на то, что он определен как специфический для lanuage api, его легко перевести на параметры запроса html.

Примером может быть http://example.com/Goods?category=fruit&size__lt=14

Чтобы получить результат select * from goods where category = 'fruit' and size < 14 в SQL или /goods[@category='fruit' and @size < 14] в XPath, или любой другой.

Смежные вопросы