Не-CRUD операции в RESTful-сервисе

Что такое "RESTful" способ добавления операций без CRUD в службу RESTful? Скажем, у меня есть служба, которая разрешает CRUD доступ к таким записям:

GET /api/car/123           <- Returns information for the Car object with ID 123
POST /api/car              <- Creates a new car (with properties in the request)
PUT /api/car/123           <- Updates car 123 (with properties in the request)
DELETE /api/car/123        <- Deletes car 123    
POST /api/car/123/wheel/   <- Creates a wheel and associates it to car 123

Если я хочу изменить цвет автомобиля, я просто POST /api/car/123 и включу переменную POST для нового цвета.

Но скажем, я хочу купить автомобиль, и эта операция более сложна, чем простое обновление свойства "принадлежащей машине" записи пользователя. Является ли REST просто сделать что-то вроде POST /api/car/123/purchase, где «покупка» - это, по сути, имя метода? Или я должен использовать собственный HTTP-глагол, например, PURCHASE вместо POST

Или операции без CRUD полностью выходят за рамки REST?

92 голоса | спросил MikeWyatt 27 J000000Wednesday11 2011, 23:33:37

4 ответа


0

Думайте о покупке как о бизнес-объекте или как о ресурсе в словаре RESTful. При этом, покупка фактически создает новый ресурс. Итак:

POST /api/purchase

разместит новый заказ. На детали (пользователь, автомобиль и т. Д.) Следует ссылаться по идентификатору (или URI) внутри содержимого, отправляемого на этот адрес.

Неважно, что заказ автомобиля - это не просто ВСТАВКА в базу данных. На самом деле, REST не подразумевает представление таблиц вашей базы данных как операций CRUD. С логической точки зрения вы создаете заказ (покупку), но серверная сторона может выполнять столько этапов обработки, сколько пожелает.

Вы можете даже злоупотреблять протоколом HTTP еще больше. Используйте заголовок Location для возврата ссылки на вновь созданный заказ, тщательно выбирайте коды ответов HTTP, чтобы информировать пользователей о проблемах (на стороне сервера или клиента) ) и т. д.

ответил Tomasz Nurkiewicz 27 J000000Wednesday11 2011, 23:42:59
0

RESTful способ, насколько я понимаю, это то, что вам не нужны новые HTTP-глаголы, где-то есть существительное, которое будет означать, что вам нужно делать.

Купить машину? Ну разве не так

POST /api/order
ответил djna 27 J000000Wednesday11 2011, 23:41:24
0

То, что вы действительно делаете, это создаете заказ. Поэтому добавьте еще один ресурс для заказа и размещения и поместите туда во время процесса заказа.

Думайте с точки зрения ресурсов, а не вызовов методов.

Чтобы завершить заказ, вы, вероятно, завершите POST /api /order //или что-то подобное.

ответил Andrew Kothmann 27 J000000Wednesday11 2011, 23:40:36
0

Я чувствую, что API-интерфейсы REST помогают намного больше, чем просто семантика. Поэтому нельзя выбрать стиль RPC только из-за некоторых вызовов, которые, кажется, имеют больше смысла в стиле работы RPC. Примером является API Google Maps, чтобы найти направления между двумя местами. Выглядит так: http://maps.googleapis.com/maps/api /направления /JSON происхождения = Jakkur & амп;? назначения = Hebbal

Они могли бы назвать его «findDirections» (глагол) и рассматривать его как операцию. Скорее они сделали «направление» (существительное) как ресурс и рассматривали поиск направлений как запрос к ресурсу направлений (хотя внутри не могло быть реального ресурса, называемого направлением, и он мог бы быть реализован бизнес-логикой для поиска направлений, основанных на параметрах).

ответил Maruthi 19 J0000006Europe/Moscow 2015, 15:02:29

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

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

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