Давайте создадим приложение Java Full-Stack Spring boot & React: Backend REST API / 2
Здравствуйте! В предыдущем уроке мы настроили проект Easytrans. В этом мы углубимся в API REST.
Мы научимся:
- Создать сущность
- Создайте репозиторий и выставьте его как конечные точки REST без использования какого-либо другого компонента контроллера.
- Создание запросов
- Пользовательский URL-адрес запроса
- Пользовательский базовый путь REST API
Создание сущности и репозитория
Создайте пакет с именем: модельи создайте класс: Маршрут.java например, как показано ниже:
package com.codeurinfo.easytransapi.model; import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
public class Route {
private Long id;
private String name;
private String start;
private String terminus;
public Route() {}
public Route(String name, String start, String terminus) {
this.name = name;
this.start = start;
this.terminus = terminus;
}
}
Такой простой класс.
@Организация аннотация должна сообщить базе данных, что этот класс будет сущностью, тогда как @Стол используется для присвоения пользовательского имени соответствующей таблице в БД. Вы можете посетить этот блог для получения дополнительной информации об этих двух аннотациях. Мы добавляем ограничение @Столбец(unique = true), чтобы избежать дублирования имен.
Далее мы собираемся создать репозиторий, поэтому создайте пакет с именем: хранилище в котором вы создаете класс: RouteRepository.java:
package com.codeurinfo.easytransapi.repository; import com.codeurinfo.easytransapi.model.Route;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource
public interface RouteRepository extends JpaRepository<Route, Long> { Optional<Route> findRoutesByName(@Param("name") String name);
}
- Мы используем @RepositoryRestResource вместо @Репозиторий потому что он напрямую предоставляет интерфейс репозитория как конечную точку REST, поэтому нет необходимости в другом контроллере REST, как в нашем случае.
Теперь наш серверный REST API готов! Давайте проверим это с помощью Postman.
- Запустите основной класс (EasytransApiApplication.java в нашем случае)
- Добрался до почтальона и сделал запрос http GET по этому URL-адресу: локальный хост: 9000/маршруты
В результате вы заметите, что маршруты массив пуст, это правильно, потому что у нас нет сохраненных записей; также Spring Data Rest сгенерировал полезные ссылки через объект «_links». Позже мы будем использовать «локальный: 9000/маршруты/поиск» для разных поисковых запросов
3 . Снова в почтальоне, давайте сделаем запрос POST Http по этому URL-адресу:локальный хост: 9000/маршрутыНа вкладке Body выберите raw и JSON, а затем вставьте тело ниже:
{
"name": "Rex-Adetikope",
"start": "Grand marche - Rex",
"terminus": "Adetikope"
}
Нажмите Отправлять для сохранения данных.
4 . Давайте попробуем наш предыдущий запрос GET: локальный хост: 9000/маршрутыТеперь массив маршрутов содержит постоянные данные.
5 . Теперь, когда наш REST API позволяет нам составлять список маршрутов и сохранять некоторые объекты маршрута, давайте сделаем поисковые запросы.
- Найдите конкретный маршрут, указав его имя в запросе GET:
- Обратите внимание, что после URL-адреса поиска, предоставленного Spring Data Rest, мы добавляем подпись метода запроса (найтиRoutesByName), за которым следует атрибут, указанный в @Парамкоторый здесь имя.
Настройка URL-адреса поиска
Вместо использования найтиRoutesByName в URL-адресе поиска давайте использовать более короткое имя: маршруты по имени .
Для этого перейдите в интерфейс репозитория и добавьте аннотацию @RestResource(путь = «routesByName»)наш интерфейс должен выглядеть так:
package com.codeurinfo.easytransapi.repository; import com.codeurinfo.easytransapi.model.Route;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
import org.springframework.data.rest.core.annotation.RestResource;
@RepositoryRestResource
public interface RouteRepository extends JpaRepository<Route, Long> {
@RestResource(path = "routesByName") Optional<Route> findRoutesByName(@Param("name") String name);
}
Сохраните и сделайте запрос GET для этого URL:
Как видите, мы получили ожидаемый результат, используя маршруты по имени вместо найтиRoutesByName.
Настройка базового пути
В реальном проекте большинство корневых путей REST API начинаются с domain/api/path-to-resources, но, как вы видите, мы напрямую вызываем path-to-resources после имени домена.
Чтобы добавить /api перед любым путем к ресурсу, откройте файл application.yml и добавьте ключ базового пути Spring и его значение, подобное этому:
spring:
data:
rest:
base-path: /api
Сохраните файл yml, попробуйте выполнить один из предыдущих запросов GET, вы увидите ошибку 404, ресурс не найден.
Это связано с тем, что теперь наш REST API будет использоваться с использованием базового пути /api/ до любого другого пути к ресурсам. Так:локальный хост: 9000/маршруты -> локальный хост: 9000/API/маршруты и т.п.
Вот! Поздравляем, вы создали базовый REST API Java Spring Boot, надеюсь, вы узнали что-то новое. Если это так, не забудьте нажать кнопку «Нравится» и подписаться на этот блог, чтобы получать уведомления о новых сообщениях.
В следующей статье мы добавим новые функции в наше приложение EasyTrans. Благодарим вас за участие в этом пути разработчика fullStack Java и React!