首页 > 代码库 > REST API

REST API

是什么

REST(representational state transfer) 表现层状态转换。

是浏览器与服务器通信方式的一种架构风格。

  • Resource 资源
  • Representation 表现层
  • State Transfer  状态转换

基于 REST 的服务被称为 RESTful 服务。

 REST 不依赖于任何协议,但是几乎每个 RESTful 服务使用 HTTP 作为底层协议。

 

 

目的

服务的目的是提供一个窗口给客户端以便客户端能访问这些资源。服务架构师和开发人员想要这些服务变得易于实现、维护、扩展、伸缩。RESTful 架构具备这些。

核心概念

  1. 互联网上所有可访问的内容,都是资源(图片,视频文件,网页...)
  2. 服务器保存资源,客户端请求资源,客户端和服务器之间,传递这种资源的某种表现层;
  3. 同一个资源,有多种表现形式
  4. 协议本身不带有状态,通信时客户端必须通过参数,表示请求不同状态的资源
  5. 状态转换通过HTTP动词表示,客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

 

HTTP动词

操作

SQL方法

HTTP动词

CREATE

INSERT

POST

READ

SELECT

GET

UPDATE

UPDATE

PUT/PATCH

DELETE

DELETE

DELETE

 

状态码

状态码

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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

 

 

返回结果

状态码

GET /collection:返回资源对象的列表(数组)

GET /collection/resource:返回单个资源对象

POST /collection:返回新生成的资源对象

PUT /collection/resource:返回完整的资源对象

PATCH /collection/resource:返回完整的资源对象

DELETE /collection/resource:返回一个空文档

 

优劣

优:

 

  1. 跨平台,管你是Java,还是PHP,还是Node.js还是Go,你都得支持HTTP请求。我API平台只需要提供这个语言的SDK,保证能按照消息协议调用就好。
  2. 将复杂的内部业务系统抽象为通用调用请求。包装了复杂的业务逻辑,对外提供统一的,好管理的接口。并可以定制化设计,计费,授权一类的容易管理。

 

劣:

  1. 协议描述能力弱化RestfulURI无法完全对请求参数做强格式校验。最后的方法参数绑定,模拟内部请求时往往容易出问题,尤其是以Java等强格式语言的系统。不能像WebService一样清晰描述请求报文。
  2. 同样的道理,响应结果为了是JSONXML。这当中,编码,正反序列化,等操作,往往就会有性能瓶颈。而且,Java在这块资源消耗极大。以Github的ROP这个框架为例,当年测试时,它在并发请求过高的时候就会有一个内存泄漏问题。

 

相关

json-server

用来为前端模拟Rest API的。

 

Install

install
1
$ npm install -g json-server

Example

创建一个db.json

install
1
2
3
4
5
6
7
8
9
{
  "posts": [
    "id": 1, "title""json-server""author""typicode" }
  ],
  "comments": [
    "id": 1, "body""some comment""postId": 1 }
  ],
  "profile": { "name""typicode" }
}

开启json server 

install
1
$ json-server --watch db.json

然后打开http://localhost:3000/posts/1,你会看到

install
1
"id": 1, "title""json-server""author""typicode" }

demo: rest-api-demo.zip

postman

chrome插件,一个 HTTP 通信测试工具,模拟请求的。可以模拟GET, POST, PUT, DELETE, 等等的各种请求。(测试上面那个demo的时候可以用它模拟请求)

技术分享

可到官网 GetPostman.com 下载独立安装包;也可以参考这篇文章www.cnblogs.com/mafly/p/postman.html,下载 Chrome 浏览器的插件。

REST API