一. 定义

Rest的全称是Representational State Transfer,2000年由Roy Fielding发表在他的博士论文中,首次提出了Restful的概念。Restful 做为一种接口的设计规则,基于HTTP协议 ,可以使用XML格式JSON格式传输数据。对于使用restful这套规则定义开发的接口,我们称之为Restful API
关于Restful的具体表现形式,简单可以用一句话概括:URL定位资源,使用HTTP请求GET、POST、PUT、DELETE等)对资源进行操作。

二. 设计原则与规范

Restfu是典型的基于HTTP的协议 ,它有哪些设计 原则和规范呢?

  1. URL与资源:资源表示网络上的一个实体对象,可以是一个资产、一首歌曲或一种服务,资源总是以一定的格式来表现自己。通过定义一个URL指向资源,要访问资源时,只需要通过该资源所属的URL进行请求访问即可。一般来说,接口名称只能用名词,不可以用动词,根据HTTP的请求来进行操作,这样可以不在URL不暴露操作方式。
    例如:http://www.kk.com/api/books 表示一个资源(书本)对象
  2. 统一接口规范:Restful架构应该遵循统一接口原则 ,统一接口包含了一组固定的预定义操作,不管是什么样的资源,都通过方式进行资源访问 。在Restful API架构中,客户端通过HTTP协议,使用GETPOSTPUTDELETE4种请求方式对服务端资源进行操作,GET用于获取资源,POST用来新建资源,PUT用来更新资源,DELETE用于删除资源。
  3. 无状态:从客户端到服务端的每个请求都是独立 ,请求中必须包含需要的所有信息,这也代表服务器不需要储存任何上下文信息,对于客户端来说,第一次请求和第100次请求都是相同的。在Restful 架构中,尽量避免使用session的方式,而是由客户端自己标识会话状态(token)。
  4. 除以上的操作规范外,另外还有一些要求, 包括:
    url不能使用大写字母;
    不使用文件扩展名,如.php等;
    可在url中增加api版本号等;
    文本返回必须为Json格式。

三. URL格式标准、HTTP动词、参数命名规范

3.1 下面我们通过几个示例来了解下Restful API的格式定义方式

  1. 查看
    GET http://api.xxx.com/users 查看所有用户信息
    GET http://api.xxx.com/users/id 查看该id的用户信息
    GET http://api.xxx.com/users?age=20& 根据搜索条件(age等于20),显示符合条件的用户信息
  2. 创建
    POST http://api.xxx.com/users创建用户,可在DATA处带需要的参数
  3. 更新
    PUT http://api.xxx.com/users/id?name='张三'&age=20 修改该id的用户信息(name和age)
  4. 删除
    DELETE http://api.xxx.com/users/id 删除该id的用户信息

对于资源的具体操作类型,由HTTP动词表示。

3.2 常用的HTTP动词有下面五个(括号里是对应的SQL命令)。

GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
DELETE(DELETE):从服务器删除资源。

还有两个不常用的HTTP动词。

HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。

例子:

GET /zoos:列出所有动物园POST /zoos:新建一个动物园GET /zoos/ID:获取某个指定动物园的信息PUT /zoos/ID:更新某个指定动物园的信息(提供该动物园的全部信息)PATCH /zoos/ID:更新某个指定动物园的信息(提供该动物园的部分信息)DELETE /zoos/ID:删除某个动物园GET /zoos/ID/animals:列出某个指定动物园的所有动物DELETE /zoos/ID/animals/ID:删除某个指定动物园的指定动物

3.3.3 参数命名规范

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

下面是一些常见的参数。

?limit=10://指定返回记录的数量?offset=10://指定返回记录的开始位置。?page=2&per_page=100://指定第几页,以及每页的记录数。?sortby=name&order=asc://指定返回结果按照哪个属性排序,以及排序顺序。?animal_type_id=1://指定筛选条件

参数的设计允许存在冗余,即允许API路径URL参数偶尔有重复。比如,GET /zoo/ID/animals与 GET /animals?zoo_id=ID的含义是相同的。

四.状态码(Status Codes)

服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

200 OK - [GET]://服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。201 CREATED - [POST/PUT/PATCH]://用户新建或修改数据成功。202 Accepted - [*]://表示一个请求已经进入后台排队(异步任务)204 NO CONTENT - [DELETE]://用户删除数据成功。400 INVALID REQUEST - [POST/PUT/PATCH]://用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。401 Unauthorized - [*]://表示用户没有权限(令牌、用户名、密码错误)。403 Forbidden - [*] //表示用户得到授权(与401错误相对),但是访问是被禁止的。404 NOT FOUND - [*]://用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。406 Not Acceptable - [GET]://用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。410 Gone -[GET]://用户请求的资源被永久删除,且不会再得到的。422 Unprocesable entity - [POST/PUT/PATCH] //当创建一个对象时,发生一个验证错误。500 INTERNAL SERVER ERROR - [*]://服务器发生错误,用户将无法判断发出的请求是否成功。

五. 结尾

Restful Api做为目前比较火的一种架构,做WEB开发的同学有必要知晓。本篇文章主要介绍了restful api的基本概念,大家看完应该对该架构有初步的了解了。

什么是RESTful API?相关推荐

  1. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  2. Spring Boot 集成Swagger2生成RESTful API文档

    Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...

  3. java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...

    作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...

  4. Yii2.0 RESTful API 之版本控制

    Yii2.0 RESTful API 之版本控制 之前我写过两篇关于 Yii2.0 RESTful API 如何搭建,以及 认证 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现. 索性就 ...

  5. Swagger 生成 PHP restful API 接口文档

    需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史. 我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪 ...

  6. node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API

    node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...

  7. php 自动返回,PHP实现自动识别Restful API的返回内容类型

    如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...

  8. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  9. SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API

    swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...

  10. Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...

    [Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...

最新文章

  1. 公开课 | 人脸识别的最新进展以及工业级大规模人脸识别实践探讨
  2. 给妹子讲python-S01E18初探函数作用域
  3. java 039 s rule_Java开发架构篇:DDD模型领域层决策规则树服务设计
  4. 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
  5. java网络编程Socket中SO_LINGER选项的用法解读
  6. 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.2 注释
  7. apt-get update 问题 及gcc高亮
  8. 删除行对MySQL序列有这么多影响?
  9. 美国国土安全部发布针对高风险铁路基础设施的强制性安全要求
  10. 解决问题的能力 > 10倍程序员
  11. k touch for android,k touch for android新十年
  12. 使用zlog实现日志记录
  13. 简单突破数据库备份路径拿shell
  14. 在椭球面上使用球面坐标系法做三重积分
  15. 工程师思维 vs 销售思维
  16. 心灵的吟唱——读《湖海诗情录》
  17. 重置计算机网络设置路由器,路由器登录不上怎么办 如何重新设置路由器
  18. 手机拍照上传图片旋转角度问题
  19. 【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】
  20. 数学-先验概率和后验概率和一系列概率公式理解

热门文章

  1. Android 无障碍实现微信抢红包辅助
  2. 榆熙电商:哪些产品可以用来做预售处理?
  3. 数字化转型走基层:直播,请露出你的“虎牙”
  4. 麒麟SP1系统查看网卡实时网速和网卡速率
  5. Python引入rpy2包用pyinstaller打包后的exe无法正常使用
  6. 32位 与64位编译
  7. postfix邮件系统搭建手册(openldap)
  8. 【木马】暗云系列木马
  9. React 属性验证 propTypes
  10. 如何进入隔壁女生的。。。