2017-02-10 12 views
0

我需要定義一個REST API,它應該採用對象的唯一標識符並返回內容。內容從數據庫中檢索並且是JSON類型的。 所以,我有一個REST URL這樣的 -只用REST GET API檢索特定的屬性

GET /data/{typename}/{objectid} 

這將返回整個對象的內容。

但是,對象的內容可能很大,因此調用者可能只想指定一些或幾個要發送的屬性作爲響應。 我想到的自然思想是將GET BODY添加到GET API,用戶可以在該API上指定要檢索的對象上的屬性名稱列表。 但是在做進一步的研究時,似乎不推薦使用BODY的GET API。 ,我能想到的另一種選擇是通過查詢字符串中的屬性名稱 -

GET /data/{typename}/{objectid}?property=prop1&property=prop2... 

不過這個名單可以很容易地變大。

任何有關我的API應該如何的建議?我必須使用POST嗎?

+0

排除屬性會使URL更短嗎?例如'?excludes = thisProp,thatProp,anotherProp'? – sp00m

+0

[RESTful API可能重複,如果查詢字符串不夠長?](http://stackoverflow.com/questions/41741356/restful-api-what-if-the-query-string-isnt-long -enough) – sp00m

+0

這裏關心的不是查詢字符串的長度。關心的是瞭解如何傳遞會影響GET API響應的附加參數。 – tyrion

回答

0

使用POST是不正確的。只要您正在閱讀,請使用GET。例如,Facebook有一個類似的使用案例,其中/me端點有許多過濾器,並且調用爲GET

最終URL /me?fields=id,name,about,age_range,devices,currency,education

你可以自己嘗試一下從這裏 https://developers.facebook.com/tools/explorer/145634995501895/?method=GET&path=me%3Ffields%3Did%2Cname%2Cabout%2Cage_range%2Cdevices%2Ccurrency%2Ceducation&version=v2.8

從技術上講,使用POST會的工作,但是這是一個非常糟糕的設計。

+0

感謝您的回答。我確實認爲POST可能不是正確的方式。臉書的例子給了我一個信心,查詢字符串可能是正確的做法。然而,我沒有Facebook登錄,所以無法看到它的行動,但我明白了。 – tyrion

+0

儘管在技術上正確的是,對於檢索數據GET請求是最正確的,但確實對查詢字符串長度有嚴格限制,這可能是一個問題,例如使用數據表。 https://datatables.net/examples/server_side/post.html生成的查詢字符串非常快地達到極限 –

+0

您是否認爲字段名的分隔符會成爲問題? – tyrion