基于django实现restful api

restful 规范(建议)

用户的增删改查,4个api即4个url,即user_add、user_delete、user_update、user_get

则基于用户管理的api开发为:后端:卢旭彤。前端:龙哥

 

 

 a.接口开发

  方式一:

在url.py中:

urlpatterns = [
    # path('admin/', admin.site.urls),
      path (r'get_order/', views.get_order),
      path (r'add_order/', views.add_order),
      path (r'del_order/', views.del_order),
      path (r'update_order/', views.update_order),
]

在view.py中:

#订单的四个信息.
def get_order(request):
     return HttpResponse('')


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


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


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

方式一:弊端,随着url越来越多会更麻烦,故出现restful规范。

方式二:restful规范(建议)

1、根据method不同让接口做不同的响应。示例:

基于FBV:

urlpatterns = [
      path (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 = [
      path (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('删除订单')

注:不遵循规范也能实现。

restful规范的种类:一共10种如下:

 

 

 

 

 

 

注释:

1、https更安全,域名要认证,要买服务器。http不用

2、子域名方式:(域名不同会存在跨域问题,浏览器有同源策略可能会阻止请求回来)

www.luffycity.com(用户看到的)

api.luffycity.com(返回Jason数据)

URL方式:(同一个域名,只是URL不同)

 www.luffycity.com

 www.luffycity.com/api/(即加上一个api)

3、版本

  www.luffycity.com/api/v1/(版本写在请求体也可以)

4、面向资源编程

网络上的东西都是资源,故使用名词或者名词复数作为URL,示例: www.luffycity.com/api/v1/order/

5、method

根据不同的方法做不同的操作,PUT代表全部更新,PATCH代表局部更新。示例:PUT让用户列表的用户名密码邮箱全部更新,而PATCH代表用户名的其中一项,比如说邮箱的更新。

6、过滤

对URL加条件,例如: www.luffycity.com/api/v1/order/?status=1&page=2

7、状态码

200 成功 ;4**  客户端错误:404找不到页面; 403csrf认证跨域问题;500服务器错误 ;301临时重定向;302永久重定向;

状态码(浏览器)+code(给前端)结合来写api.

 

 

 修改状态代码为201

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

 

原代码:

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('删除订单')

另一种形式:

class OrderView(View):

    def get(self, request, *args, **kwargs):

        ret = {
            'code': 1000,
            'msg': 'xxx'
        }
        return JsonResponse(ret)

PS:状态码可以省略。

8、错误处理   后端像前端返回的结果

示例:

GET/order/    返回资源对象的列表(数组)  #获取所有订单
GET/order/1/ 返回单个资源对象 #获取一个订单的详细 1为订单的ID
POST/order/返回新生成的资源对象 #创建订单,返回给前端(规范定的)但实际上如果前端不要新对象,可以不用返回,否则浪费网络资源
PATCH/order/1/返回完整的资源对象 #修改数据库字段的局部列
PUT/order/1/ 返回完整的资源对象 #修改一个订单
DELETE/order/1/ 返回一个空文档 #删除一个订单

9、Hypermedia API(即下面实例的第一种方法)

  c、谈谈自己对restful api 规范的认识

答:就是指以上的几类规范,可以不遵守只是建议。按照规范做更加统一第二种:跨域怎么解决,两种方式:JNSON P原理

状态码,二系列三系列四系列五系列,每个系列知道几个即可、MYSQL包括以上的10类规则。

总结:推荐使用CBV

posted @ 2022-05-21 10:17  费皿啊  阅读(194)  评论(0)    收藏  举报