RESTFul

REST介绍

REST(Representational State Transfer表述性状态转移)是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。REST提出了一些设计概念和准则:

1、网络上的所有事物都被抽象为资源(resource);

2、每个资源对应一个唯一的资源标识(resource identifier);

3、通过通用的连接器接口(generic connector interface)对资源进行操作;

4、对资源的各种操作不会改变资源标识;

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

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。

传统的请求模式和REST模式的请求模式区别:

作用传统模式REST模式
列举出所有的用户 GET /users/list GET /users
列出ID为1的用户信息 GET /users/show/id/1 GET /users/1
插入一个新的用户 POST /users/add POST /users
更新ID为1的用户信息 POST /users/mdy/id/1 PUT /users/1
删除ID为1的用户 POST /users/delete/id/1 DELETE /users/1

关于更多的REST信息,可以参考:http://zh.wikipedia.org/wiki/REST

RESTFul支持

3.2的RESTFul支持更为灵活,你只需要把控制器继承ThinkControllerRestController即可。 继承RestController控制器后你的访问控制器就可以支持下面的一些功能:

  • 支持资源类型自动检测;
  • 支持请求类型自动检测;
  • RESTFul方法支持;
  • 可以设置允许的请求类型列表;
  • 可以设置允许请求和输出的资源类型;
  • 可以设置默认请求类型和默认资源类型;

    REST参数

    继承了RestController后,你可以在你的控制器里面设置rest相关的属性参数,包括:allowMethod,defaultMethod,allowType,defaultType以及allowOutputType。

    属性名说明默认值
    allowMethod REST允许的请求类型列表 array('get','post','put','delete')
    defaultMethod REST默认请求类型 get
    allowType REST允许请求的资源类型列表 array('html','xml','json','rss')
    defaultType REST默认的资源类型 html
    allowOutputType REST允许输出的资源类型列表 array( 'xml' => 'application/xml', 'json' => 'application/json','html' => 'text/html',)

    一.首先,什么是REST?
     REST从字面上讲叫做Representational State Transfer,翻译成表现层状态转移,但是一般在翻译的时候,前面会加一个Resource,即Resource Representational State Transfer,即为资源表现层状态转移.用人话讲就是:客户端通过HTTP请求,对服务器端的资源进行操作,实现"表现层(使用HTTP动词去促使服务器端资源的)状态发生改变".

    二. 什么是RESTful?
     RESTful是代表REST化,或者说设计遵从REST架构的,所以要了解RESTful就需要了解REST.

    三.我们为什么要使用RESTful的风格来开发接口?

    先从传统设计接口的方式来看:

    新增一个员工:http://www.demo.cn/finance/employee/createEmp

     删除一个员工:http://www.demo.cn/finance/employee/deleteEmp

    修改一个员工:http://www.demo.cn/finance/employee/updateEmp

    获取员工列表:http://www.demo.cn/finance/employee/listEmp

    现在我们发现:一个非常简单的需求产生的问题:

     1.每一个操作,都需要一个独立的url去操作,因为我们对员工的动作都需要反映在url里面.

     2.会产生大量的url,非常不方便接口的维护和文档的维护

     3.如果有不同的响应方式,我们可能需要额外的参数,甚至不同的url来描述

     4.请求参数包含在请求地址中,无法针对性做缓存

    如果我们使用RESTful风格的接口,那么我们可以如下做:

     新增一个员工:POST http://www.demo.cn/finance/employee

      删除一个员工:DELETE http://www.demo.cn/finance/employee

     修改一个员工:PATCH http://www.demo.cn/finance/employee

    获取员工列表:GET http://www.demo.cn/finance/employee

    可以发现,我们通过HTTP的请求方式来给予这些请求的不同含义,动作设计和示例如下: 

    下面是一个简单的实践,我们可以使用去哪儿网开源的YApi来帮助我们管理接口并测试:

原文地址:https://www.cnblogs.com/lukelook/p/11169202.html