REST

REST

具象状态传输(Representational state transfer,REST)是设计基于命名资源而非消息的松耦合应用程序的一种风格。

REST是一种软件架构风格。

REST 原则
为所有“事物”定义ID
将所有事物链接在一起 

客户端和服务器之间的交互在请求之间是无状态的。

分层系统:组件无法了解它与之交互的中间层以外的组件。

REST中的资源

RESTful服务中很重要的一个特性即是同一资源,多种展现(json,xml,html):
1、使用http request header: Accept
GET /user/123 HTTP/1.1
Accept: application/xml                 //将返回xml格式数据

GET /user/123 HTTP/1.1
Accept: application/json               //将返回json格式数据

2、使用扩展名

/user/123.xml  将返回xml格式数据
/user/123.json 将返回json格式数据
/user/123.html 将返回html格式数据

3、使用参数

/user/123?format=xml          //将返回xml数据
/user/123?format=json          //将返回json数据

RESTful

是一个使用HTTP并遵循REST原则的Web服务。

WCF REST

 如果有WCF的编程经验,WCF下的REST实现就很好理解了。

 数据契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;

namespace REST
{
    [DataContract]
    
public class User
    {
        [DataMember]
        
public string Id { getset; }
        [DataMember]
        
public string Name { getset; }
    }
}

 服务契约

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ServiceModel;
using System.ServiceModel.Web;

namespace REST
{
    [ServiceContract]
    
public interface IUserService
    {
        [OperationContract]
        [WebGet(UriTemplate 
= "User/{id}", ResponseFormat = WebMessageFormat.Json)]
        User GetUser(
string id);

        [OperationContract]
        [WebGet(UriTemplate 
= "Add/{name}/{pass}", ResponseFormat = WebMessageFormat.Xml)]
        
int AddUser(string name, string pass);
    }
}

对方法标识的UriTemplate 就是REST中所谓的对事物定义ID。ResponseFormat用来定义资源的展现形式。

实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace REST
{
    
public class UserService : IUserService
    {
        
public User GetUser(string id)
        {
            
return new User { Id = id, Name = "name" + id };
        }
        
public int AddUser(string name, string pass)
        {
            
return 1;
        }
    }
}

EndPoint

  <system.serviceModel>
    
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    
<services>
      
<service name="REST.UserService">
        
<endpoint address=""
                  binding
="webHttpBinding"
                  contract
="REST.IUserService" 
                  behaviorConfiguration
="UserServiceBehavior"/>
      
</service>
    
</services>
    
<behaviors>
      
<endpointBehaviors>
        
<behavior name="UserServiceBehavior">
          
<webHttp />
        
</behavior>
      
</endpointBehaviors>
    
</behaviors>
  
</system.serviceModel>

访问:http://localhost:2845/UserService.svc/User/100

返回:{"Id":"100","Name":"name100"}  //json

访问:http://localhost:2845/UserService.svc/Add/tenghoo/123

返回:<int>1</int>  //xml

参考:

http://badqiu.iteye.com/blog/552806
http://www.ibm.com/developerworks/cn/web/lp/restandweb/
http://www.cnblogs.com/jillzhang/archive/2010/04/04/1704388.html
作者:青羽
原文地址:https://www.cnblogs.com/tenghoo/p/rest.html