Допустим, у нас есть веб-приложение grails, предоставляющее несколько ресурсов.
Приложение имеет классический веб-интерфейс, с которым взаимодействуют пользователи и администрация.
Мы хотим представить ресурсы из приложения клиентам через RESTful API, и мы не хотим, чтобы эта часть приложения загромождала контроллеры и код, который у нас уже есть.
Итак, мы придумали следующее:
Если веб-интерфейс предлагает host/app_path/url/[list|show|create]
, мы хотим, чтобы REST API был на /host/app_path/rest/url
.
Итак, мы получили следующий файл UrlMappings:
class UrlMappings {
static mappings = {
"/$controller/$action?/$id?"{
}
/* adding new urls and listing them */
"/rest/url"{
controller = "urlRest"
action = [POST: "save", PUT: "save", GET: "list", DELETE:"error"]
}
/* accessing a single url */
"/rest/url/$id"{
controller = "urlRest"
action = [POST: "update", PUT: "update", GET: "show", DELETE: "delete"]
}
/* non-crud stuff on urls */
"/rest/url/$action?/$id?"{
controller = "urlRest"
}
"/"(view:"/index")
"500"(view:'/error')
}
}
Проблема в том, что это не самая сухая вещь здесь. Это ухудшается, когда мы добавляем больше ресурсов, таких как теги. Они переведут еще на три блока очень похожего кода ...
Не грубые функции - это такие вещи, как поиск по определенным критериям и тому подобное ...
Мы попытались сгенерировать замыкания отображения с помощью цикла, но безуспешно. Мы полностью на неправильном пути?