我正在为许多资源设计 REST API,我需要维护至少 2 个相同格式的表示(例如 JSON),它们仅在它们公开的数据量上有所不同。
例如,我有通过 REST 公开的书籍、出版商和作者。所以我有 3 个资源集合books
:publishers
和authors
. 当请求一本书时,我希望它包含关于其作者和出版商的最少信息——只是名称、ID 和指向其完整表示的超链接。
GET /books/12345
200 OK
{
id: "12345",
title: "My Book",
authors: [
{id:"111", name:"J. Smith", _href:"/authors/111"},
{id:"222", name:"J.R.R. Tolkien", _href:"/authors/222"}
],
publisher: {id:"333", name:"HarperCollins", _href:"/publishers/333"},
}
当用户请求时,例如/publishers/333
,它应该获得更多关于它的信息,而不仅仅是名称和 ID:
{
id: "333",
name: "HarperCollins",
address : { ... },
contact : { ... },
logo : { ... }
}
在我的应用程序中,我有 3 个类和Book
,其中包含发布者和作者集合。我正在使用 Jackson 和 Spring MVC 通过 REST API 将所有实体公开为 JSON。Publisher
Author
Book
@RequestMapping("/books/{id}")
@ResponseBody
public Book getBook(String id) {
return getBookById(id);
}
@RequestMapping("/authors/{id}")
@ResponseBody
public Book getAuthor(String id) {
return getAuthorById(id);
}
现在的问题:
- 在这种情况下,我如何告诉视图应该呈现哪个对象的哪些字段?
- 我是否应该将我的每个实体拆分为两个 - 一个是简短的,另一个是完整的表示(例如
AuthorReference
andAuthor
,PublisherReference
andPublisher
)。 - 如果我选择选项#2,我应该更喜欢组合还是概括?
- 是否有任何最佳实践如何处理 REST 应用程序中相同实体表示的不同分解?