2012-11-14 53 views
0

我正在處理我的第一個Web應用程序,並有這個基本的疑問。使用REST執行投票

我有一組帖子,我想讓用戶對它們進行投票。我正在使用PHP,因此我有一個包含處理HTTP請求的代碼的article.php腳本。

目前我實現了使用通過POST HTTP請求發送的數據的文章創建(使用html表單)。返回的文章ID是我從數據庫存儲文章中獲得的文章。

同樣,我處理GET請求並返回基於作爲參數發送的ID的文章。如果沒有定義參數,我會返回所有文章的列表。

目前我沒有做過任何URL重寫因此請求的格式爲article.php?id=xxx

現在我想要實現的選票,而這正是我現在面臨的一個問題。根據REST的說法,我應該在特定的資源上使用POST(因爲投票不是冪等的),所以我會發送一個POST請求到/article/1234並附帶一個"+1"正文投票。

問題是,我如何將上述映射到我的用例?假設進行了網址重寫,那會轉化爲什麼?重寫爲article.php?id=1234將不起作用,因爲POST不會在URI(AFAIK)中使用參數。

而且,我將如何區分這一行爲與其他行爲?我是否還應該添加一些「動作」參數,如article.php?id=1234&action=vote

+0

不重寫保留POST正文嗎? –

+0

它的確如此,但是如何將URL中的數據(本例中爲文章ID)傳遞到POST正文中? – Dan

+0

您只需從'_ _GET ['id']''和'file_get_contents('php:// input')'獲得'id',因爲它不是URL編碼。 –

回答

1

它似乎沒有得到一個REST-ful應用程序的真正想法。使用GET檢索文章並使用POST進行編輯很好,但您必須將其擴展爲投票。 REST-ful應用程序假定一個URL標識一個資源。所以,你必須將投票視爲自己的資源(與文章相關)。 所以,你的應用程序應該像這樣工作

GET article.php/ID/1:檢索與ID的第1條

POST article.php/ID/1:改變與ID的artcile 1

GET article.php/ID/1 /票:id爲獲取文章的投票1

POST article.php/ID/1 /票:改變ID爲的物品投票1

它是完全正確的實施後一個增加一個投票,只要投票實現爲一個簡單的計數器。 您可以通過給予投票身份來重新定義此邏輯,例如如果你想添加更多的屬性投票,如投票的用戶。

正如你所要求的重寫,以及如果一個應用程序能夠通過post請求從url中獲取數據:是的,這完全有可能。對文章?id = 1的POST請求將有$ _GET ['id']可用。

上面顯示的重寫部分是完全可選的。只要一個URL標識一個資源,REST就不會對url的「漂亮」感興趣。

希望這給了你一個如何繼續的想法

+0

啊哈!我可以在POST請求中使用參數的事實就是我缺少的一點。我認爲錯誤的一部分是在POST請求中使用$ _GET缺乏明確性。謝謝! – Dan