什么是RESTful API?
一. 定义
Rest
的全称是Representational State Transfer
,2000年由Roy Fielding
发表在他的博士论文中,首次提出了Restful
的概念。Restful
做为一种接口的设计规则,基于HTTP协议
,可以使用XML格式
或JSON格式
传输数据。对于使用restful
这套规则定义开发的接口,我们称之为Restful API
。
关于Restful
的具体表现形式,简单可以用一句话概括:URL
定位资源,使用HTTP请求
(GET、POST、PUT、DELETE
等)对资源进行操作。
二. 设计原则与规范
Restfu
是典型的基于HTTP
的协议 ,它有哪些设计 原则和规范呢?
URL
与资源:资源表示网络上的一个实体对象,可以是一个资产、一首歌曲或一种服务,资源总是以一定的格式来表现自己。通过定义一个URL
指向资源,要访问资源时,只需要通过该资源所属的URL
进行请求访问即可。一般来说,接口名称只能用名词,不可以用动词,根据HTTP
的请求来进行操作,这样可以不在URL
不暴露操作方式。
例如:http://www.kk.com/api/books
表示一个资源(书本)对象- 统一接口规范:
Restful
架构应该遵循统一接口原则 ,统一接口包含了一组固定的预定义操作,不管是什么样的资源,都通过方式进行资源访问 。在Restful API
架构中,客户端通过HTTP协议
,使用GET
、POST
、PUT
和DELETE
4种请求方式对服务端资源进行操作,GET
用于获取资源,POST
用来新建资源,PUT
用来更新资源,DELETE
用于删除资源。 - 无状态:从客户端到服务端的每个请求都是独立 ,请求中必须包含需要的所有信息,这也代表服务器不需要储存任何上下文信息,对于客户端来说,第一次请求和第100次请求都是相同的。在Restful 架构中,尽量避免使用
session
的方式,而是由客户端自己标识会话状态(token
)。 - 除以上的操作规范外,另外还有一些要求, 包括:
url不能使用大写字母;
不使用文件扩展名,如.php
等;
可在url中增加api版本号等;
文本返回必须为Json
格式。
三. URL格式标准、HTTP动词、参数命名规范
3.1 下面我们通过几个示例来了解下Restful API
的格式定义方式
- 查看
GET http://api.xxx.com/users
查看所有用户信息
GET http://api.xxx.com/users/id
查看该id的用户信息
GET http://api.xxx.com/users?age=20&
根据搜索条件(age等于20),显示符合条件的用户信息 - 创建
POST http://api.xxx.com/users
创建用户,可在DATA处带需要的参数 - 更新
PUT http://api.xxx.com/users/id?name='张三'&age=20
修改该id的用户信息(name和age) - 删除
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?相关推荐
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- Spring Boot 集成Swagger2生成RESTful API文档
Swagger2可以在写代码的同时生成对应的RESTful API文档,方便开发人员参考,另外Swagger2也提供了强大的页面测试功能来调试每个RESTful API. 使用Spring Boot可 ...
- java鉴权_一个开箱即用的高效认证鉴权框架,专注于restful api的认证鉴权动态保护...
作者:tomsun28 来源:SegmentFault 思否 写在开头 看了看这个专栏的最近一篇文章已经是两年前了,时间过得好快.应该是出学校后时间就很快了.两年前因为用shiro后,自己就按着想法开 ...
- Yii2.0 RESTful API 之版本控制
Yii2.0 RESTful API 之版本控制 之前我写过两篇关于 Yii2.0 RESTful API 如何搭建,以及 认证 等处理,但是没有涉及到版本管理,今天就来谈谈版本管理如何实现. 索性就 ...
- Swagger 生成 PHP restful API 接口文档
需求和背景 需求: 为客户端同事写接口文档的各位后端同学,已经在各种场合回忆了使用自动化文档工具前手写文档的血泪史. 我的故事却又不同,因为首先来说,我在公司是 Android 组负责人,属于上述血泪 ...
- node aws 内存溢出_如何使用Node.js和AWS快速创建无服务器RESTful API
node aws 内存溢出 by Mark Hopson 马克·霍普森(Mark Hopson) 如何使用Node.js和AWS快速创建无服务器RESTful API (How to quickly ...
- php 自动返回,PHP实现自动识别Restful API的返回内容类型
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- 我是如何根据豆瓣api来理解Restful API设计的
1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...
- SpringBoot第十一篇:springboot集成swagger2,构建优雅的Restful API
swagger,中文"拽"的意思.它是一个功能强大的api框架,它的集成非常简单,不仅提供了在线文档的查阅,而且还提供了在线文档的测试.另外swagger很容易构建restful风 ...
- Chrome Restful Api 测试工具 Postman-REST-Client离线安装包下载,Axure RP Extension for Chrome离线版下载...
[Postman for Chrome 离线下载] Postman-REST-Client离线安装包,可直接在Chrome浏览器本地安装使用,可模拟各种http请求,Restful Api测试, CS ...
最新文章
- 公开课 | 人脸识别的最新进展以及工业级大规模人脸识别实践探讨
- 给妹子讲python-S01E18初探函数作用域
- java 039 s rule_Java开发架构篇:DDD模型领域层决策规则树服务设计
- 任务和特权级保护(四)——《x86汇编语言:从实模式到保护模式》读书笔记35
- java网络编程Socket中SO_LINGER选项的用法解读
- 《嵌入式C编程:PIC单片机和C编程技术与应用》一1.2 注释
- apt-get update 问题 及gcc高亮
- 删除行对MySQL序列有这么多影响?
- 美国国土安全部发布针对高风险铁路基础设施的强制性安全要求
- 解决问题的能力 > 10倍程序员
- k touch for android,k touch for android新十年
- 使用zlog实现日志记录
- 简单突破数据库备份路径拿shell
- 在椭球面上使用球面坐标系法做三重积分
- 工程师思维 vs 销售思维
- 心灵的吟唱——读《湖海诗情录》
- 重置计算机网络设置路由器,路由器登录不上怎么办 如何重新设置路由器
- 手机拍照上传图片旋转角度问题
- 【Python爬虫系列】浅尝一下爬虫40例实战教程+源代码【基础+进阶】
- 数学-先验概率和后验概率和一系列概率公式理解