2010-12-09 2 views
3

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

У моего веб-службы ReST есть одна важная роль - выполнять операции CRUD с базой данных. Проблема в том, что я должен запросить таблицу с тысячами строк и отправить ее клиенту как XML - это не хорошо. Неэффективно требовать тысячи записей, но вы не можете выполнять частичные транзакции (например, используя ключевое слово ROWNUM в Oracle) с помощью веб-службы REST. Итак, как вы обходите это?

Один из возможных способов получить записи из таблицы 100 в то время, было бы:

http://mywebservice/employees/0/100

Я придерживаюсь состояние для последнего запроса, представленного т.е. 100

следующий запрос будет:

http://mywebservice/employees/101/200

и так далее. Но неужели это строго успокаивает?

+1

Как этот ORACLE конкретный? Клиент должен удерживать состояние и должен отправлять данные, такие как смещение, упорядочение и количество строк, которые он хотел бы вернуть. Если клиент хочет все данные, вы ничего не можете с этим поделать. Таким образом, клиент должен выполнять всю работу. Или я что-то пропустил? Можете ли вы опубликовать точный образец? – Christian

+2

В чем проблема? Что большой стол? Или что возвращаемое подмножество велико? Или вы не можете вернуть подмножества данных? – Ronnis

+0

@Waxolunist - На самом деле это не Oracle, я просто использовал его в качестве примера. Я могу согласиться с тем, что клиент должен выполнить всю работу и сохранить состояние и сформировать URL-адрес соответственно, - но есть аргумент счетчика, что клиенту не нужно знать тонну информации, чтобы сформировать действительный URL-адрес - он должен быть привязан к себе или иначе я думаю, что ты ступаешь в не спокойную территорию. – Vidar

ответ

1

Вы упомянули CRUD, но ваш пример выглядит только как чтение. Почему бы вам не ввести пейджинг?

# items 0 to 99 
GET /employees?page=0&size=100 
# items 100 to 199 
GET /employees?page=1&size=100 

Непонятно, какое состояние вы имеете в виду в вашем примере. Говоря о Restful over HTTP api, да HTTP сам по себе является протоколом без сохранения состояния, но в целом система, безусловно, имеет состояние, которое может меняться со временем (например, при выполнении действия записи la POST).

Возможно, вы можете привести пример, который пишет действия (вы упомянули транзакции), которые вы пытаетесь открыть через Restful api?

+0

Я вижу, что вы помещаете из/в диапазоны в качестве элементов пути (что является концепцией поискового вызова). Параметры (в данном случае подкачки) не говорят против Restful URL over HTTP.Следует ли кодировать это внутри пути или параметра, часто является вопросом вкуса и стандартов/здравого смысла. Мой большой палец правила, если он похож на каталог (например, subresource), делает его элементом path, если не делает его параметром. Я думаю, что «page = 1 & size = 100» больше подходит как параметры и более интуитивно понятен как/0/99. –

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