Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

restful API设计规范 #58

Open
SunDoge opened this issue Nov 9, 2016 · 0 comments
Open

restful API设计规范 #58

SunDoge opened this issue Nov 9, 2016 · 0 comments

Comments

@SunDoge
Copy link

SunDoge commented Nov 9, 2016

原文在

http://gayhub.cn/blog/api-design-specification

主要是规范一下前后端合作,移动端合作中的数据交互问题。

本次治愈系基于此规范开发


2016/11/06

patch规定在要修改的对象不存在时须创建对象。所以put才是update的意思,而patch更像saveOrUpdate

另外很重要的一点是,目前一些框架不支持patch,所以暂时避免使用。


Status Code

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


Http

  • GET(SELECT):从服务器取出资源(一项或多项)。

  • POST(CREATE):在服务器新建一个资源。

  • PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

  • PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

  • DELETE(DELETE):从服务器删除资源。


PUT和PATCH的不同在于,PUT传过来的必须是全部参数,PATCH可以是一部分参数。另外,PUT传的数据有空的话,数据库中也应当对应清空。

Lumen/Laravel中的可以这样写

return response()->json(['error' => 'not_found'], 404); 

第一个参数为数组,为要返回的json,第二个为status code,这个时候status是不应该放json里面的,以前前后端合作习惯有status来作为判断条件,其实可能不是很规范的方法。

依这个规范给同学写了一套简单的接口,用了Lumen,同学说不要token,那我就没写token,所以整套接口是暴露的。。。

https://github.com/SunDoge/zeming

仅供参考,实际生产还是用Laravel配合jwt之类的来做,不然配置各种package会把人搞到崩溃。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants