2009-07-21 56 views
18

我正在考慮開始編寫一些REST Web服務來提供數據。我猜,當我的REST Web服務可用時,我的一些Web應用程序和控制檯應用程序將能夠使用REST Web服務作爲數據服務來獲取,添加,更新和刪除數據到數據庫。除此之外,我想添加身份驗證功能來識別任何請求。從何處開始在C#或ASP.Net中使用REST Web服務

我的問題是,我應該從哪裏開始?我看到了Microsoft ADO.Net Data Services。不知道這是不是一個好的開始?有沒有可用的例子?

+1

請問,出於興趣,爲什麼你需要休息,簡單地暴露你的數據庫?你試圖解決什麼樣的情況?如果您只是想通過xml暴露CRUD數據,那就是所謂的POX,並且與架構風格ReST無關。 – SerialSeb 2009-07-22 12:58:39

+0

一個例子是,我們有一個數據庫,根據來自機器的連接調用通過許可證收費。在一臺機器中,打電話沒有限制,但我們必須爲其他電腦的呼叫付費。除此之外,網絡防火牆是另一個問題。所以我認爲REST Web服務可能是解決問題的最佳方式。我們可以調用REST服務,讓REST服務創建一個連接或本地調用db。 – 2009-07-24 04:06:05

+0

那麼你不是在談論ReST,你正在談論簡單的基於http的xml服務。 POX!= ReST。 – SerialSeb 2010-12-23 11:36:15

回答

1
  • 如果你打算使用WCF,那麼JP提到的WCF REST Starter Kit是一個很好的開始。使用ASP.NET MVC提供的RESTful服務,能講流利的XML的
  • 奧馬爾·Zabir provides a pretty good example和JSON
  • 你也可以去,你所建議的ADO.NET數據服務的路線。這些服務構建在WCF堆棧之上。

我從來沒有偶然發現任何真正的指導如何選擇這些選項。在ASP.NET MVC中,您承擔了大部分管道負擔,但也具有最大程度的控制權。雖然WCF傾向於讓事情按照自己的方式完成,但直RESTful WCF是一個快樂的中間地帶。 ADO.NET數據服務非常神奇,其缺點是完全購買一種生成這些服務的方法並失去更多的靈活性。

有幾本好書可以閱讀關於.NET的RESTful服務的主題。 O'Reilly和微軟出版社最近都發布了關於這個主題的書籍。也許我可以提供給你的最重要的建議是消費和理解幾個開放的RESTful服務(例如Twitter,亞馬遜,Flickr),以瞭解創建服務所用的設計決策。用戶配置,身份驗證機制和受支持的內容類型(例如JSON,XML,RSS/ATOM)是您可以在行動中觀察以幫助您創建服務API的一些決策。

4

如果您是.net領域的REST新手,那麼請從OpenRasta開始。如果你努力工作,其他微軟解決方案可以做REST,但是他們會引導你走一條路線,你最可能通過HTTP結束POD(普通舊數據)。這不是REST的全部內容。如果這就是你想要的,那麼這也很酷,但它不是REST。

10

您可能還需要檢查出servicestack.net一個開源的,跨平臺,高性能的Web服務框架,可以讓你使用代碼優先,強類型的DTO的,可以自動地(無需任何配置開發Web服務)立即可以在各種不同的端點上即時獲得(即XML,JSON,JSV,SOAP 1.1/1.2)。

REST,RPC和SOAP開箱

此外,也可以通過這裏可以通過您的REST客戶端指定首選的序列化格式你選擇的任何REST-FUL網址提供的相同的Web服務即

  • 使用HTTP 接受:
  • 追加到查詢字符串例如優選格式?格式= XML

請參閱如何開發一個完整的REST-FUL阿賈克斯CRUD應用程序只有1頁的jQuery1頁的C#Nothing but REST! Web服務的例子。

一個好的開始是Hello World example看看如何輕鬆添加ServiceStack Web服務到任何現有的ASP.NET Web應用程序。

性能

對於性能的良心,ServiceStack使一個很好的Ajax服務器,因爲它配備了fastest JSON Serializer for .NET(> 3倍比其他JSON序列化更快)捆綁在一起。

結帳this live Ajax app嚐鮮(在Linux/Nginx/MONO上進行實時演示)。

簡單羅斯文示例

ServiceStack也可以很容易地創建強類型的摩擦Web服務,其中只有下面的代碼是所有你需要返回客戶波蘇斯的列表:

public class CustomersService : RestServiceBase<Customers> 
    { 
      public IDbConnectionFactory DbFactory { get; set; } 

      public override object OnGet(Customers request) 
      { 
       return new CustomersResponse { Customers = DbFactory.Exec(dbCmd => 
        dbCmd.Select<Customer>()) 
      }; 
    } 

隨着沒有其他的配置,您現在就可以撥打上面的Web服務的REST完全恢復所有的:

客戶端訪問Web服務

可以調用重複使用相同的DTO上述Web服務,你的Web服務被定義爲(即不需要code-gen)使用您的首選通用ServiceClient(即Json,Xml等)。這允許您使用強類型的API只用1行代碼來調用您的Web服務:

C#同步實例

IServiceClient client = new JsonServiceClient("http://host/service"); 
var customers = client.Send<CustomersResponse>(new Customers()); 

而且,由於你的Web服務也REST服務,它可以無縫使用JavaScript Ajax客戶端,如:

使用jQuery

$.getJSON("http://host/service", function(r) { alert(r.Customers.length); });