web API接口、restful规范

drf(Django-restframework)框架安装

  • drf是Django的插件, 所以要提前安装Django
  • 安装drf插件: pip3 install djangorestframework
  • 使用drf时, 要在django项目中的settings文件中注册

Web API接口

什么是接口

规定了提交参数的请求方式,访问 其可以获取响应的反馈数据的url链接

包含了四部分: url链接 + 请求方式 + 请求参数 + 响应数据

  • url: 长得像返回数据的url链接 https://api.map.baidu.com/place/v2/search

  • 请求方式: get post put patch delete

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

    • ak: 124524542EJbhbuH899
    • regin: 上海
    • query: 大本营
    • output: json
  • 响应结果: json或xml格式的数据

    • 上方请求参数的output参数值决定了响应数据的格式

    • {
          "status": 0,
          "message": "ok",
          "results": [
              {
                  "name": "大本营",
                  "location": {
                      "lat": 31.45346,
                      "lng": 146.23423
                  },
                  "address": "本环路123号",
                  "province": "上海市",
              }
              ......
          ]
      }
      

接口文档的编写:YApi

YApi是去哪儿网前段计数中心的一个开源可视化 接口管理平台.

详情见官方文档

接口测试工具: Postman

Postman是一款接口调试工具, 支持多操作系统平台, 是测试接口的首选工具

可以在官网下载使用

推荐Postman的开源代替品: Postwoman

restful接口规范

RESTful 是目前最流行的 API 设计规范,用于 Web 数据接口的设计。

url设计

1、保障数据安全

  • 接口都是操作前后端数据的, 为了保证数据的安全, 采用https协议

2、接口特征表现

  • 接口用来操作数据, 与网址有区别, 所有用特定的关键字表示接口

    • https://api.baidu.com
      https://www.baidu.com/api
      

3、多版本资源共存

  • 如果一个资源存在多版本结果, 在url链接中要用特定符号来兼容多版本共存

    https://api.baidu.com/v1/books/
    https://api.baidu.com/v2/books/
    

4、数据就是资源

接口操作的数据称之为资源, 在url中体现 资源的名称, 不能体现操作资源的动词, 错误示范:https://api.baidu.com/get_books

  • 常规资源接口

    https://api.baidu.com/books/
    https://api.baidu.com/books/(pk)/
    
  • 非常规接口 和某资源不是特别密切或是不止一种资源

    https://api.baidu.com/login/
    https://api.baidu.com/place/search/
    

5、群资源操作

一般还有额外的限制条件, 如排序、限制调试、分页等

https://api.baidu.com/v1/books/?ordering=-price&limit=3

这让人就知道  搜索价格最贵的前三本书

6、资源操作由请求方式决定

  • get 获取单个或多个资源

    https://api.baidu.com/books/        群查,返回多个结果对象
    https://api.baidu.com/books/(pk)/   单查,返回单个结果对象
    
  • post 新增单个或多个资源

    https://api.baidu.com/books/
    
    单增  提交单个数据字典, 完成单增,  返回单个结果对象
    群增   提供多个数据字典的数组, 完成群增, 返回多个结果对象
    
  • put 整体修改单个或多个资源

    • https://api.baidu.com/books/
      整体修改多个, 提供多个数据字典的数组(数据字典中包含主键), 完成整体多个修改,返回对个结果对象
      
    • https://api.baidu.com/books/(pk)/
      整体修改单个, 提供单个数据字典(主键在url中体现),  完成整体单个修改, 返回单个结果对象
      
  • patch 局部修改单个或多个资源

    方式与put相同, 不同的是 操作的资源如果有5个key-value键值对, put请求提供的字典必须全包含, 但是patch提供的字典包含的键值对0-5个都可以 一般用patch

  • delete 删除单个或多个资源

    • https://api.baidu.com/books/
      多删, 提供多个资源主键数据,  完成群删, 不做任何资源的返回,   一般返回的结果就是: 成功或失败
      
    • https://api.baidu.com/books/(pk)/
      
      单删, 不需要提供额外数据,  完成单删,  不做资源的返回
      

响应结果

1、响应对象中要包含网络状态码(网络状态信息和网络状态码捆绑出现, 不要额外设置)

  • 1xx: 基本信息
  • 2xx 成功
    • 200 常规请求 成功
    • 201 创建成功
  • 3xx 重定向
  • 4xx 客户端 错误
    • 400 错误请求
    • 403 请求无权限
    • 404 请求资源不存在
  • 5xx 服务器错误 500

2、数据状态码 (一般是前后端约定规则)

如:

0:  成功
1:  失败    1xx 具体失败信息 要在接口文档中明确写出
2:  无数据   2xx  具体无数据信息

3、数据状态信息

一般不仅仅是对数据状态码的解释, 更多的是对结果的描述, 给前端开发者阅读

{
    "status": 0,
    "message": "ok",
    "results": [
        {
            "name": "大本营",
            "location": {
                "lat": 31.45346,
                "lng": 146.23423
            },
            "address": "本环路123号",
            "province": "上海市",
        }
        ......
    ]
}

4、数据结果

一般是数组 \ 字典形式, 如果有子资源(图片 视频 音频), 返回资源的url链接

{
    "status": 0,
    "msg": "ok",
    "results": [
        {
            "name": "小王子",
            "img": "https://api.baidu.com/media/books/1.jpg"
        }
    ]
}
posted @ 2019-12-23 22:21  SetCreed  阅读(761)  评论(0编辑  收藏