VS2013創(chuàng)建RESTful服務(wù)的教程

2013-09-30 08:48:16來源:oschina作者:


RESTful 服務(wù)遵循REST(Representational State Transfer)的架構(gòu)風格。

RESTful 服務(wù)遵循REST(Representational State Transfer)的架構(gòu)風格。

在實現(xiàn)你第一個Restful 服務(wù)之前,讓我們先理解它的概念。就像我們知道的那樣,WCF(Windows通訊接口)讓我們能夠使用基于一系列協(xié)議的SOAP來打電話和交換信息,這些協(xié)議包含HTTP,TCP,Named Pipes 和MSMQ等等。在一個腳本中,如果我們使用基于HTTP的SOAP,我們只是把HTTP作為一個運輸工具。但是,HTTP并不僅僅是個傳輸?shù)墓ぞ。所以,當我們將RESY架構(gòu)形式的時候,那就決定了“我們知識簡單的使用HTTP來進行通訊,而不是使用一些復雜的機制,像CORBA,RPC或者SOPA,來通訊”。

對于所有的CRUD(Read/Create/Update/Delete),RESTFul架構(gòu)基于HTTP的簡單動作(GET,POST,PUT,And DELETE)來實現(xiàn)。它簡單而且輕巧。為了簡單一些,我將通過Get請求來實現(xiàn)一個服務(wù),這個服務(wù)返回有限的幾個類型的XML格式的數(shù)據(jù)。 
 

跟隨下面5個步驟,創(chuàng)建你的第一個返回數(shù)據(jù)類型XML的RESTful服務(wù)。

  • 創(chuàng)建一個WCF工程.
  • 組織要返回的數(shù)據(jù)(e.g. Prodcut).
  • 創(chuàng)建服務(wù)協(xié)議
  • 實現(xiàn)服務(wù).
  • 配置服務(wù)和行為。

1.創(chuàng)建一個WCF服務(wù)功能

  •  打開 Visual Studio.
  •  在File -> New Project 里.  在左側(cè)選擇WCF創(chuàng)建一個新的 WCF Service Application.
     

2. 組織要返回的數(shù)據(jù)

  • 為新建的工程添加一個類. 命名為 Products.cs.

現(xiàn)在這個類 Products.cs file 包含兩個部分. 第一個是數(shù)據(jù)的定義.

[DataContract]
public class Product
{
  [DataMember]
  public int ProductId { get; set; }
  [DataMember]
  public string Name { get; set; }
  [DataMember]
  public string CategoryName { get; set; }
  [DataMember]
  public int Price { get; set; }
}

第二部分是這個類的單例實現(xiàn),它從數(shù)據(jù)庫中獲取產(chǎn)品信息讓后返回產(chǎn)品列表。為了簡單一些,我們在類中組織數(shù)據(jù)而不是從數(shù)據(jù)庫取得。如下:

public partial class Products
{
  private static readonly Products _instance = new Products();
  private Products() { }
 
  public static Products Instance
  {
   get { return products; }
  }
 
  private List<Product> products = new List<Product>()
  {
    new Product() { ProductId = 1, Name = "Product 1", CategoryName = "Category 1", Price=10},
    new Product() { ProductId = 1, Name = "Product 2", CategoryName = "Category 2", Price=5},
    new Product() { ProductId = 1, Name = "Product 3", CategoryName = "Category 3", Price=15},
    new Product() { ProductId = 1, Name = "Product 4", CategoryName = "Category 1", Price=9} };  }
}

3.創(chuàng)建服務(wù)協(xié)議

按照下面的內(nèi)容創(chuàng)建 WCF Service :

項目將增加一個協(xié)議以及服務(wù)文件下面的代碼就是服務(wù)協(xié)議 i.e. IProductRESTService.cs.

public interface IProductRESTService
{
  [OperationContract]
  [WebInvoke(Method = "GET",ResponseFormat = WebMessageFormat.Xml,
      BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "GetProductList/")]
  List<Product> GetProductList();
}

IProductRESTServicecontains 只包含一個方法即GetProductList.需要重點了解的是 WebInvoke的屬性和參數(shù)

  • Method = "GET", 代表HTTP GET 請求.
  • ResponseFormat = WebMessageFormat.Xml, 代表接收下面兩個是的內(nèi)容。但我們可以將值修改為WebMessageFormat.json。來接收就送格式的內(nèi)容
  • BodyStyle = WebMessageBodyStyle.Wrapped,表明 request和 response 請求將被包裝.
  • UriTemplate = "GetProductList/",由兩部分。URL路徑和查詢路徑

不要忘記在頂部添加 System.ServiceModel.Webat .

4. 實現(xiàn) RESTful

在這個步棸里面我們將實現(xiàn)服務(wù).只有一個方法GetProductListis 在協(xié)議的定義中,因此服務(wù)類實現(xiàn)如下:

public class ProductRESTService : IProductRESTService
{
  public List<Product> GetProductList()
  {
   return Products.Instance.ProductList;
  }
}

5. 配置服務(wù)與特性

最后一步是用配置文件配置服務(wù)和他的操作以及它的特性. 以下是完整的ServiceModel配置。

<system.ServiceModel>
   <services>
     <service name="MyRESTService.ProductRESTService"
              behaviorConfiguration = "serviceBehavior">
       <endpoint address=""
                 binding="webHttpBinding"
                 contract="MyRESTService.IProductRESTService"
                 behaviorConfiguration="web">
       </endpoint>
     </service>
   </services>
   <behaviors>
    <serviceBehaviors>
       <behavior name="serviceBehavior">
         <serviceMetadata httpGetEnabled="true"/>
         <serviceDebug includeExceptionDetailInFaults="false"/>
       </behavior>
    </serviceBehaviors>
    <endpointBehaviors>
       <behavior name="web">
         <webHttp/>
       </behavior>
    </endpointBehaviors>
   </behaviors>
   <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

</system.serviceModel>      

網(wǎng)站的http協(xié)議在 RESTful 服務(wù)上綁定

現(xiàn)在創(chuàng)建 RESTful 服務(wù)已經(jīng)完成。你可以簡單的運行或者測試一下。

右擊ProductRESTService.svc 文件選擇 "View in Browser(在瀏覽器中查看)". 你將看到如下圖像。這證明服務(wù)已啟動。

只需修改瀏覽器的URl增加上 "GetProductList/". 因此,這是一個 定義 UriTemplete 服務(wù)協(xié)議的方法. 

希望,這個簡單的 WCF教程對讀者有所幫助.保持做事的簡單性。我僅在獲得HTTP get請求的時候獲得記錄信息。在以后,我將提供使用RESTful 服務(wù)所有的 CRUD (增查改刪) .

關(guān)鍵詞:VS2013RESTful

贊助商鏈接: