私は多くのリソース用にRESTAPIを設計していますが、公開するデータの量だけが異なる同じ形式(JSONなど)の表現を少なくとも2つ維持する必要があります。
たとえば、RESTを介して公開している本、出版社、著者がいます。したがって、リソースの3つのコレクションがあります: books
、、。本をリクエストするときは、著者と出版社に関する最小限の情報(名前、ID、完全な表現へのハイパーリンク)を含めるようにします。publishers
authors
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
がPublisher
あります。Author
ここにBook
は、発行者と作成者のコレクションが含まれています。そして、JacksonとSpring MVCを使用して、RESTAPIを介してすべてのエンティティをJSONとして公開しています。
@RequestMapping("/books/{id}")
@ResponseBody
public Book getBook(String id) {
return getBookById(id);
}
@RequestMapping("/authors/{id}")
@ResponseBody
public Book getAuthor(String id) {
return getAuthorById(id);
}
今の質問:
- どの場合、どのオブジェクトのどのフィールドをレンダリングする必要があるかをビューに伝えるにはどうすればよいですか?
- 代わりに、各エンティティを2つに分割する必要があります。1つは短いもので、もう1つは完全な表現です(たとえば
AuthorReference
、andAuthor
、PublisherReference
andPublisher
)。 - オプション#2を使用する場合、構成または一般化を優先する必要がありますか?
- RESTアプリケーションで同じエンティティ表現のさまざまな詳細化を処理するためのベストプラクティスはありますか?