如果您想完全接受RESTful服務設計原則,您一定希望在您的表示格式中使用超鏈接。 JSON有一些現有的規格,如果你不想拿出自己的:HAL和JSON API。一個天真的超媒體格式可能是這樣的:
{
"playlist_id" : "666",
"created_at" : "2014-11-07 19:21:64",
"likes" : 5,
"tracks" : [
{"index" : 1,
"begin_at" : "00:02:00",
"end_at" : "00:05:23",
"_links" : {"track" : {
"href" : "/tracks/123",
"type" : "track"}}},
{"index" : 2,
"_links" : {"track" : {
"href" : "/tracks/432",
"type" : "track"}}},
{"index" : 3,
"_links" : {"track" : {
"href" : "/tracks/324",
"type" : "track"}}},
{"index" : 4,
"_links" : {"track" : {
"href" : "/tracks/567",
"type" : "track"}}}]
}
更復雜的功能都包含在這兩個HAL和JSON API,就像定義嵌入的資源和鏈接樣板。使用這樣的語義,你可能會像下面這樣結束:
{
"id" : "666",
"created_at" : "2014-11-07 19:21:64",
"likes" : 5,
"tracks" : [
{"id" : "123",
"index" : 1,
"begin_at" : "00:02:00",
"end_at" : "00:05:23"},
{"id" : "432",
"index" : 2},
{"id" : "324",
"index" : 3},
{"id" : "567",
"index" : 4}
],
"_links" : {
"_self" : {
"href" : "/playlists/666",
"type" : "playlist"},
"tracks" : {
"href" : "/tracks/{id}",
"type" : "track"}
},
"_embedded" : {
"track" : [
{"id" : "123",
"title" : "harder better faster stronger",
"artist" : "daft punk",
"created_at" : "2012-10-03 09:57:04",
"likes" : 234252,
"play_count" : 1203200035},
{"id" : "432",
"title" : "aerodynamic",
"artist" : "daft punk",
"created_at" : "2009-03-07 11:11:11",
"likes" : 33056,
"play_count" : 8796539}
]
}
}
另外,不要忘了使用超鏈接來表示實體之間的靜態關係是旅程纔剛剛開始。使用Hypermedia As The Engine Of Application State是真正的涅ana ......但是那時你可能會瞄準太高。
今天我一直在閱讀關於大廳的更多信息。但在你的例子中,我沒有看到我提到的三個上下文是如何適合的。我在哪裏可以看到播放列表中的曲目數量?或者當軌道被添加? – Boedy 2014-12-03 10:41:48
您提到的「上下文」在那裏。在「軌道」下的列表中,每個對象都有一個「索引」,第一個有'begin_at'和'end_at'。這些鍵在'track'資源本身的外部,這是一個單獨的,並且使用'link'定義中的URL模板來引用。 – 2014-12-05 11:33:57