zoukankan      html  css  js  c++  java
  • 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来帮助我们管理接口并测试:

  • 相关阅读:
    浏览网页的过程
    端口转发和端口映射
    代码审计入门之BlueCMS v1.6 sp1
    php伪协议总结
    phar反序列化
    iOS开发之GCD使用总结
    深入理解Android NDK日志符号化
    Android 开源项目源码解析之DynamicLoadApk 源码解析
    Gilt如何将微服务部署到AWS环境,介绍ION-Roller
    100分程序员的8个习惯
  • 原文地址:https://www.cnblogs.com/lukelook/p/11169202.html
Copyright © 2011-2022 走看看