1. 普通接口开发方法:(模拟用户的增删改查)
from app01 import views urlpatterns = [ url(r'^create_user/', views.create_user), url(r'^del_user/', views.del_user), url(r'^edit_user/', views.edit_user), url(r'^get_user/', views.get_user), ] def create_user(request): return HttpResponse('...') def del_user(request): return HttpResponse('...') def edit_user(request): return HttpResponse('...') def get_user(request): return HttpResponse('...')
缺点:如果功能越多,函数和url就越多
2. restful接口开发规范
2.1 根据method不同做不同的操作,示例:
2.1.1 基于FBV的方式
urlpatterns = [ url(r'^user/', views.user), ] def user(request): if request.method == 'GET': return HttpResponse('查看用户') elif request.method == 'POST': return HttpResponse('创建用户') elif request.method == 'PUT': return HttpResponse('修改用户') elif request.method == 'DELETE': return HttpResponse('删除用户')
2.1.2 基于CBV的方式
urlpatterns = [ url(r'^user/', views.UserView.as_view()), ] from django.views import View class UserView(View): def get(self,request): return HttpResponse('查看用户') def post(self,request): return HttpResponse('创建用户') def put(self,request): return HttpResponse('编辑用户') def delete(self,request): return HttpResponse('删除用户')
3. Restful API设计
3.1 API与用户的通信协议,使用https协议
3.2 域名规范,如:
https://api.twonss.com
或
https://www.twonss.com/api/
3.3 版本规范,如:
https://www.twonss.com/api/v1/ # v1指版本,可以加在url上也可以加在请求头上
3.4 路径规范
视网络上任何东西都是资源,均使用名词表示(可以是复数)如:
https://www.twonss.com/api/v1/user/ # user就是一个名词,最好不要是动词
3.5 method规范
GET :从服务器上取资源
POST :在服务器上创建一个资源
PUT :在服务器上更新资源(客户端提供要改变的完整资源)
PATCH :在服务器上更新资源(客户端只提供要改变的资源)
DELETE :从服务器删除资源
3.6 过滤条件规范,通过在url上传参的形式传递搜索条件,如:
https://www.twonss.com/api/v1/user/?name=alex&age=22 # 指定用户名为alex,age为22的用户
3.7 状态码
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://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
只使用状态码是完全不够的,也要自定义code,两者结合,在通过httpresponse返回到前端
3.8 错误处理,当状态码是4XX时,应返回错误信息,error当做key,key可以随意指定
{
'error':'xxxxxx',
}
3.9 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET /user/:返回资源对象的列表(数组,全部)
GET /user/1/:返回单个资源对象
POST /user/:返回新生成的资源对象
PUT /user/1/:返回完整的资源对象(全局)
PATCH /user/1/:返回完整的资源对象(局部)
DELETE /user/1/:返回一个空文档
3.10 Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
4. restful开发规范流程分为两类:
1. 请求:https,域名规范,版本,名词,过滤条件,method方法
2. 响应:状态码,错误信息,结果集,Hypermedialink