2010-05-28 230 views
14

我有一個資源最佳實踐結果

/system/resource 

我想請問系統有關資源的布爾問題無法通過 處理在客戶端上回答(即我可以」 t只需獲取資源 並查看實際資源數據 - 它需要使用客戶端不可用的數據在後端處理 )。例如

/system/resource/related/otherresourcename 

我想這是返回true或false。有沒有人有任何 這種交互類型的最佳實踐例子?

可能性,來我的腦海:

  • 使用的HTTP狀態代碼,沒有返回體(聞錯)

  • 返回純文本字符串(真,假,1,0) - 不知道什麼字符串值都適合使用,而且 這似乎被忽略了接受媒體類型和總是返回 純文本

  • 爲我的每種支持媒體類型 提供了一個布爾對象,並返回適當的類型(帶有單個布爾值 結果的JSON文檔,一個具有單個布爾字段的XML文檔)。然而這看起來很笨拙。

我並不特別想進入有關 的RESTful系統等的真正含義進行了長時間討論 - 我已經使用這個詞REST的稱號,因爲它 最能表達系統的一般的味道,我正在設計(即使我可能更傾向於通過網絡而不是真正的REST)。但是,如果有人對某個真正的RESTful系統完全避免這個問題有一些想法,我很樂意聽到他們的意見。

+0

您能否讓標籤更容易混淆和更具體? – WhirlWind 2010-05-28 01:55:14

+0

是的,抱歉 - 真的不知道該怎麼標記問題。我專門用MVC.NET來做,但這個問題肯定適用於任何類似REST的系統? – 2010-05-28 02:08:10

回答

3

我認爲返回文本/純文本將是最乾淨的選項。就accept頭而言,如果客戶端真的無法處理純文本,那麼您可以恢復爲Json或Xml。
個人而言,我會使用字符串「true」和「false」。大多數客戶端語言可以將這些字符串解析爲適當的值。

+0

我同意他們不可能處理文本計劃,但在API的其餘部分,他們可以通過使用他們想要的單一Accept類型逃脫 - 即在我的很多測試中,我使用restclient,並將Accept設置爲應用程序/ JSON。在這種情況下,我真的必須返回包裝的布爾JSON不是嗎? – 2010-05-28 02:26:20

+0

是的,根據'http:// tools.ietf.org/html/rfc2616#section-14.1',如果你的客戶端沒有說它支持text/plain,那麼你不應該發送它。 – 2010-05-28 03:46:02

5

嗯,很難回答(你的例子有點太抽象了)。

通常你可以設計這樣的布爾信息作爲資源數據或專用資源。訂單領域的例子,當你想知道訂單是否完成(布爾問題)。當心這是簡化的例子(訂單的世界要複雜得多;)

設計訂單狀態數據有效載荷

HTTP調用: HTTP GET /orders

會給你回200 OK與有效載荷(JSON格式): { id : "1" , completed : "true" }

設計訂單狀態,資源

HTTP調用: HTTP GET or HEAD /orders/completed/1

現在,讓你的「布爾」的回答,您可以檢查HTTP響應狀態是否是404或200 400會告訴訂單尚未完成,200會告訴它完成。

爲了更好地幫助您,您必須更加具體,具體是什麼「布爾問題」?什麼是真正的資源和相關資源?

+0

Manuel,謝謝你的深思熟慮的評論。 想象一下,我們有一個資源'john',另一個資源'bob'。這兩個都有屬性,如姓名,地址,出生日期,朋友名單等。 因此,他們都是'資源'喜歡,並可以在寧靜的架構中獲取GET 。 但是我想問一個關於這兩個資源之間關係的布爾問題。實際的關係很簡單(即,我可以通過其他人的朋友到達一個人),但顯然涉及服務器端的一些計算。 所以我想問問 HTTP GET/bob/isrelated/john – 2010-05-31 01:06:50

+0

我可以想到兩種可能性:1)在/ bob/friends上做一個GET並檢查john是否是響應中的一個項目。或者走得更遠,做GET/bob/friends/john,如果你得到了404,那麼他們之間沒有友誼,否則200。 2)將此信息直接包含到資源中:GET/bob,然後在內搜索鮑勃約翰...。如果約翰是迴應的一部分,那麼就有一種關係,否則就是這樣。從休息的角度來看,我不會直接想到服務器計算術語(它是api實現細節)。 – 2010-05-31 20:26:01

+0

是的,我同意如果我的'關係'是可以表達的,我只是將它們包含在資源中。我的意思是涉及到計算服務器上的資源可能有成千上萬的相關資源(這是一個複雜網絡的完全傳遞閉包)。因此,這種關係是否依賴於無法發送給客戶端的數據 - 它必須由服務器計算 – 2010-06-01 08:31:22