您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
简单 5 步创建你的首个 RESTful 服务
 
来源:开源中国  发布于:2016-11-1
   次浏览      
 

RESTful 服务遵循REST(Representational State Transfer)的架构风格。

在实现你第一个Restful 服务之前,让我们先理解它的概念。就像我们知道的那样,WCF(Windows通讯接口)让我们能够使用基于一系列协议的SOAP来打电话和交换信息,这些协议包含HTTP,TCP,Named Pipes 和MSMQ等等。在一个脚本中,如果我们使用基于HTTP的SOAP,我们只是把HTTP作为一个运输工具。但是,HTTP并不仅仅是个传输的工具。所以,当我们将RESY架构形式的时候,那就决定了“我们知识简单的使用HTTP来进行通讯,而不是使用一些复杂的机制,像CORBA,RPC或者SOPA,来通讯”。

对于所有的CRUD(Read/Create/Update/Delete),RESTFul架构基于HTTP的简单动作(GET,POST,PUT,And DELETE)来实现。它简单而且轻巧。为了简单一些,我将通过Get请求来实现一个服务,这个服务返回有限的几个类型的XML格式的数据。

跟随下面5个步骤,创建你的第一个返回数据类型XML的RESTful服务。

创建一个WCF工程.

组织要返回的数据(e.g. Prodcut).

创建服务协议

实现服务.

配置服务和行为。

1.创建一个WCF服务功能

打开 Visual Studio.

在File -> New Project 里. 在左侧选择WCF创建一个新的 WCF Service Application.

2. 组织要返回的数据

为新建的工程添加一个类. 命名为 Products.cs.

现在这个类 Products.cs file 包含两个部分. 第一个是数据的定义.

[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; }
}

第二部分是这个类的单例实现,它从数据库中获取产品信息让后返回产品列表。为了简单一些,我们在类中组织数据而不是从数据库取得。如下:

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.创建服务协议

按照下面的内容创建 WCF Service :

项目将增加一个协议以及服务文件下面的代码就是服务协议 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的属性和参数

Method = "GET", 代表HTTP GET 请求.

ResponseFormat = WebMessageFormat.Xml, 代表接收下面两个是的内容。但我们可以将值修改为WebMessageFormat.json。来接收就送格式的内容

BodyStyle = WebMessageBodyStyle.Wrapped,表明 request和 response 请求将被包装.

UriTemplate = "GetProductList/",由两部分。URL路径和查询路径

不要忘记在顶部添加 System.ServiceModel.Webat .

4. 实现 RESTful

在这个步棸里面我们将实现服务.只有一个方法GetProductListis 在协议的定义中,因此服务类实现如下:

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

5. 配置服务与特性

最后一步是用配置文件配置服务和他的操作以及它的特性. 以下是完整的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>

网站的http协议在 RESTful 服务上绑定

现在创建 RESTful 服务已经完成。你可以简单的运行或者测试一下。

右击ProductRESTService.svc 文件选择 "View in Browser(在浏览器中查看)". 你将看到如下图像。这证明服务已启动。

只需修改浏览器的URl增加上 "GetProductList/". 因此,这是一个 定义 UriTemplete 服务协议的方法.

希望,这个简单的 WCF教程对读者有所帮助.保持做事的简单性。我仅在获得HTTP get请求的时候获得记录信息。在以后,我将提供使用RESTful 服务所有的 CRUD (增查改删) .

   
次浏览       
相关文章

多维方法来开发有机的业务流程架构
SCA 应用程序开发
BPM 和 SOA 性能最佳实践
实现企业服务总线模式
相关文档

SCA介绍及应用实例
基于SOA架构的ESB平台:Infomagic
SCA架构
SOA的基本概念
相关课程

面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

基于SOA的工作流(WF)整合
SOA 100问 - 问与答
SOAP 应用模式:处理与性能
ESB架构之企业实施案例
基于SOA架构的企业集成系统
基于SOA的体系架构设计
更多...   


面向应用的架构设计实践
单元测试+重构+设计模式
软件架构师—高级实践
软件架构设计方法、案例与实践
嵌入式软件架构设计—高级实践
SOA体系结构实践


某第三方电子支付企业 SOA架构设计
某电子企业 SOA应用
中国移动 SOA培训
北京大学 SOA架构设计实践
友邦保险 SOA架构设计
上海 SOA架构实践
山东移动通信 SOA体系结构实践
更多...