REST学习和应用总结

来源:互联网 发布:算法导论 第二版 pdf 编辑:程序博客网 时间:2024/05/18 10:04

   最近项目中需要用到用.net去调用rest格式的webservice ,以前对rest基本上没有了解 。在网上查询了相关资料后,个人总结如下:

1 rest的概念


REST 样式 Web 服务是面向资源的服务。您可以通过统一资源标识符(Universal Resource IdentifierURI)来识别和定位资源,并且针对这些资源而执行的操作是通过 HTTP 规范定义的。其核心操作包括:

GET - 该操作返回已标识资源的状态表示。您可以通过大量的上下文要素来确定状态,例如谁正在提交请求、操作的参数(传入的参数如 HTTP 头或者查询字符串参数)和服务提供方维护的当前会话状态。

POST - 该操作执行对已标识资源的一些特定于应用程序形式的更新。该操作行为完全依赖于实现它的服务。由该操作返回的数据也完全依赖于应用程序。举例来说,像 GET 操作一样,它可以返回一个状态表示,它还可以选择根本不返回任何数据。

PUT - 该操作在已标识位置(URI)创建新资源。操作输入必须包括一个资源的状态表示。它完全依赖服务来创建基于这个状态表示的资源。

DELETE - DELETE 操作销毁已标识位置(URI)的资源。

在许多方面,REST 样式 Web 服务与 SQL、元组空间(tuple spaces)、简单消息列队等技术相似。它们都使用普通的简单操作针对明确的资源起作用。


  相比较而言: SOAP 样式 Web 服务通常是面向活动的。 WSDL 文档定义并描述特定于服务的操作。操作由特定于服务的消息交换组成。每一个操作都是一个可以执行的活动。 

 

2  .net客户端如何去调用restful 的webservice

 目前wcf已经提供了对rest的支持和封装

首先需要在http://aspnet.codeplex.com/releases/view/24644 上下载WCF REST Starter Kit的安装包(WCF REST Starter Kit Preview 2.msi) ,点击安装。全部默认安装后 会在 目录C:/Program Files/Microsoft WCF REST/WCF REST Starter Kit Preview 2下

出现Assemblies 和WCF REST Starter Kit Preview 2.zip 压缩包 。再手工解压缩该包,会发现Assemblies目录下对应的3个dll对应的工程源码分别在WCF REST Starter Kit Preview 2.zip 压缩包中的三个解决方案。

Microsoft.Http.dll 和Microsoft.Http.Extensions.dll 这两个组件主要用于封装和简化 调用rest service的客户端。

Microsoft.ServiceModel.Web.dll 主要用于创建REST的service端。

安装完安装包后还可以发现在visual studio 中的EDIT菜单下多了个PasteXmlAsType 菜单,该菜单主要的功能为把剪贴版中对应的xml自动序列为相应的类。

 

代码实现:

1 首先需要在工程中引用Microsoft.Http.dll 和Microsoft.Http.Extensions.dll

  根据rest service公布的帮助文档或者例子,利用PasteXmlAsType 菜单生成相应的请求参数类和返回的结果类。

//get 方法的实现

HttpClient client ;

   Uri EchoAddress1 = new Uri(baseaddress);  //资源的url
    XmlSerializer serializer = new XmlSerializer(typeof(CallMinder));//CallMinder 为请求的输入参数类
                using (HttpResponseMessage response = client.Get(EchoAddress1))  // 调用get的方法

                {
                      //将得到结果反序列化

                    CallMinder callMinder = (CallMinder)serializer.Deserialize(response.Content.ReadAsStream());
                    Console.WriteLine(callMinder.number.ToString());
                    return callMinder;
                }

 

 

 

///post 方法的实现

   public   bool PostTest(CallMinder call)
        {
            try
            {  //把输入的参数类序列化为 http流
                HttpContent content = HttpContentExtensions.CreateXmlSerializable(call, typeof(CallMinder));
                XmlSerializer serializer = new XmlSerializer(typeof(CallMinder));
                using (HttpResponseMessage response = client.Post(baseRestAddress, content))//调用post方法提交http的内容
                {// 反序列化服务端返回的结果。
                    CallMinder callMinder = (CallMinder)serializer.Deserialize(response.Content.ReadAsStream());
                    Console.WriteLine(callMinder.number.ToString());
                    return true;
                }
            }
            catch (Exception ex)
            {
                throw ex;

            }
        }

delete 与put方法的实现与post基本相同。

 

 

 

 

 




 

 

 

 

 

本文主要参考了:http://tscjsj.blog.51cto.com/412451/84810

                     http://msdn.microsoft.com/en-us/library/ee391967.aspx

                    

 

原创粉丝点击