Как создать 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»