如何使用 Rest API 设计库应用程序,包括数据库



如果你正在设计一个图书馆应用程序,让公民借书和归还书籍,你会如何从数据库的角度设计它。

我这样做了,我创建了一个书籍类

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

以及当用户向公民/借用/{id} 发出请求时(使用书籍 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;
}

您将如何实现这样的应用程序?这是好的编程风格还是你的想法?

首先,根据 REST 实践,终结点(或资源(应该是自描述的。

这条路看起来citizen/borrow/{id}像是在借公民,而不是书。像这样制作资源会更有意义:/v1/book/{id}/borrow作为 POST 请求,因为将执行修改查询。

其次,将可重用逻辑移动到@Service层。

我有一个规则,永远不要将存储库注入控制器。所有保存和更新都应在服务层中处理,并返回 DTO(数据传输对象(。

第三,在控制器层处理您的输入。

您的@PathVariable可能为空。这可能会导致代码中出现更深层次的问题。为什么不立即处理它并从一开始就抛出异常呢?

if (id == null)
throw new new BookNotFoundException();

最新更新