Стратегия RESTful публикации многих объектов

Я все еще нахожусь в процессе освоения дел в стиле ОТДЫХ.В моей ситуации клиентское программное обеспечение будет взаимодействовать с сервисом RESTful.В редких случаях клиент загружает всю свою базу данных сущностей (каждая сущность сериализуется примерно в 5-килобайтный фрагмент xml).Возможно, я ошибаюсь, но правильная стратегия RESTful, кажется, состоит в том, чтобы циклически проходить через каждую сущность и индивидуально размещать каждую.Однако, вероятно, таких объектов может быть десятки тысяч, и так много быстрых POST не кажутся кошерными.В этой ситуации создается впечатление, что упаковка всех сущностей в одно большое представление XML нарушит способ выполнения RESTful, но это также избавит от необходимости тысяч POST.Есть ли стандартная практика для достижения этой цели?Заранее спасибо!
4 голоса | спросил tempy 31 Maypm09 2009, 18:45:04

4 ответа


0
Здесь есть как минимум две проблемы, которые мешают вам быть RESTful.Каждый ресурс должен быть идентифицирован по URI.Работа с ресурсом означает, что вы должны вызвать URI с помощью HTTP-вызова.Следовательно, вы не можете вызывать несколько действий в нескольких ресурсах всего за один HTTP-вызов.Ресурсы идентифицируются существительными и представляют сущности.Это означает, что для вставки «Сотрудник» и «Автомобиль» необходимо вызвать два разных ресурса для каждой из соответствующих сущностей.Таким образом, суммируя, вы не можете использовать чисто RESTful подход.Тем не менее, REST разработан для того, чтобы помогать путем соглашений, а не стеснять вас.Лучшее решение для вас - создать собственное действие, которое делает то, что вам нужно.Кроме того, вы можете создать универсальную сущность-обертку с INSERT, UPDATE и другими действиями, которые выполняют операции с каплями разрозненных данных в виде XML.Однако это подорвет ваши другие конечные точки, потому что теперь становится возможным вставить запись Car через универсальную оболочку и через ---- +: = 0 =: + ---- URI.Не зная о ваших реальных требованиях, я бы посоветовал вам не раскрывать эту функцию специально через REST.За кулисами вы все равно могли бы вызывать свои методы действия INSERT в различных контроллерах, как только вы разбили входящую коллекцию, если разрозненные объекты.
ответил aleemb 31 Maypm09 2009, 23:42:04
0
Я не понимаю, почему «Пакет сущностей» нельзя считать ресурсом.Транзакционные записи, безусловно, могут рассматривать транзакцию базы данных как ресурс.Я признаю, что не читал диссертацию Филдинга, но я не вижу, как объединение нескольких ресурсов в одно представление лишает законной силы REST.Транзакции базы данных делают что-то вроде этого.Они будут заключать меньшие ресурсы в ресурс транзакции.Это правда, что обычно они делают это так, что вы можете публиковать эти меньшие ресурсы, которые все еще могут быть большими, отдельно.Но поскольку сама транзакция считается ресурсом, я не верю, что создание для нее представления, которое вы могли бы опубликовать в виде одного запроса POST, сделало бы этот дизайн менее RESTful.Это также используется в другом направлении.Когда клиент получает результаты поиска с сервера, сервер может обернуть их внутри ресурса результатов, чтобы клиент мог просто получить этот один ресурс вместо нескольких отдельных.Поэтому я бы сказал, что оборачивание этих небольших 5-килобайтных ресурсов в более крупный коллекционный ресурс можно рассматривать как RESTful, и, вероятно, это то, что вам нужно.
ответил Mikko Rantanen 31 Maypm09 2009, 22:30:31
0
Если у большой обертки есть допустимый тип носителя, то можно рассматривать его как единый ресурс.Выяснить, каким будет этот медиа-тип, - сложная часть.
ответил Darrel Miller 31 Maypm09 2009, 23:33:17
0
Ничто не мешает вам создавать дополнительные ресурсы после добавления, то есть опубликовать ресурс, представляющий собой список X, на ресурс, представляющий собой список X, используя POST.Затем вы отправите обратно 201, созданный со списком URIS всех созданных ресурсов.Опять же, все это вполне допустимо.Что вы теряете, так это видимость посредникам после PUT, которые мешают им кэшировать или изменять конкретный ресурс по определенному URI.Хотя умный посредник будет обрабатывать 201 для целей кэширования.И наличие такого не мешает вам иметь каждый созданный ресурс с собственным URI после создания (после POST) и включать PUT /DELETE на этих ресурсах.Или комбинация.
ответил SerialSeb 1 J0000006Europe/Moscow 2009, 19:34:18

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132