Я рассказал о рассмотрении архитектуры 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 testwsrest import 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.Test import 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. Вы можете скачать полный исходный код по ссылке для скачивания .