Restful API设计规范

restful规范(建议)

RESTful

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态

  • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

  • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

  • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

1、 接口开发

1
2
3
4
5
6
7
8
9
10
11
def get_order(request):
return HttpResponse('')

def add_order(request):
return HttpResponse('')

def update_order(request):
return HttpResponse('')

def del_order(request):
return HttpResponse('')
1
2
3
4
url(r'^get_order/', views.get_order),
url(r'^add_order/', views.add_order),
url(r'^del_order/', views.del_order),
url(r'^update_order/', views.update_order),

2. restful规范(建议)

1. 根据method不同做不同的操作

基于FBV

1
2
3
4
5
6
7
8
9
def order(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('删除订单')

1
url(r'^order/', views.order),

基于CBV

1
url(r'^dog/', views.DogView.as_view()),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class OrderView(View):
def get(self,request,*args,**kwargs):

ret = {
'code':1000,
'msg':'xxx'
}

return HttpResponse(json.dumps(ret),status=201)

def post(self,request,*args,**kwargs):
return HttpResponse('创建订单')

def put(self,request,*args,**kwargs):
return HttpResponse('更新订单')

def delete(self,request,*args,**kwargs):
return HttpResponse('删除订单')

3. RESTful API设计规范

  • 错误处理,状态码是4xx时,应返回错误信息,error当做key。

    1
    error: "Invalid API key"
  • 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。

    • GET /collection:返回资源对象的列表(数组)
    • GET /collection/resource:返回单个资源对象
    • POST /collection:返回新生成的资源对象
    • PUT /collection/resource:返回完整的资源对象
    • PATCH /collection/resource:返回完整的资源对象
    • DELETE /collection/resource:返回一个空文档
  • Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。

1
2
3
4
5
6
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
  • 注意,推荐使用CBV方式