2009-06-05 2 views
7

Предположим, у нас есть веб-приложение grails, в котором представлено несколько ресурсов.RESTful grails application: DRYing up UrlMapping

  • теги
  • URLs
  • пользователи

Приложение имеет классический веб-интерфейс, который пользователи взаимодействуют с и некоторыми администрациями. Мы хотим выставить ресурсы из приложения клиентам через RESTful API, и мы не хотим, чтобы эта часть приложения загромождала контроллеры и код, которые у нас уже есть. Итак, мы пришли к следующему:

Если веб-интерфейс предлагает host/app_path/url/[list|show|create], мы хотим, чтобы REST API находился в /host/app_path/rest/url.

Итак, мы закончили со следующим файлом UrlMappings:

Проблема заключается в том, что это не самое DRY вещь здесь. Это становится все хуже, поскольку мы добавляем больше ресурсов, таких как теги. Они будут переводить еще один трех блоков очень похожий код ...

Функции без CRUD будут такие вещи, как поиск с определенными критериями и такие ...

Мы попытались генерируя замыкания отображения с петлей , но безуспешно. Неужели мы полностью ошибаемся?

ответ

7

я бы рекомендовал следующее отображение:

"/rest/url/$id?"(resource:"urlRest") 

Ниже приведен метод HTTP для отображения действий, что это создало бы для urlRestController:

GET   show 
PUT   update 
POST  save 
DELETE  delete 

Я понимаю, почему вы можете отобразить/rest/url POST для сохранения и/rest/url/id PUT для обновления, но это противоречит смыслу этих глаголов. PUT должен быть единственным способом добавить новый URL-адрес и POST - единственный способ обновить URL-адрес. Выполнение этого так, как вы выложили, будет работать, и это может быть лучшим способом, если ваше ограничение состоит в том, чтобы сохранить ваш текущий код контроллера нетронутым. Тем не менее, я предполагаю, что ваш контроллер уже может быть закодирован для корректного отображения сопоставлений по умолчанию (update/delete дать ошибку, если нет идентификатора, показывать перенаправления, если нет идентификатора и т. Д.).

+1

Ahh, PUT/POST вещь: D – kungfoo

Смежные вопросы