2013-02-13 75 views
1

我正在構建我的第一個REST API(至少嘗試)個人項目。REST最佳實踐:商店是否也會返回元數據?

在這個項目中有一些資源叫做player,這些資源可以在team。根據REST API design rulebook資源應該是文件 a 商店和一個應該保持這些角色儘可能分離。

然而,我想追加一些元數據到team資源,例如team創建日期。 GET /teams/atlanta是否可以將該元數據(使其成爲文檔)與隊列中的players(使其成爲商店)一起返回。

這是個好主意嗎?如果是這樣,爲什如果不是,爲什麼不,以及如何解決這個更好?

我知道開發REST API沒有規則,但有很好的做法,我想堅持這些。請不要說這是我的第一個REST API,所以如果有的話請原諒我的無知。

回答

2

我建議讓GET /teams/atlanta只返回關於團隊的信息,例如您提到的創建日期,然後讓GET /teams/atlanta/players返回該團隊的球員列表。當您呈現使用GET以外的HTTP方法的API時,這些區別變得更加重要。例如,如果您想將球員添加到球隊 - 如果您只需將球員對象投遞到/teams/atlanta/players,那麼比您在每次希望將整個球隊對象縮小爲/teams/atlanta時容易得多添加一個單獨的球員。

如果您的API僅允許檢索數據,並且如果它是針對特定客戶端應用程序,則會有一個參數用於將所有團隊數據組合爲一個對象以保存客戶端對數據進行額外請求,但請記住它不那麼靈活。

您的應用程序可能希望通過調用GET /teams來顯示團隊列表,但您可能不希望列表中的每個對象都包含所有玩家信息,因爲這是相當多的數據,但如果GET /teams/atlanta返回玩家信息則不一致,不要將其包含在列表版本中。

我個人傾向於按照我的建議分割資源,並且接受客戶可能需要提出額外請求的事實。

+0

很好,沒想到那個!這樣,團隊也可以更容易地擴展(例如'/隊/亞特蘭大/吉祥物')。我想我現在還沒有REST思維模式。 – romeovs 2013-02-15 14:02:29