Как создать RESTful-сервис с помощью Spring
Существует множество способов создать RESTful веб-сервис. Но использование Spring Framework обладает некоторыми преимуществами. Этот фреймворк предоставляет предварительно настроенные компоненты, внедрение зависимости и инверсию управления (IoC). Что особенно востребовано при создании RESTful веб-сервисов.
Что такое REST?
REST, Representational State Transfer («Передача состояния представления») – это архитектура построения веб-приложений, основанная на клиент-серверной модели и использующая кэшируемый протокол коммуникации.
В REST почти во всех случаях используется протокол HTTP. Архитектурный стиль подходит для разработки любых сетевых приложений.
Общие принципы Spring и REST
Spring обладает преимуществами, которые упрощают создание сложных RESTful веб-сервисов. REST – это стиль архитектуры, который удобен для разработки веб-приложений.
Spring framework упрощает разработку приложений со слабой связностью. Он позволяет создавать веб-сервисы с использованием любых компонентов фреймворка и в будущем заменять их на другие.
Преимущества REST в Spring Framework
В то время как разработчик работает над созданием программы, фреймворк берёт на себя реализацию API транзакций, API JMX, API JMS и т.д. Spring framework может быть использован для реализации решений на базе Java Enterprise (JEE) и других стандартов.
Главные преимущества Spring framework:
- Может использоваться для разработки любого Java-приложения.
- Многомодульный фреймворк.
- Может применять для разработки различных слоёв приложения.
- Реализует принцип инверсии управления (IoC) – данный фреймворк хорошо известен слабой связностью своих модулей. Это помогает встраивать и извлекать модули из приложений, когда это необходимо. Поэтому когда требуется исправить ошибки в определённом компоненте приложения, можно просто заменить этот модуль другим. При этом приложение продолжает работать. Кроме этого IoC помогает реализовать внедрение зависимостей.
- Внедрение зависимости – позволяет модулям иметь слабую связность и помогает извлекать зависимости от конкретных объектов.
- Spring framework позволяет создавать и управлять конфигурациями, а также жизненными циклами объектов приложения.
Spring framework поддерживает два подхода к построению RESTful-сервисов: MVC с ModelAndView и HTTP message converter.
Подход ModelAndView – хорошо документирован. Он позволяет соединить модель REST с моделью MVC.
HTTP message converter – это новый способ с использованием класса HttpMessageConverter с аннотациями. Он прост в реализации.
Настройка среды
Чтобы создать RESTful веб-сервис с помощью Spring framework, нам потребуются следующие ресурсы:
- JDK версии 1.8 или выше.
- Maven 3.0 +.
- Eclipse IDE или любая другая среда разработки.
- Spring framework.
Пример приложения
В этом примере приложения для сборки проекта используется Maven. Мы проверим каждый компонент, который потребуется для приложения.
Сначала рассмотрим файл pom.xml, чтобы определить основные понятия и их иерархию.
Листинг 1: – пример файла конфигурации pom.xml
Этот файл содержит все зависимости и плагины, необходимые для процесса сборки Maven.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework.eduonix</groupId>
<artifactId>spring-rest-service-eduonix</artifactId>
<version>0.1.0</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Листинг 2: – пример файла ресурсов
Рассмотрим файл ресурсов. Это будет старый добрый Java-класс с конструктором и акцессорами.
package com.spring.rest.eduonix;
public class HelloRest {
private final long idnty;
private final String contstr;
public HelloRest(long idnty, String contstr) {
this.idnty = idnty;
this.contstr = contstr;
}
public long getIdnty() {
return idnty;
}
public String getContstr() {
return contstr;
}
}
Листинг 3: – файл контроллера, обрабатывающего HTTP-запросы
В RESTful контроллер веб-сервиса – это главный компонент, который обрабатывает HTTP-запросы. Аннотация @RestController используется для идентификации компонентов. Приведенный ниже код является примером контроллера для файла ресурсов, исходный код которого приведен выше.
package com.spring.rest.eduonix;
import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloRestController {
private static final String templatestr = "Hello RESTful, %s!";
private final AtomicLong counterno = new AtomicLong();
@RequestMapping("/hellorest")
public HelloRest hellorest(@RequestParam(value="strname", defaultValue="World") String strname) {
return new HelloRest(counterno.incrementAndGet(),
String.format(templatestr, strname));
}
}
При выполнении этого кода контроллера программа выводит переданные значения.
Заключение
В этой статье мы рассмотрели особенности создания RESTful веб-сервисов в Spring framework. Мы также рассмотрели примеры реализации низкоуровневых компонентов.