2014-10-28 51 views
0

我正在設計一個遊戲服務器API,允許玩家花費一些遊戲幣來「探索」一個區域(從該區域隨機獲取一些資源)。由於此API調用會扣除玩家的遊戲貨幣,因此它不是冪等和不安全的,所以我不能使用GET,PUT,DELETE,只留下POST。所以我的設計是是一個定製的動作/動作RESTful的Web API嗎?

POST /regions/:id/explore 

注意動詞/動作是URI的一部分,而不是HTTP方法。 這個API是RESTful嗎?如果是,爲什麼?如果不是,那麼這個API的RESTful設計是什麼?

+0

也許這是重複的這一問題 - [http://stackoverflow.com/questions/1619152/how-to-create-rest-urls-without-verbs][1] [1] :http://stackoverflow.com/questions/1619152/how-to-create-rest-urls-without-verbs – Jangid 2014-10-28 11:52:41

+0

你能更明確嗎?我無法從該線索找到我的問題的答案?你可以在這個線程的上下文中重新解釋答案嗎? – 2014-10-28 16:36:08

回答

1

關於REST URI是否應該有動詞,還有很多討論,但這只是一種戀物癖。說到URI,什麼決定了你的API或多或少是RESTful不是他們的設計,而是你的客戶如何獲得它們。如果您無法隨時更改您的URI,則它不是RESTful。如果您的客戶正在從文檔中讀取URI模式,並用值替換:id等字段來構建要使用的最終URI,這不是RESTful,那麼URI的內容無關緊要。對HATEOAS進行一些研究以獲取更多信息。

在這部分不在的情況下,POST是用於任何未通過HTTP標準化的操作的方法,這意味着您通常可以做幾乎任何您想要的任何操作,並且仍然表示它是RESTful,只要它明確記錄並且URI不是來自帶外信息。您可以根據HTTP標準猜測GET,PUT,PATCH或DELETE的功能,但您無法猜測POST的功能。

只要小心不要讓你的POST就像RPC方法一樣。例如,不要做一些應用POST的資源由有效負載而不是URI來標識的地方。在你的情況,是這樣的:

POST /explore 
{"region_id": :id} 

這是什麼是真正的口頭禪旨在避免在URI動詞或方法名。

相關問題