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

Создавайте API-интерфейсы RESTful с помощью Spring Boot + MongoDB

1. Обзор В настоящее время веб-приложение часто разделяется на два компонента – интерфейс… С тегами java, учебник, mongodb, весенняя загрузка.

1. Обзор

В настоящее время веб-приложение часто разделяется на два компонента – интерфейс и серверную часть.

С ростом популярности интерфейсных технологий, таких как Angular и React, бэкэнд-функции часто представлены в виде API RESTful.

В этом уроке мы создадим API-интерфейсы RESTful с использованием Spring Boot . В то же время мы будем использовать Весенние данные MongoDB для обеспечения постоянной поддержки в нашем приложении путем подключения к MongoDB.

2. Предпосылки

Нам нужен набор стандартных инструментов:

  • Java 8 или более поздней версии
  • Инструмент сборки (Maven или Gradle)
  • Среда разработки (IntelliJ или Eclipse)

Мы будем использовать комбинацию Java 8, Gradle и IntelliJ для нашей реализации.

Чтобы быстро создать приложение Spring Boot, мы будем использовать Spring Initializr . Кроме того, мы установим и настроим MongoDB .

3. Приложение

Давайте создадим API-интерфейсы RESTful для приложения для регистрации пользователей. Для простоты мы просто добавим функции для выполнения операций CRUD (Создание, чтение, обновление и удаление).

Как только приложение Spring Boot будет создано, мы создадим файл application.properties с деталями конфигурации MongoDB:

spring.data.mongodb.database=springboot_mongo_db

3.1. Сущность

Во-первых, мы создадим Пользователь сущность с базовыми свойствами, такими как имя , |/фамилия , и электронная почта :

@Getter
@Setter
public class User {
    @Id
    private String id;

    private String firstName;
    private String lastName;
    private String email;
    private String phone;
    private String address;
}

Здесь мы использовали @Id аннотация для определения идентификатора.

В то же время мы использовали @Getter и @Setter аннотации, предоставленные Проектом Ломбок для автоматического создания геттеров/сеттеров.

3.2. Хранилище

Затем мы создадим интерфейс UserRepository , который обеспечивает базовые операции с базой данных, используя данные Spring, предоставленные MongoRepository :

public interface UserRepository extends MongoRepository {
}

3.3. Услуга

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

Для этого давайте создадим Регистрацию интерфейс для определения абстракции:

public interface Registration {
    USER registerUser(USER user) throws Exception;

    USER getUser(ID userId) throws Exception;

    USER updateUser(USER user) throws Exception;

    void deleteUser(ID userId) throws Exception;
}

Затем мы создадим класс Registration Impl для реализации интерфейса Регистрация :

@Service
public class RegistrationImpl implements Registration {
    @Autowired
    private UserRepository userRepository;

    @Override
    public User registerUser(User user) throws Exception {
        user = userRepository.save(user);
        return user;
    }

    @Override
    public User getUser(String userId) throws Exception {
        User user = userRepository.findById(userId);
        return user;
    }

    public List getAllUser() throws Exception {
        List users = userRepository.findAll();
        return users;
    }

    @Override
    public User updateUser(User user) throws Exception {
        user = userRepository.save(user);
        return user;
    }

    @Override
    public void deleteUser(String userId) throws Exception {
        if (userId == null) {
            throw new Exception("user id is null");
        } else {
            userRepository.delete(userId);
        }
    }
}

Обратите внимание, что мы использовали аннотацию @Service для объявления класса Регистрации Impl в качестве службы для загрузки Spring. Кроме того, мы использовали аннотацию @Autowired для введения зависимости UserRepository .

3.4. Контроллер

Теперь, когда у нас готовы сущность, репозиторий и служба, мы создадим класс RegistrationController для предоставления API-интерфейсов:

@RestController
public class RegistrationController {
    @Autowired
    private RegistrationImpl registrationImpl;
}

Здесь мы использовали аннотацию @RestController , чтобы объявить ее как контроллер API RESTful.

Сначала мы добавим метод регистрация пользователя для регистрации пользователя (СОЗДАНИЯ):

@PostMapping(path = "/registerUser")
public ResponseEntity registerUser(@RequestBody User user) throws Exception {
    HashMap resp = new HashMap<>();
    registrationImpl.registerUser(user);
    resp.put("user", user);
    return new ResponseEntity<>(resp, HttpStatus.OK);
}

Вуаля, мы готовы с нашим первым RESTful API для регистрации пользователя.

Давайте попробуем это с помощью следующей команды curl:

curl -X POST "http://localhost:8080/registerUser" -H "Content-Type: application/json" \
-d '{"email": "xyz@email.com", "firstName": "norman", "lastName": "lewis", "phone": "90909090"}'

Затем давайте добавим метод getUser для поиска пользователя по идентификатору (ЧИТАТЬ):

@GetMapping("/getUser" )
public ResponseEntity getUser(@RequestParam("id") String id) throws Exception {
    User user = registrationImpl.getUser(id);
    return new ResponseEntity<>(user, HttpStatus.OK);
}

Таким образом, мы можем использовать завиток для чтения пользователя:

curl -X GET "http://localhost:8080/getUser?id=5e0a0a393844b64a1548c4d9"

Аналогично, мы можем определить метод getallusers для извлечения всех пользователей:

@GetMapping("/getAllUser" )
public ResponseEntity getAllUser() throws Exception {
    List users = registrationImpl.getAllUser();
    return new ResponseEntity<>(users, HttpStatus.OK);
}

Затем мы добавим метод обновить пользователя для обновления пользователя (ОБНОВЛЕНИЕ):

@PutMapping(path = "/updateUser")
public ResponseEntity updateUser(@RequestParam("id") String id, @RequestBody User user) 
throws Exception {
    HashMap resp = new HashMap<>();
    registrationImpl.updateUser(user);
    resp.put("user", user);
    return new ResponseEntity<>(resp, HttpStatus.OK);
}

Наконец, давайте добавим метод deleteUser для удаления пользователя (УДАЛИТЬ):

@DeleteMapping("/deleteUser")
public ResponseEntity deleteUser(@RequestParam("id") String id) throws Exception {
    registrationImpl.deleteUser(id);
    HashMap resp = new HashMap<>();
    resp.put("message", "User is successfully deleted");
    return new ResponseEntity<>(resp, HttpStatus.OK);
}

3.5. Утверждение

Затем мы добавим функцию проверки компонентов в наши API-интерфейсы с помощью hibernate-validator .

Во-первых, мы добавим зависимость в build.gradle :

compile group: 'org.hibernate', name: 'hibernate-validator', version: '5.0.0.Final'

Затем мы добавим несколько аннотаций, таких как @NotNull и @Электронная почта для Пользователя сущности.

public class User {
    // ...

    @NotNull(message = "First Name is mandatory")
    private String firstName;

    @NotNull(message = "Last Name is mandatory")
    private String lastName;

    @NotNull(message = "Email is mandatory")
    @Email(message = "Not valid email")
    @Indexed(unique=true)
    private String email;

    @NotNull(message = "Phone Number is mandatory")
    private String phone;    
}

Далее мы будем использовать Проверяющий прослушиватель событий Mongo для регистрации в качестве компонента в основном классе – Приложение :

@SpringBootApplication
public class Application {
    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }

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

Наконец, мы изменим метод registerUser в Контроллере регистрации для проверки объекта пользователя:

@PostMapping(path = "/registerUser")
public ResponseEntity registerUser(@RequestBody User user) throws Exception {
    HashMap resp = new HashMap<>();
    try {
        registrationImpl.registerUser(user);
    } catch (ConstraintViolationException e) {
        HashMap messages = new HashMap<>();
        e.getConstraintViolations().stream().forEach(constraintViolation -> {
            messages.put(
                    constraintViolation.getPropertyPath().toString(),
                    constraintViolation.getMessage());
        });
        resp.put("error", true);
        resp.put("messages", messages);
    }
    resp.put("user", user);
    return new ResponseEntity<>(resp, HttpStatus.OK);
}

Вот и все! Мы готовы рассмотреть валидацию:

curl -X POST "http://localhost:8080/registerUser" -H "Content-Type: application/json" -d '{"email": "xyz@email.com"}'

Здесь мы не предоставили Имя , фамилия и телефон . Таким образом, ответом будет:

{"messages":{"firstName":"First Name is mandatory","lastName":"Last Name is mandatory","phone":"Phone Number is mandatory"},"error":true,"user":{"id":null,"firstName":null,"lastName":null,"email":"xyz12@email.com","phone":null,"address":null}}

3.6. Интеграция Чванства

До сих пор мы использовали curl для запроса наших API. Теперь мы интегрируем документацию Swagger 2 для наших API-интерфейсов с использованием Springfox.

Все, что нам нужно, это добавить зависимости Springfox в build.gradle :

compile "io.springfox:springfox-swagger2:2.9.2"
compile 'io.springfox:springfox-swagger-ui:2.9.2'

Затем мы пометим основной класс аннотацией @EnableSwagger2:

@EnableSwagger2
@SpringBootApplication
public class Application {

    // ...
}

Вот и все! Наши спецификации API готовы и доступны по адресу http://localhost:8080/swagger-ui.html .

4. Вывод

В этом уроке мы создали API-интерфейсы RESTful для приложения регистрации пользователей с использованием SpringBoot и Spring Data MongoDB. Кроме того, мы использовали Project Lombok для сокращения шаблонного кода и API-интерфейсов Springfox для документации Swagger 2.

Все реализации кода доступны на Github

Пожалуйста, дайте мне знать, что вы думаете по этому поводу! Спасибо за чтение.

Оригинал: “https://dev.to/smartyansh/create-restful-apis-using-spring-boot-mongo-db-6cf”