2011-03-08 65 views
2

鑑於我們提供一種RESTful API,提供書籍的實體在在REST的GET查詢中添加附加信息的好方法是什麼?

/books 

聽力和客戶端可以在通常

GET /books/{id} 

得到一本書假設我們要開始對書籍提供折扣只有我們最警惕的買家。這些買家將獲得折扣碼,該碼將降低該書的價格。

因此,通用的反應可能是

GET /books/4 
{"id":4, "price":"24.95"} 

哪裏有優惠碼查詢的響應可能是

GET /books/4 
{"id":4, "price":"24.95", "yourPrice":"19.95"} 

我們能想出的後端處理,但客戶通過restful api提交折扣碼的最佳做法是什麼?

某些書籍將有資格享受折扣,而其他書籍不會。折扣不會很廣(全部20%),而是會映射到特定代碼(或客戶端/代碼組合)的特定價格。

我們認爲:

  • kludging網址

    GET /碼/ {} someCode /書籍/ {ID}

  • 添加代碼的標頭值

  • 使用查詢字符串

    GET/books?cod e = myCode

  • 什麼?

編輯:我們的目標是不是實現單次使用的代碼。相反,對於一些固定的書籍,這些折扣代碼可以使用一定的次數。

回答

2

我喜歡使用查詢變量。我只是看着REST Web服務書,我在這方面的主要參考依據,他們說:

使用查詢變量只建議 參數被插入到 算法......如果兩個不同的URI在它們的查詢變量中只有 ,這意味着它們是 它們是不同的輸入集合 進入相同的底層算法。

在我看來,您的折扣代碼是折扣算法的輸入。

Charles

+0

「僅使用查詢變量來建議插入算法的參數......」這當然就是這種情況。謝謝。 – gmoore 2011-03-08 23:52:34

1

如果你要提交的東西不是冪等的,我會建議使用POST而不是GET。你不希望客戶能夠多次使用他們的代碼。

+0

實際上代碼到期並不是問題在這裏。我會更新這個問題來反映這一點。無論如何,你對冪等性的評論仍然相關。 – gmoore 2011-03-08 23:26:58

1

您在URL或標題值中添加的任何內容都會被截取,並可能允許其他用戶「僞造」其折扣ID。 1方法是引入新的POST調用,這將允許使用簡單的HTTPS對ID進行加密。發佈的數據可能與discountID或customerID一樣簡單。

添加 - 對不起邁克爾,你已經說:)

+0

使用POST執行獲取書籍列表的操作感覺不對。雖然,保持代碼安全的好處在於。 – gmoore 2011-03-08 23:35:57

0

因此當用戶檢索書自動返回本書以適當的折扣,例如你可以註冊一個表中的代碼:

用戶可以添加一些代碼

POST /register/{code} 

這將條目添加到表{}用戶 - 通過

GET /books/{id} 
{}代碼所以當用戶檢索

將使用該條目來應用折扣。我猜你已經在{code} - {book}之間有一些關係,所以不會進入這個關係。

相關問題