Мы пытаемся перестроить наш SOAP API на RESTful (используя ASP.NET Web Api).RESTful представление вызова RPC
Я знаю, что вопрос о том, как заменить вызовы в стиле RPC с помощью REST, очень много, но я все еще не нашел ничего, что меня достало, где я хочу. Это может быть провал воображения или фундаментальное непонимание принципов REST (я позволю вам быть судьей этого!)
Я создал пример, ниже которого грубо сопоставляется то, что я пытаюсь достигать.
Предположим, у нас есть ресурс, который я буду называть Бронирование
... GET/Заказ/бронирование/1
И у нас есть требование отменить этот заказ, который ранее были бы смоделированы с чем-то вроде.
... CancelBooking (1, Reasons.NoLongerRequired)
Так это ID бронирование и код причины.
Возможно, нам потребуется возможность отменить несколько заказов по одному запросу.
... CancelBooking ("1,2,3", Reasons.NoLongerRequired)
(Немного сырой, но я стараюсь держать пример простой!)
Как будем ли мы лучше всего моделировать это в архитектуре RESTful?
Одно из предложений заключается в том, что у нас есть ресурс, называемый чем-то вроде CancellationRequest, и мы отправляем один из них на сервер?
POST .../Bookings/CancellationRequest
{
"BookingIDs" : "1,2,3",
"CancellationReason" : "NotRequired"
}
Возможно, это выполнит обработку, а затем вернет перенаправление на отмененные бронирования (-ы)?
Но я не знаю, является ли это наилучшим подходом с точки зрения REST.
Может ли кто-нибудь посоветовать?
Большое спасибо. (И да, я не совсем уверен, почему я описываю включенные дополнительные/заказы - недостаток сна, вероятно! Я также возьму на борт то, что вы сказали о нижнем регистре). Предположим, мы хотим сохранить бронирование в качестве записи. Предположим, что глагол - это что-то вроде «suspend»? Что-то, что указывает, что мы хотим что-то сделать для этого бронирования, но мы не хотим его удалять. По существу изменение статуса. Я думаю, что я говорю, что я использовал плохой пример с «cancel». (нехватка сна снова?). Я взгляну на ссылку, которую вы включили. Еще раз спасибо. –
Это просто обновление, поэтому правильным глаголом будет 'PUT' с соответствующей полезной нагрузкой:' PUT/bookings /: id' с полезной нагрузкой чего-то типа {{status ":" cancel "," reason ":" Reasons.NoLongerRequired "}'. Я работал над многими системами, которые моделировали их «аннулирования» таким образом, и nary «DELETE», которые можно найти в API. – Palpatim
@Palpatim a PUT, как это было бы неуместно, так как PUT должен обновить весь ресурс, чтобы он соответствовал вашему телу. Это будет означать, что весь запрос на бронирование должен быть в вашем запросе, чтобы он был правильным; только отправка его частей (например, Status) приведет к обнулению всех остальных полей. Частичные обновления, такие как PATCH. Однако я не думаю, что это должен быть DELETE либо с тех пор, как ресурс фактически не удаляется. Чтобы использовать DELETE, я бы сказал, что было бы уместно, если бы этот ресурс больше не имел выборку после DELETE. – Sinaesthetic