2012-01-30 169 views
3

剛開始我的第一個WCF休息項目,並希望對使用REST的最佳實踐有所幫助。WCF休息 - 最佳做法是什麼?

我見過很多教程,似乎有很多方法可以做事情...例如,如果做一個POST,我已經看到一些教程設置HttpStatusCodes(OK/Errors等),並且其他教程,他們只是返回包含操作結果的字符串。

在這一天結束時,有4個操作,肯定必須有一個指南,說如果你正在做一個GET,做這種方式等,並具有開機自檢,做到這一點...

任何幫助,將不勝感激。

JD

+1

REST最佳實踐:不使用WCF REST。避免它像瘟疫一樣。 – Aliostad 2012-01-30 12:23:08

回答

6

UPDDATE

使用的ASP.NET Web API。


好的我留下了評論REST best practices: dont use WCF REST. Just avoid it like a plague,我覺得我必須解釋它。

WCF的一個基本缺陷是它只關注有效負載。例如FooBar是這裏的有效載荷。

[OperationContract] 
public Foo Do(Bar bar) 
{ 
    ... 
} 

這是WCF的租戶之一,所以,無論什麼運輸是,我們得到有效載荷交給你。

但它忽略的是,在許多情況下,運送特定呼叫的context/envelope - 所以很多場景中獲得的丟失。事實上,HTTP的力量在於它的上下文不是有效載荷和早在早期版本的WCF的,有沒有辦法讓客戶端的IP地址在netTcpBinding和WCF團隊則堅持認爲,他們無法提供。我現在找不到頁面,但請記住閱讀評論,並且MS人員剛纔表示不支持。

使用WCF REST,你失去HTTP的靈活性,表達自己清楚(他們不得不後來讓步吧)在以下方面:

  • HTTP狀態代碼
  • HTTP媒體類型
  • 的ETag ...

新的Web API,格倫塊由上下文封裝有效載荷的工作解決了這個問題:

public HttpResponse<Foo> Do(HttpRequest<Bar> bar) // PSEUDOCODE 
{ 
    ... 
} 

但對我的測試,這是不完美的,我個人更喜歡使用框架如南希甚至普通的ASP NET MVC揭露網絡API。

+0

在內容類型協商,JSONP和OData支持等方面,REST中還有其他問題通常不會影響傳統Web應用程序,您可能必須在MVC中進行手動滾動(不確定Nancy是否因爲我沒有使用它)這是內置到Web API – 2012-01-30 12:39:10

+0

@RichardBlewett ASP NET MVC不只是構建傳統的Web應用程序。 – Aliostad 2012-01-30 12:54:10

+0

@Aliostad::)現在我更困惑了。我認爲這些回覆將會像Richards一樣,這將是一個設置StatusCodes等的情況。我們即將開始一個WCF項目,並且你會說使用ASP.net MVC而不僅僅是WCF Rest(即使沒有視圖和我們只是返回JSON數據)? – 2012-01-30 13:02:27

6

使用來自HTTP specification

得到不同的HTTP動詞時,有一些基本的規則:這是一個純粹的讀取操作。調用不能導致服務狀態發生變化。爲得到響應可能取決於高速緩存(本地,代理等)交付的緩存頭

DELETE:用於刪除資源

有時有周圍PUT和POST一些混亂 - 這應該使用什麼時候?要回答您必須考慮冪等性 - 操作是否可以在不影響服務狀態的情況下重複執行 - 例如,將客戶名稱設置爲某個值可以重複多次,而無需進一步更改狀態;然而,如果我增加了客戶的銀行存款餘額,那麼如果不對服務進行進一步的狀態更改,就不能安全地重複。第一被說成是等冪的所述第二未

PUT:非刪除是冪等的

POST狀態變化:非刪除要求是不一樣的狀態變化

REST包含了HTTP - 因此故障應該使用HTTP狀態碼進行通信。 200用於成功,201用於創建,並且服務應該使用HTTP位置標頭返回新資源的URI,4xx由於客戶端請求的性質而失敗(因此可以由客戶端改變他們正在做的事情來修復), 5xx是服務器錯誤,只能解決服務器端

+0

感謝您的信息。根據AlioStads的評論,我需要重新考慮WCF Rest是否是我選擇的f/w。不過,您的意見對幫助我做出決定非常有用。 – 2012-01-30 17:06:19

0

有什麼缺失這裏需要說。

WCF Rest可能無法提供REST協議的所有功能,但它能夠促進現有WCF服務的REST協議。因此,如果您決定在當前的SOAP /命名管道協議的基礎上提供某種REST支持,那麼如果ROI較低,則該方法就行了。

手動滾軋成型REST協議可能是理想的,但並不總是經濟的。在我的90%的項目中,REST API是一個事後考慮。在這方面,Wcf非常方便。

+0

此外,如果您希望Wcf REST for HTTP上下文感知上下文行爲,則它是高度可定製的。一個例子是XML/JSON切換。 http://robbincremers.me/2012/01/05/wcf-rest-service-with-xml-json-response-format-according-to-content-type-header/這篇文章描述瞭如何使用格式切換內容類型標題。再次,我同意這不是理想的,但它並不完全是厄運和陰沉。 – 2012-07-24 04:16:11

相關問題