Django中⾃定义实现RESTfulAPI
什么是restful api
可以总结为⼀句话:REST是所有Web应⽤都应该遵守的架构设计指导原则。 Representational State Transfer,翻译是”表现层状态转化”。⾯向资源是REST最明显的特征,对于同⼀个资源的⼀组不同的操作。REST要求,必须通过统⼀的接⼝来对资源执⾏各种操作。对于每个资源只能执⾏⼀组有限的操作。(7个HTTP⽅法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)
Restful API设计规范
1,资源。⾸先是弄清楚资源的概念。资源就是⽹络上的⼀个实体,⼀段⽂本,⼀张图⽚或者⼀⾸歌曲。资源总是要通过⼀种载体来反应它的内容。JSON是现在最常⽤的资源表现形式。
2,统⼀接⼝。RESTful风格的数据元操CRUD(create,read,update,delete)分别对应HTTP⽅法:GET⽤来获取资源,POST⽤来新建资源(也可以⽤于更新资源),PUT⽤来更新资源,DELETE⽤来删除资源,这样就统⼀了数据操作的接⼝。
3,URI。可以⽤⼀个URI(统⼀资源定位符)指向资源,即每个URI都对应⼀个特定的资源。要获取这个资源访问它的URI就可以,因此URI就成了每⼀个资源的地址或识别符。⼀般的,每个资源⾄少有⼀个URI
与之对应,最典型的URI就是URL。
4,⽆状态。所谓⽆状态即所有的资源都可以URI定位,⽽且这个定位与其他资源⽆关,也不会因为其他资源的变化⽽变化。有状态和⽆状态的区别,举个例⼦说明⼀下,
例如要查询员⼯⼯资的步骤为第⼀步:登录系统。第⼆步:进⼊查询⼯资的页⾯。第三步:搜索该员⼯。第四步:点击姓名查看⼯资。这样的操作流程就是有状态的,查询⼯资的每⼀个步骤都依赖于前⼀个步骤,只要前置操作不成功,后续操作就⽆法执⾏。如果输⼊⼀个URL就可以得到指定员⼯的⼯资,则这种情况就是⽆状态的,因为获取⼯资不依赖于其他资源或状态,且这种情况下,员⼯⼯资是⼀个资源,由⼀个URL与之对应可以通过HTTP中的GET⽅法得到资源,这就是典型的RESTful风格。
RESTful API其他⼀些规范
2:URL中只能有名词⽽不能有动词,URL只标识资源的地址,既然是资源那就是名词了。
3:如果记录数量很多,API应该提供参数,过滤返回结果。?limit=10:指定返回记录的数量、?page=2&per_page=100:指定第⼏页,以及每页的记录数。
PS:我介绍的是⾃定义实现Django restful,当然Django中有⼀种更快捷、强⼤的⽅法,那就是 Django REST framework。它是python 的⼀个模块,通过在Django⾥⾯的配置就可以把app的models中
的各个表实现RESTful API。
RESTful API的简单实现
⽬录结构
具体代码
准备:先在models中建⼀个Person类插⼊⼀些数据。
api_v1.py:
from django.forms import model_to_dict
from django.http import QueryDict, JsonResponse
from ic import View
dels import *
class PersonAPI(View):
def get(self,req):
data = Person.objects.all()
person = [model_to_dict(i) for i in data]
result = {
'code':1,
'msg':'数据查询到了',
'data':person
}
return JsonResponse(result)
def post(self,req):
name = ('name')
age = ('age')
res = ate(name = name,age = age)
result = {
'code':1,
'msg':'数据创建成功',
'data':model_to_dict(res)
}
return JsonResponse(result)
def delete(self,req):
params = QueryDict(req.body)
id = ('s_id'))
res = (pk=id)
res.delete()
result = {
'code':1,
'msg':'数据删除成功',
'data':id
}
return JsonResponse(result)
api_v1.pyrestful接口设计
当请求的⽅法不同时,会⾃动根据请求的⽅法分发到不同的函数⽅法来执⾏相应的操作。我这⾥只写了三种⽅法,要是是这三种以外的⽅法访问的话,会报405错误,说请求⽅法不被允许。
urls_api_v1.py:
f.urls import url
from app.api_v1 import *
urlpatterns = [
url('^personapi$',PersonAPI.as_view()),
]
urls_api_v1.py
urls.py:
f.urls import url,include
ib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/v1/', include('app.urls_api_v1')),
]
urls.py
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论