我们应该在 Rest API 中分离请求和响应对象吗?
是的 - 它允许独立地发展请求和响应。如果在发出创建时遵循 REST 实践,则应返回201 - created
新创建对象的 ID。
如果客户端需要有关它的详细信息,客户端可以使用 ID + GET 来获取完整的资源表示。
还要考虑不要直接通过 REST 公开域对象。例如,有一个域实体对象——它可能会有一些与持久层相关的字段,如数据库 ID、createdOn、createdBy 等。这些字段不应发送给客户端。使用一个简单的 StudentDto(StudentResponse,StudentResponseDto 随便你怎么称呼它)表示,它只包含客户感兴趣的那些字段。
将域和响应对象分开还使您能够分别发展它们或更改数据表示。想象一下,您有一个 JPA 实体,并且在同一个类中同时使用 JPA 和 Jackson 注释 - 它非常混乱且难以阅读和维护。
更新:
如果您使用相同的对象由客户端修改并发送回服务器,我想您可以重用它并像这样建模:
得到
@GetMapping("/students/{id}")
public StudentDto getStudent(@PathVariable long id) {
return studentService.get(id);
}
更新(替换)
@PutMapping("/students/{id}/")
public ResponseEntity updateStudent(@PathVariable long id, @RequestBody StudentDto student) {
return new ResponseEntity(studentService.replaceStudent(id, student), HttpStatus.OK);
}
或者
更新(部分更新)
@PostMapping("/students/{id}/")
public ResponseEntity updateStudent(@PathVariable long id, @RequestBody StudentDto student) {
return new ResponseEntity(studentService.updateStudent(id, student), HttpStatus.OK);
}