API 接口

发布时间 2023-08-28 16:50:32作者: 凡人半睁眼

一、API 简介

1、前后端分离项目中

  为了在团队内部形成共识、防止个人习惯差异引起的混乱,我们需要找到一种大家都觉得很好的接口实现规范,而且这种规范能够让后端写的接口,用途一目了然,减少双方之间的合作成本

2、url和接口的区别

Web API接口和一般的url链接还是有区别的,Web API接口简单概括有下面四大特点

1. url:长得像返回数据的url链接

https://api.map.baidu.com/place/v2/search

2. 请求方式:get、post、put、patch、delete

采用get方式请求上方接口

3. 请求参数:json或xml格式的key-value类型数据

ak:6E823f587c95f0148c19993539b99295
region:上海
query:肯德基
output:json

4. 响应结果:json或xml格式的数据

https://api.map.baidu.com/place/v2/search?ak=6E823f587c95f0148c19993539b99295&region=%E4%B8%8A%E6%B5%B7&query=%E8%82%AF%E5%BE%B7%E5%9F%BA&output=json

3、 典型的api接口长这样

- url地址
- 有请求方式
- 携带参数
- 返回格式是json,xml

二、练习题

1、写一个demo使用postman测试

-1 传用户名密码到后端,查询数据库,都对了---》返回json格式{code:100,msg:登录成功}---》urlencoded

-2 打印 request.POST

-3 打印 request.body

-4 传文件到后方

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def api(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        phone = request.POST.get('phone')
        file = request.FILES.get('file')
        print(file)
        # print(request.body)  大文件不能获取到二进制数据,因为http基于TCP流式协议,容易发生沾包

        res = models.UserInfo.objects.filter(username=name, phone=phone).first()
        if res:
            print(name, phone)
            print(request.POST)  # <QueryDict: {'name': ['jingzhiz'], 'phone': ['123123']}>
            print(request.body)  # b'name=jingzhiz&phone=123123'
            dict_back = {'code': 200, 'msg': '后端返回数据: 用户名和电话验证成功!'}
            return JsonResponse(dict_back)
        elif file:
            dict_back = {'code': 200, 'msg': '后端返回数据: 上传文件成功!'}
            return JsonResponse(dict_back)
        else:
            dict_back = {'code': 200, 'msg': '后端返回数据:用户名和电话验证失败!'}
            return JsonResponse(dict_back) 

注:

1、@csrf_exempt 装饰器是绕过csrf验证

2、 request.body 不能取到大文件数据,因为http基于TCP流式协议,容易发生沾包

 

三、