Введение в Spring Data REST

Введение в Spring Data REST

1. обзор

Эта статья объяснит основыSpring Data REST и покажет, как его использовать для создания простого REST API.

В общем, Spring Data REST построен на основе проекта Spring Data и позволяет легко создавать управляемые гипермедиа веб-службы REST, которые подключаются к репозиториям Spring Data - все с использованием HAL в качестве движущего типа гипермедиа.

Он отнимает много ручной работы, обычно связанной с такими задачами, и делает реализацию основных функций CRUD для веб-приложений довольно простой.

2. Maven Зависимости

Для нашего простого приложения требуются следующие зависимости Maven:


    org.springframework.boot
    spring-boot-starter


    org.springframework.bootspring-boot-starter-data-rest

    org.springframework.boot
    spring-boot-starter-data-jpa


    com.h2database
    h2

Мы решили использовать Spring Boot для этого примера, но классический Spring также будет работать нормально. Мы также решили использовать встроенную базу данных H2, чтобы избежать дополнительных настроек, но пример может быть применен к любой базе данных.

3. Написание заявки

Мы начнем с написания доменного объекта, представляющего пользователя нашего сайта:

@Entity
public class WebsiteUser {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;
    private String email;

    // standard getters and setters
}

У каждого пользователя есть имя и адрес электронной почты, а также автоматически сгенерированный идентификатор. Теперь мы можем написать простой репозиторий:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository {
    List findByName(@Param("name") String name);
}

Это интерфейс, который позволяет выполнять различные операции с объектамиWebsiteUser. Мы также определили пользовательский запрос, который будет предоставлять список пользователей на основе заданного имени.

Аннотация@RepositoryRestResource является необязательной и используется для настройки конечной точки REST. Если бы мы решили опустить его, Spring автоматически создаст конечную точку в «/websiteUsers» вместо «/users».

Наконец, мы напишем стандартныйSpring Boot main class to initialize the application:

@SpringBootApplication
public class SpringDataRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestApplication.class, args);
    }
}

Это оно! Теперь у нас есть полнофункциональный REST API. Давайте посмотрим на это в действии.

4. Доступ к REST API

Если мы запустим приложение и перейдем кhttp://localhost:8080/ в браузере, мы получим следующий JSON:

{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}

Как видите, доступна конечная точка «/users», и у нее уже есть параметры «?page», «?size» и «?sort».

Также существует стандартная конечная точка «/profile», которая предоставляет метаданные приложения. Важно отметить, что ответ структурирован так, чтобы соответствовать ограничениям стиля архитектуры REST. В частности, он обеспечивает единый интерфейс и информативные сообщения. Это означает, что каждое сообщение содержит достаточно информации, чтобы описать, как обработать сообщение.

В нашем приложении еще нет пользователей, поэтому при переходе кhttp://localhost:8080/users будет отображаться пустой список пользователей. Давайте используем curl, чтобы добавить пользователя.

$ curl -i -X POST -H "Content-Type:application/json" -d '{  "name" : "Test", \
"email" : "[email protected]" }' http://localhost:8080/users
{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Давайте также посмотрим на заголовки ответа:

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked

Вы заметите, что возвращаемый тип содержимого - «application/hal+json». HAL - это простой формат, который дает последовательный и простой способ гиперссылки между ресурсами в вашем API. Заголовок также автоматически содержит заголовокLocation, который является адресом, который мы можем использовать для доступа к вновь созданному пользователю.

Теперь мы можем получить доступ к этому пользователю вhttp://localhost:8080/users/1

{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Вы также можете использовать curl или любой другой клиент REST для выдачи запросов PUT, PATCH и DELETE. Также важно отметить, что Spring Data REST автоматически следует принципам HATEOAS. HATEOAS является одним из ограничений стиля архитектуры REST, и это означает, что для поиска пути через API следует использовать гипертекст.

Наконец, давайте попробуем получить доступ к пользовательскому запросу, который мы написали ранее, и найти всех пользователей с именем «test». Это делается путем перехода кhttp://localhost:8080/users/search/findByName?name=test

{
  "_embedded" : {
    "users" : [ {
      "name" : "test",
      "email" : "[email protected]",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/1"
        },
        "websiteUser" : {
          "href" : "http://localhost:8080/users/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/search/findByName?name=test"
    }
  }
}

5. Заключение

[.iframe-fluid] ## В этом руководстве продемонстрированы основы создания простого REST API с помощью Spring Data REST. Пример, использованный в этой статье, можно найти в связанномGitHub project.