Restlet несколько действий с одним Объектом

Я пытаюсь выяснить, как лучше всего разметить ряд API Restlet. У меня есть Пользовательский объект, который мог бы начать стандартные операции CRUD, который соответствует приятно отдыху, но существуют другие также как "измененный пароль", или "оконечные".

Что лучший способ состоит в том, чтобы разметить это?

Вот то, что я думал:

/1.0/user/update        //perhaps this would just be a PUT on /1.0/user
/1.0/user/resetPassword //This would reset the password, but also send an email.
/1.0/user/terminate     //This might do some additional cleanup

Затем я сделал бы UserResource, который действительно присоединит как это

/1.0/user/{actionType}

И код обработки мог бы быть похожим на этот (psuedo):

action = request.getAttributes().get("actionType");
if (action == "update") {
   do update
} elif (action == "resetpassword") {
   do resetpassword
} elif (action == "terminate") {
   do terminate
}

Действительно плохая идея? Действительно идея ниндзя?

1
задан mlathe 14 August 2010 в 04:42
поделиться

2 ответа

Думаю, это нормальная идея. Если вы хотите, чтобы ваше приложение было RESTful, вам действительно нужно предоставить ссылки в представлении для вашего ресурса User и задокументировать их как URI, которые выполняют выбранные действия.

Sun Cloud API делает именно это :

  • GET VM возвращает виртуальную машину представления, включая «контроллеры», которые являются URI, которые выполняют функции (см. описание типа носителя VM ])
  • Клиент знает о типе носителя, распознает контроллеры (например, виртуальная машина обеспечивает «запуск», «остановку» и т. Д.
  • URI ресурса управления для этой конкретной виртуальной машины находится прямо здесь

Итак, как вы можете видеть , если вы используете /1.0/user/resetPassword или /1.0/user?op=resetPassword или /1.0/resetPassword?userId=xyzzy , это немного неактуально , поскольку клиент на самом деле не должен заботиться о нем, он просто следует по ссылкам в представлениях.

Кроме того, не забудьте использовать POST для таких операций, поскольку они обычно не идемпотентны и, вероятно, имеют побочные эффекты.

1
ответ дан 2 September 2019 в 22:09
поделиться

А как насчет этих?

PUT /user/bob 
DELETE /user/bob/password 
DELETE /user/bob 

и не забывайте, что Могси сказал, что клиент должен обнаруживать эти URL-адреса из какого-то другого документа, он не должен знать их заранее.

1
ответ дан 2 September 2019 в 22:09
поделиться
Другие вопросы по тегам:

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