当前位置:编程学习 > JS >>

对REST架构的理解及Jquery+JSON+RESTful WCF (附源码)

 

最近看了一些REST架构风格的介绍,谈谈自己对REST的理解总结一下自己的认识。本文只最为个人阶段性的成果,供对REST开发有兴趣的童鞋参考。若有理解有误的地方恳请大侠指教。

  REST看了好多天了,自己也写了一些DEMO程序加深了对他的理解。晚上突然发现还有个微软之前还发布过一个插件名称(WCF REST Starter Kit Preview 2.msi,下载地址:http://aspnet.codeplex.com/releases/view/24644),供给大家使用。供作为个人第一篇介绍REST风格的WCF文章,本文就从这个插件的最基本的使用说起。

  本文分为两个部分:

  1、REST简要介绍

  2、JQ+JSON+ WCF(REST)以及C#客户端调用RESTful 的WCF服务的DEMO

  3、REST WCF的 help页面

*REST简要介绍

   首先介绍一下何为REST。REST全称呼为Representational State Transfer,中文翻译为:表述性状态转移。它不是一种框架,也不是一种规范,而是一种网络应用程序的设计风格和开发方式可以降低开发的复杂性,提高系统的可伸缩性。REST的设计原则有一下几点:

  1、网络上的所有事物都被抽象为资源(Resource)。如:图片、音乐、服务

  2、网络上的资源都有一个唯一标识符(Unique Identity)即URI (UniformResource Identifier)

  3、对资源的操作通过统一的通用接口规范来访问。如:使用HTTP标准动词GET、POSt、DELETE、PUT来进行访问。

  4、对资源的访问不会改变它的唯一标识符,即URI不变

  5、所有的操作都是无状态的。

  由于REST是基于HTTP协议的。所以以上原则中的第三点也很容易理解。同样,由于它的这一特点,只要客户端通过HTTP协议的方式Service支持访问资源的方式,RESTful Service都会做出相应的处理。当然,由于它天生的特点,跨平台也就不成问题了。

  当然:HTTP一共有8个动词来表明对客户端请求的资源的不同操作,分别为:

  • OPTIONS
    返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送'*'的请求来测试服务器的功能性。
  • HEAD
    向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • GET
    向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中。其中一个原因是GET可能会被网络蜘蛛等随意访问。
  • POST
    向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
  • PUT
    向指定资源位置上传其最新内容。
  • DELETE
    请求服务器删除Request-URI所标识的资源。
  • TRACE
    回显服务器收到的请求,主要用于测试或诊断。
  • CONNECT
    HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。   

  当然,在RESTful Service 中,通过GET、POST、PUT、DELETE对资源进行操作。

*DEMO示例

 首先介绍换开发环境(安装下载下来的WCF REST Starter Kit Preview 2):

  环境:VS 2008 +WCF REST Starter Kit Preview 2。

  1、首先建立项目,如下图:

\

  2、项目建好后的结构如下图:

      

    \

Service的定义如下:

 public class Service : SingletonServiceBase<SampleItem>, ISingletonService<SampleItem>

{

/**/

}

有WCF经验的大侠,一样就能想到ISingletonService<SampleItem>,肯定是对应的服务契约。对于Service的代码以及

泛型类SingletonServiceBase<SampleItem>, ISingletonService<SampleItem>的代码都是系统自动给生成的,我就

不给出类的源码了,只说说ISingletonService<SampleItem>,是如何指定资源返回的公共接口规范的。

       [OperationContract]
        [WebHelp(Comment = "Returns the item in JSON format.")]
        [WebGet(UriTemplate = "?format=json", ResponseFormat = WebMessageFormat.Json)]
        TItem GetItemInJson();
        [OperationContract]
        [WebHelp(Comment = "Returns the item in XML format.")]
        [WebGet(UriTemplate = "")]
        TItem GetItemInXml();

   [WebHelp(Comment = "Initializes the item based on the incoming JSON.")]
        [OperationContract]
        [WebInvoke(Method = "POST", UriTemplate = "?format=json", ResponseFormat =     WebMessageFormat.Json)]
        TItem AddItemInJson(TItem initialValue);

对资源公共接口是通过WebGetAttribute,WebInvokeAttribute中Method以及UriTemplate模板制定的。Method定义了访问资源的动作,POST、GET(或者其他,这里仅仅列出2中不同的动作加以说明)。而UriTemplate则指定了对资源访问的URI。在REST WCF中,对服务契约的定义中,UriTemplate是必不可少的,而Method的指定,在WebGet中默认的动作是GET。当然如果你要在WebInvoke中定义也行,但是既然已经有了WebGet,何必多次一举呢。?

   1、JQ调用的代码如下:

view sourceprint?
$.ajax({
   
         type: "GET",
   
         url: "Service.svc/?format=json",
   
         dataType: "json",
   
补充:Web开发 , ASP.Net ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,