zoukankan      html  css  js  c++  java
  • 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
    作者:青羽
  • 相关阅读:
    html添加注释怎么弄?
    编程语言本身是怎么开发出来的?
    一句话说明Facbook React证书的矛盾点
    XAMPP是什么?
    HTTP解析
    version control
    函数式编程语言
    Servlet之Filter
    Build tool
    container和injection
  • 原文地址:https://www.cnblogs.com/tenghoo/p/rest.html
Copyright © 2011-2022 走看看