restful规范(9种)
这是我参与8月更文挑战的第22天,活动详情查看:8月更文挑战
感激相遇 你好 我是y大壮
作者:y大壮
链接:juejin.cn/user/756923… 来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
🌊🌈关于前言:
文章部分内容及图片出自网络,如有问题请与我本人联系
🌊🌈关于内容:
1、一般接口开发
urlpatterns = [
# url(r'^admin/', admin.site.urls),
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),
]
def get_order(request):
return HttpResponse('')
def add_order(request):
return HttpResponse('')
def del_order(request):
return HttpResponse('')
def update_order(request):
return HttpResponse('')
2、restful规范开发(9种)
根据method不同做不同的操作
FBV
urlpatterns = [
url(r'^order/', views.order),
]
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('删除订单')
CBV
urlpatterns = [
url(r'^order/', views.OrderView.as_view()),
]
class OrderView(View):
def get(self,request,*args,**kwargs):
return HttpResponse('获取订单')
def post(self,request,*args,**kwargs):
return HttpResponse('创建订单')
def put(self,request,*args,**kwargs):
return HttpResponse('更新订单')
def delete(self,request,*args,**kwargs):
return HttpResponse('删除订单')
2.1 域名
应该尽量将API部署在专用域名之下。
https://api.example.com
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
2.2 版本(Versioning)
应该将API的版本号放入URL。
http://www.example.com/app/1.0/foo
1) AcceptHeaderVersioning
请求头中传递的Accept携带version版本信息
GET /bookings/ HTTP/1.1
Host: example.com
Accept: application/json; version=1.0
2)URLPathVersioning(推荐使用)
URL路径中携带版本信息
urlpatterns = [
url( r'^(?P<version>(v1|v2))/bookings/$', bookings_list,name='bookings-list' ),
url( r'^(?P<version>(v1|v2))/bookings/(?P<pk>[0-9]+)/$',bookings_detail,name='bookings-detail')
]
2.3 路径
路径又称"终点"(endpoint),表示API的具体网址,每个网址代表一种资源(resource)
(1) 资源作为网址,只能有名词,不能有动词,而且所用的名词往往与数据库的表名对应。
(2) API中的名词应该使用复数。无论子资源或者所有资源。
举例来说,获取产品的API可以这样定义
2.4 HTTP
对于资源的具体操作类型
GET
POST
GET
PUT
PATCH
DELETE
GET
DELETE
2.5 过滤信息
如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
下面是一些常见的参数。
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
2.6 状态码
服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。
比如 200 300 400 500 等等这些
2.7 错误处理(Error handling)
如果状态码是4xx,服务器就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。
2.8 返回结果
比如resf的Response
2.9 其他
服务器返回的数据格式,应该尽量使用JSON,避免使用XML。
3、自己对restful api 规范的认识
就是一个规范,定义一些规范,让我们写api的时候更好做区分,更容易让我们的后台去处理,更容易让前端记录url,
说白了就是让url可以体现出对api的操作,让返回的信息可以体验出对接口的操作。
@property
class pop:
def __init__(self):
self.a = "abc"
@property
def user(self):
return a
p = pop()
p.user # 加了装饰器property不用加括号就可以调用,get