Рубрики
Без рубрики

Введение в Весенний отдых данных

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

Автор оригинала: baeldung.

1. Обзор

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

В целом, Spring Data REST построен поверх проекта Spring Data и позволяет легко создавать веб-сервисы REST, управляемые гипермедиа, которые подключаются к хранилищам данных Spring – все они используют 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 для этого примера, но классическая пружина также будет отлично работать. Мы также решили использовать встроенную базу данных 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);
}

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

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

Наконец, мы напишем стандартный основной класс Spring Boot для инициализации приложения :

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

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

4. Доступ к API REST

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

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

Как вы можете видеть, есть доступная конечная точка ” /users “, и у нее уже есть ” ?страница “, ” ?размер ” и ” ?сортировка ” параметры.

Существует также стандартная конечная точка ” /профиль “, которая предоставляет метаданные приложения. Важно отметить, что ответ структурирован таким образом, чтобы соответствовать ограничениям стиля архитектуры 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 для выдачи запросов на установку, ИСПРАВЛЕНИЕ и УДАЛЕНИЕ. Также важно отметить, что весенний отдых данных автоматически следует принципам HATEOAS. HATEOAS является одним из ограничений стиля архитектуры REST, и это означает, что гипертекст должен использоваться для поиска вашего пути через API.

Наконец, давайте попробуем получить доступ к пользовательскому запросу, который мы написали ранее, и найти всех пользователей с именем “тест”. Это делается путем перехода на 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. Заключение

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