Я рассказал о рассмотрении архитектуры RESTful и о том, как создавать веб-службы RESTful, используя Jersey JAX-RS [JSR 311] в JAVA. Сегодня я собираюсь обсудить, как создавать веб-сервисы RESTful с использованием платформы Grails.
GRAILs Framework — это платформа, которая предоставляет комплексное решение для создания веб-приложения с нуля для продвижения интуитивно понятного веб-приложения RIA. Grails потенциально может стать универсальным магазином для всех ваших корпоративных приложений. Grails является модульной, что позволяет вам выбирать, какие модули подходят для вашего приложения.
Grails основан на плагине и поддерживает Конвенцию по конфигурации. Он предоставляет платформу для создания приложений с использованием различных последних плагинов, таких как H2, JQuery, EHCache и т. Д. Пожалуйста, обратитесь сюда, чтобы получить больше понимания о Grails
Плагин очень легко настроить в конфигурационном файле Grails, например, BuildConfig.groovy. Прежде чем приступить к созданию веб-сервиса RESTful, нам нужно создать приложение grail с помощью следующей команды.
|
1
2
|
grails_apps> grails create-app TestWSRest| Created Grails Application at D:\Demo\grail_app\ TestWSRest |
Приведенная выше команда создаст приложение TestWSRest с необходимой средой, необходимой для первоначальной разработки приложения. Как только мы создадим приложение Grails, нам нужно выполнить следующие шаги для установки плагина RESTful для JAX-RS.
- Добавьте плагин JAXRS в BuildConfig.grovvy
|
1
2
3
|
plugins { compile ":jaxrs:0.8" } |
Запустите команду установки плагина из командной строки
|
1
|
D:\Demo\grail_app\ TestWSRest>grails InstallPlugin jaxrs |
Команда выше установит плагин Jaxrs в имя проекта Grails TestWSRest
Примечание: JAXRS — это плагин реализации JSR 311 для Grails
Ресурсы
В качестве веб-сервисов RESTful используются ресурсы, ориентированные на архитекторов Мы должны создать ресурс, который будет сопоставлен с URL, чтобы получить доступ к этим ресурсам через HTTP.
Над командой создадут UserResource.groovy и UserResourceTest.groovy
|
1
2
3
|
D:\Demo\grails_app\\TestWSRest>grails create-resource Users| Created file grails-app/resources/testwsrest/UsersResource.groovy| Created file test/unit/testwsrest/UsersResourceTests.groovy |
|
01
02
03
04
05
06
07
08
09
10
11
12
|
package testwsrest class UserService { //Get list of users from DB def getUser() { return User.list() } //Create User in DB def addUser(User user){ user.save() return user } } |
Приведенные выше ресурсы будут отображать http: // localhost: 8080 / TestWSRest / api / users для доступа к методу getUsersRepresentation с использованием метода HTTP GET. Имя метода может быть любым, но мы должны использовать логическое имя для лучшего
Запустите приложение
Чтобы запустить приложение, введите сначала запустите приложение Grails, используя команду ниже и URL ниже
|
1
|
grails run-app |
Браузер должен теперь отображать «Hello Users»
Операция CRUD с использованием Grails RESTful web
Для работы операции CRUD в User создайте класс UserService, который будет использовать домен пользователя для выполнения операции CRUD в таблице User в базе данных.
Сначала мы создадим UserService, который будет использовать пользовательский домен User для выполнения процесса RDBMS. Здесь мы создадим два метода getUser для получения списка пользователей и addUser для вставки записи пользователя в БД
|
01
02
03
04
05
06
07
08
09
10
11
12
|
package testwsrest class UserService { //Get list of users from DB def getUser() { return User.list() } //Create User in DB def addUser(User user){ user.save() return user } } |
Ресурсы:
Мы изменим существующий UserResource и добавим getUser с аннотацией @GET и createUser с аннотацией @POST для обработки операций GET и POST HTTP.
- @Path будет пользователем для определения местоположения ресурсов
- @Consumes и @Produces определяют тип контента для потребления и производства соответственно.
- Конвертер XML — это пакет, который конвертирует объект домена в XML
Внедрение зависимостей . Мы будем использовать внедрение зависимостей Grail для внедрения UserService в UserResource, просто объявив класс обслуживания внутри класса ресурсов. Внутренний интерфейс Grails использует внедрение Spring-зависимостей для автоматического внедрения сервисов.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package testwsrestimport grails.converters.XML import javax.ws.rs.Consumes import javax.ws.rs.GET import javax.ws.rs.POST import javax.ws.rs.Path import javax.ws.rs.Produces@Path('/api/users') @Consumes(['application/xml','application/json']) @Produces(['application/xml','application/json']) class UsersResource { UserService userService// automatically inject(IOC) to UserResource@GET String getUsers() { def xml =userService.getUser() as XML return xml }@POST String createUsers(User user) { userService.addUser(user) return user as XML } } |
тестирование
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package testwsrest import org.grails.jaxrs.itest.IntegrationTestCase import org.junit.Testimport static org.junit.Assert.*class UsersResourceTests extends IntegrationTestCase { @Test void testPostAndGet() { def headers = ['Content-Type':'application/json', 'Accept':'application/xml'] def content = '{"class":"testwsrest.User","username":"Sam","password":"Hill"}' def expected = '[<?xml version="1.0" encoding="UTF-8"?><user id="1"><password>Hill</password><username>Sam</username></user>]]' def User user=new User(); user.setUsername("John") user.setPassword("john@") // create new User sendRequest('/api/users', 'POST', headers, content.bytes) assertEquals(200, response.status) assertEquals(expected, response.contentAsString) assertTrue(response.getHeader('Content-Type').startsWith('application/xml')) // get users sendRequest('/api/users', 'GET', headers) assertEquals(200, response.status) assertEquals("[${expected}]".toString(), response.contentAsString) assertTrue(response.getHeader('Content-Type').startsWith('application/json')) } } |
Ниже приведен простой интеграционный тест с использованием IntegrationTestCase
RESTful сервисы с использованием Scaffolding:
Плагин grails-jaxrs поддерживает скаффолдинг для генерации интерфейса сервиса RESTful на основе классов домена. Ниже приведены инструкции по использованию лесов.
- Создать класс домена с помощью командной строки
- D: \ Demo \ grails_app \\ TestWSRest> grails createCommand Users
- Создайте класс ресурсов с помощью плагина JAXRS generateREso
- D: \ Demo \ grails_app \\ TestWSRest> пользователи grails generate-resource
Выше команда будет автоматически генерировать RESTful веб-сервисы на основе домена пользователя
Вывод
В этой статье я рассмотрел, как создать веб-сервис RESTful в платформе Grails с помощью плагина JAXS. Вы можете скачать полный исходный код по ссылке для скачивания .