假設我有兩個端點。/users和/users/:id/discussions。
而這里是對GET /users/1
1.
{
"user": {
"name": "User1",
"id": "1",
"討論": [<discussionList>]
}
}
{
"用戶"。{
"name": "User1",
"id": "1"
}
}
如果GET /users/1回傳回應2,并有一個單獨的請求GET /users/1/discussions來獲取用戶的討論子集合,根據REST原則是否可以?
uj5u.com熱心網友回復:
如果GET /users/1回傳回應2,并有一個單獨的請求GET /users/1/discussions來獲取用戶的討論子集合,這在REST原則下是否可行?
差不多,但不完全是。 REST 原則會問:客戶端如何知道/users/1/discussions是要使用的正確 URI?
如果你的表述是這樣的:
{
"用戶"。{
"name": "User1",
"id": "1"
},
"討論": "/users/1/discussions"
}
那么答案就很簡單了 -- discussions給你提供了你需要的URI。
更常見的是有一個URI的集合
{
"用戶"。{
"name": "User1",
"id": "1"
},
"鏈接"。{
"自己"。"/users/1",
"討論"。"/users/1/discussions"
}
}
application/hal json是以這種方式處理鏈接的JSON媒體型別的一個例子。
你也可以在標題中包含鏈接
鏈接:</users/1/discussions>; rel="discussion"; anchor="/users/1"
如果你要遵守RFC 8288,那么你需要選擇使用注冊的鏈接關系,注冊一個新的鏈接關系,或者使用擴展的關系
。這些選項中的最后一種是最常見的。 一個符合RFC 8288的擴展關系應該是一個 "唯一標識關系型別的URI"。 所以你可能會看到像這樣的東西:
Link: </users/1/discussions>; rel="https://example.org/discussions"; anchor="/users/1"
閱讀RFC 8288,我無法弄清楚rel應該指向什么?能否請您解釋一下這個欄位的意義是什么?它是否需要是某個URI?
這個欄位的意義在于,它的值告訴你錨和目標之間的關系是什么。
Link: </page/1>; rel="first"; anchor="/users/4"
鏈接:</page/5>; rel="next"; anchor="/users/4"
這兩個關系告訴你,/page/5在/page/4之后,而/page/1是這個序列中的第一頁。
我們可以在這里使用 "first "和 "next",因為這兩種鏈接關系型別都已經在IANA注冊。 (令我非常驚訝的是,這兩種關系的參考文獻都指向了RFC 8288;也許理解它們是RFC 5023中描述的更好)。
但是 "討論",即我們在這里使用的例子,并不是一個注冊的鏈接關系型別。 這意味著我們需要使用一個URI。 這個URI不需要是一個HTTP URI,也不需要是可以下載的東西。 但一個方便的技巧是,選擇解釋鏈接關系語意的檔案的URI(即:解釋什么是
的文本鏈接:</A; rel="https://example.org/discussions"; anchor="/B"
意思是。 所以它可能是一個進入你的API檔案的鏈接,可能是描述你的資訊的JSON表示的模式的檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/309942.html
標籤:
