Статьи

Grails — RESTful Webservice с использованием плагина JAX-RS

Я рассказал о рассмотрении архитектуры 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.

  1. Добавьте плагин 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 на основе классов домена. Ниже приведены инструкции по использованию лесов.

  1. Создать класс домена с помощью командной строки
    1. D: \ Demo \ grails_app \\ TestWSRest> grails createCommand Users
    2. Создайте класс ресурсов с помощью плагина JAXRS generateREso
      1. D: \ Demo \ grails_app \\ TestWSRest> пользователи grails generate-resource

Выше команда будет автоматически генерировать RESTful веб-сервисы на основе домена пользователя

Вывод

В этой статье я рассмотрел, как создать веб-сервис RESTful в платформе Grails с помощью плагина JAXS. Вы можете скачать полный исходный код по ссылке для скачивания .

Ссылка: Grails — RESTful Webservice с использованием плагина JAX-RS от нашего партнера JCG Нитина Кумара в блоге Tech My Talk .