2014-11-20 7 views
5

фон:Использование HTTP DELETE метода для отмены действия в ходе

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

Они могут использовать GET и POST методы на /api/v1/orders, чтобы разместить заказ и просмотреть список всех размещенных ими заказов. Они также могут использовать метод GET на /api/v1/orders/<order_id>, чтобы просмотреть конкретную информацию одного заказа.

Необходимо указать способ отмены заказа, однако сами записи должны храниться.

Я хотел бы получить обратную связь от более опытных разработчиков о том, будет ли это быть вменяемым решение для:

а) осуществлению DELETE глагола на /api/v1/current_orders/<order_id>, который будет удалить его из списка «ток» заказы (отмечая его отмену). Недостатком является то, что он будет использовать другое существительное, которое может ввести в заблуждение.

б) реализовать DELETE глагол на /api/v1/orders/<order_id> с теми же функциональными возможностями, что и в а). Это несколько вводит в заблуждение, поскольку сущность не будет действительно удалена, и потребитель должен знать об этом.

с) реализовать POST глагол на /api/v1/cancellations/<order_id> (или POST на /api/v1/cancellations с order_id в полезной нагрузке JSON). Это кажется менее идеальным, потому что ресурс не будет создан в результате этого запроса. Однако последствия использования этой конечной точки кажутся более ясными.

d) ...?

Вопрос:

Я знаю, что не всегда является «идеальным» решением для проектирования конечных точек для REST API, но имея в виду необходимость ясности и интуитивность и с высоко ценим передовой опыт, какой из вариантов «оптимальный»?

ответ

3

Как насчет PATCH глагола на /api/v1/orders/<order_id> с указанием его отмены?

HTTP PATCH: Позволяет выполнять частичные модификации в объекте. В то время как POST создает новый, а PUT заменяет существующий, PATCH просто обновляет свойства, которые вы отправляете, оставляет остальное на них.

Вам нужно будет только отправить что-то вроде { isCancelled:true} как HTTP PATCH, тогда ваш код обновит сущность и предпримет меры, как отменит любую выдающуюся работу.