Re[2]: REST и проверка корректности
От: Slicer [Mirkwood] Россия https://ru.linkedin.com/in/maksim-gumerov-039a701b
Дата: 17.02.18 09:33
Оценка:
Спасибо за ответ.

scf>PUT /resource/{id} — поля, которые может менять владелец ресурса

scf>PUT /resource/{id}/admin — поля, которые может менять только админ
Это означает, что поля из {id}/admin не входят в {id}? То есть GET тоже нужно вызывать дважды — один раз для {id}, второй для {id}/admin? Ну ок, конкретно одну частную задачу вы решили — если над ресурсом разрешены два разных вида операций (привилегированные и обычные), вы разбиваете ресурс на два таких, для которых этой многовариантности нет. При условии, что это возможно.

scf>POST /user/{id}/password — смена пароля

Это мне кажется неудачной идеей сразу по 3 причинам. Во-первых, это почти то же самое, что PUT /user/{id} с указанием только password (partial put) — фактически мы заводим новое представление ресурса лишь только для того, чтобы хакнуть обычное представление и разрешить себе то, что мы бы хотели сделать при помощи partial put, но стеснялись, потому что partial put это нехорошо. По идее для этого есть более кошерный PATCH в основной ресурс, а не через введение нового ресурса. Во-вторых, POST??? Это выглядит так, словно мы создаем некий ресурс, а не изменяем. В-третьих, опять-таки в частном случае вы из положения вышли, хорошо. Но такой подход (опять-таки выделить кусок всего ресурса, который будет меняться данным POSTом) будет с ростом количества операций выглядеть все страннее. Смотрите: 1) сначала мы точку для изменения количества данного товара сделаем /{id}/count, 2) потом окажется что нам нужно разные проверки осуществлять при покупке и продаже, и нам придется либо иметь отдельно /{id}/countForSell и /{id}/countForBuy, либо оставить только /{id}/count и тогда опять будет вопрос — как понять, идет ли речь об изменении количества в результате покупки товара или его продажи.

Slicer
Специалист — это варвар, невежество которого не всесторонне :)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.