REST接口

1.是什么?

Rest,Representational State Transfer的缩写,资源(数据)的表示(json、xml)+状态转化(http verb动作)

使用URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

用来规范客户端如何在HTTP 层与 API 提供方进行数据交互 。

2. 为什么?

“古代”网页是前端后端融在一起的,比如之前的PHP,JSP等。近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为Web,iOS和Android提供服务。

另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。在RESTful架构下:


3. 怎么做?

3.1资源指定

URL中只使用名词(一般用复数)来指定资源,原则上不使用动词。“资源”是REST架构或者说整个网络处理的核心。比如:

http://api.qc.com/v1/newsfeed: 获取某人的新鲜;

http://api.qc.com/v1/friends: 获取某人的好友列表;

http://api.qc.com/v1/profile: 获取某人的详细信息;

3.2URL嵌套

按照资源的逻辑层级,对 URL 进行嵌套,比如一个用户属于某个团队,而这个团队也是众多团队之一;那么获取这个用户的接口可能是这样:

GET /api/teams/123/members/234 表示获取 id 为123 的小组下,id 为234 的成员信息。

/api/teams (对应团队列表)

/api/teams/123 (对应 ID 为 123 的团队)

/api/teams/123/members (对应 ID 为123 的团队下的成员列表)

/api/teams/123/members/456 (对应 ID 为123 的团队下 ID 为 456 的成员)

3.3Verb

用HTTP协议里的动词来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转:

GET:用来获取资源

POST:用来新建资源(也可以用于更新资源)

PUT:用来新建或更新资源,将某个东西放到服务器上,全部更新

DELETE:http://api.qc.com/v1/friends:用来删除资源

POST:http://api.qc.com/v1/friends: 添加好友

3.4状态码

服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的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 - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

3.5错误处理

如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。

{

    error:"Invalid API key"

}

3.6HypermediaAPI

返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。Github的API就是这种设计,访问api.github.com会得到一个所有可用API的网址列表。

{

 "current_user_url": "https://api.github.com/user",

 "authorizations_url":"https://api.github.com/authorizations",

  // ...

}

从上面可以看到,如果想获取当前用户的信息,应该去访问api.github.com/user,然后就得到了下面结果。

{

 "message": "Requires authentication",

 "documentation_url":"https://developer.github.com/v3"

}

4. RAML

致力于Restful接口完整生命周期管理的开源框架,简化接口设计、构建、测试、文档化、分享等工作。


功能:

1.设计API。你可以快速的构造你的API,并以人类友好的格式将它呈现出来。它涵盖了一些重要设计的最佳实践,如建模、模式、模板以及代码重用。

2.构建API。一旦设计好你的API,你就可以借助一些开发工具,将设计好的静态API文档,变成一个服务器端来提供服务。

3.测试API。引入单元测试可以有效地保证API实现的正确性,你可以通过运行一些脚本来测试你服务端是否涵盖了你设计好的API。

4.文档化API。Raml可以帮助你脱离同步维护一份额外文档的痛苦。RAML是一门API描述语言,所以你的API一旦被描述,它就是一份现成的API文档。你可以借助一些工具将它生成可视化的文档。

5.分享以及维护你的API。你可以借助一个基本的JavaScript来生成一些交互式工具(API Consoles或API Nodebooks),这样其他开发者可以使用标准格式与你的维护团队进行交流。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章