Grails может определенно предоставить API REST, но уровень сложности при этом варьируется в зависимости от того, насколько зрелый (он же насколько RESTful) вы хотите API быть.
Основной отдых
Получить базовый уровень RESTfullness, когда вы управляете представлениями ресурсов в формате json или xml, используя полный диапазон глаголов HTTP и используя коды ответов HTTP, довольно легко. Есть 3 основных момента, чтобы получить это на месте:
Отображение URL
Вот пример того, как я написал свои преобразования URL в недавнем проекте, чтобы учесть больше RESTful URL:
// RESTful list mapping
name restEntityList: "/$controller"(parseRequest: true) {
action = [GET: "list", POST: "save"]
}
// RESTful entity mapping
name restEntity: "/$controller/$id"(parseRequest: true) {
action = [GET: "show", PUT: "update", POST: "update", DELETE: "delete"]
constraints {
id matches: /\d+/
}
}
Согласование содержания
Три различных способа, которыми Grails может управлять согласованием контента, делают структуру очень гибкой, позволяя поддерживать гораздо более широкий круг клиентов, которые могут не иметь возможности устанавливать такие вещи, как заголовок HTTP Accept.
Вы можете использовать согласование содержимого, чтобы по-разному отвечать на различные запросы, используя блок withFormat
в зависимости от того, что клиент указал, что он хочет. Эта мощная способность также может быть использована для создания версии вашего API, так же, как Github делает .
Статус ответа
В HTTP уже встроен великолепный механизм ответа, который позволяет вам использовать врожденные способности в архитектуре, такие как кешируемость и неограниченные операции. Хотя некоторые веб-браузеры не обрабатывают определенные коды ответов очень изящно, клиентские приложения, использующие ваш API, могут использовать их, чтобы значительно упростить свой внутренний код.
СУХОЕ ОТДЫХ
Один из лучших способов сделать ваше приложение RESTful и в то же время сделать его СУХИМЫМ - это максимально использовать возможности каркаса контроллера, поскольку CRUD практически одинаков для всех объектов домена. Эта статья о том, как сделать контроллер по умолчанию более RESTful, и эта статья об упрощении контроллера по умолчанию являются отличными ресурсами для получения большей мощности от лесов.
Расширенный отдых
Как только вы дойдете до этого, у вас будет довольно функциональный REST API для вашего приложения Grails. Вы можете выполнять все основные операции CRUD, а с ресурсами довольно легко работать.
Следующие уровни лестницы к настоящему RESTful гипермедиа API, однако, труднее всего достичь намного . Исправить это на дорожной карте для Grails, но в настоящее время это довольно болезненно. Эти штуки:
- Гипермедиа ресурсы
- Типы содержимого
- Versioning
К счастью, есть плагин , который делает определение пользовательских маршаллеров очень простым, что позволяет нам довольно легко покрыть эти три оставшиеся части головоломки REST.
Наконец, есть аспект защиты всего этого. В целом, Spring Security поможет вам обеспечить безопасность доступа пользователей к вашему API. Поскольку большая часть доступа к API осуществляется из приложения и не видна пользователю, обычная или дайджест-проверка подлинности обычно является наиболее простым способом. - это и OAuth-плагин , основанный на Spring Security. Я лично не использовал его, поэтому я не могу поручиться за его стабильность, но он выглядит довольно хорошо для меня.
В общем, Grails достаточно гибок и достаточно силен, чтобы выполнять REST очень и очень хорошо, но работа еще не выполнена, чтобы заставить его выполнять REST чисто из коробки.