Как разработать библиотечное приложение с Rest Api, включая базу данных - PullRequest
1 голос
/ 26 сентября 2019

Если вы разрабатываете библиотечное приложение, граждане могут брать и возвращать книги, как бы вы создавали его с точки зрения базы данных.

Я сделал это, я создал Книжный класс

@Entity
public class Book {
    private Integer id;
    private String title;
    private Integer numberOfCopies;

, и когда пользователь отправляет запрос гражданину / заем / {id} (с идентификатором книги Переменная numberOfCopies добавляет один вверх или вниз

@GetMapping(path = "citizen/borrow/{id}", produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public Book borrowBook(@PathVariable Integer id) {
    Book book = bookRepo.findById(id).orElseThrow(() -> new BookNotFoundException(id));
    Integer numberOfCopies = book.getNumberOfCopies();
    if (numberOfCopies == 0) throw new BookNotAvailableException();
    book.setNumberOfCopies(numberOfCopies - 1);
    bookRepo.save(book);
    return book;
}

как бы вы реализовали такое приложение? Это хороший стиль программирования или как вы думаете?

1 Ответ

2 голосов
/ 26 сентября 2019

Сначала , согласно практикам REST, ваша конечная точка (или ресурс) должна быть информативной.

Этот путь citizen/borrow/{id} выглядит так, будто вы заимствуете граждан, а не книги.Было бы более разумно сделать ресурс подобным этому: /v1/book/{id}/borrow как запрос POST, потому что будет выполнен модифицирующий запрос.

Второй , переместите вашу повторно используемую логику в @Servicelayer.

У меня есть правило никогда не вставлять хранилище в контроллеры.Все сохранения и обновления должны обрабатываться на уровне обслуживания и возвращать DTO (Объект передачи данных).

Третий , обработайте ваш ввод на уровне контроллера.

Ваш @PathVariable может быть нулевым.Это может вызвать проблемы глубже в коде.Почему бы просто не обработать это сразу и не выдать исключение с самого начала?

if (id == null)
    throw new new BookNotFoundException();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...