Как создать 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. Мы также рассмотрели примеры реализации низкоуровневых компонентов.

Сергей Бензенкоавтор-переводчик статьи «Learn How to build Restful web services using Spring»