项目合作——Api请求

前言

api应当是所有开发人员都熟悉的词。特别是在需要长期稳定地进行数据交互的场景下,一个好的api接口尤为关键。

本文主要是从简单的数据交互出发,总结一下基于python的api请求。

工作流

首先设定这样一个场景:A是数据提供方,B是数据接收方。

那么这一套完整的工作流如下:

  1. A和B共同商定好数据传递方式与数据结构。
  2. A将需要的数据放入json中。
  3. A将该json数据部署到api上。
  4. B发起请求,请求api中的数据。
  5. B得到数据并进行相关处理。

json数据准备

以下内容来自百度百科:

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

简而言之,json是数据的载体,其结构简洁清晰,对于人和机器来说都比较友好。

在json中,有类似字典结构,也有类似数组结构。以下给出一个例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}

一般在实际的开发场景中,最好设定一个标志位来判定该接口是否有数据/是否响应成功。

requests请求

首先,我们需要引入以下两个包:

1
2
import requests
import json

requests请求主要有两类:POST请求和GET请求。总的来说,流程可归纳如下:

  1. 设定api接口
  2. 构造请求参数(一般用作权限认证)
  3. 发起请求
  4. 处理数据

那么在参数设置上,POST和GET的区别如下:

POST: 参数一般位于请求体当中

GET: 参数一般位于你所输入的URL后面

而这个请求体,就是payload。以下给出两种请求方式的实例:

  • POST方式
1
2
3
4
5
6
7
8
9
10
#设定api接口
url = "http://xxxxxxxx"
# 构造请求参数
payload = "xxxxx"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
cookies = {'token':'xxxxxxx', 'name':'xxxxx'}
# 发起请求
response = requests.request("POST", url, headers=headers, data=payload, cookies=cookies)
# 处理数据
data_json = json.loads(response.text)
  • GET方式
1
2
3
4
5
6
7
8
9
#设定api接口
url = "http://xxxxxxxxx"
# 构造请求参数
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20100101 Firefox/23.0'}
cookies = {'token':'xxxxxxx', 'name':'xxxxx'}
# 发起请求
response = requests.request("GET", url, headers=headers, cookies=cookies)
# 处理数据
data_json = json.loads(response.text)

例子中的cookies非必需项,设置cookies是做权限控制的一般方式。

数据处理

得到数据之后,一般是将数据格式转换成json。

1
data_json = json.loads(response.text)

在我们之前给到的例子中,若是想得到值‘深圳’,则获取路径为:

1
value = data_json['province'][1]['cities']['city'][1]

总结

在实际的项目合作中,需要注意以下几点:

  1. 重视数据结构

AB双方应当事先约定好一套合理、规范且不易变动的数据结构。这对于数据提供方的要求较高。

  1. 设计科学的数据结构

首先尽量做到数据解耦。增强数据各个部分的独立性,这样方便日后增添或者删除数据。

其次,考虑数据结构如何设计才能表意明确、快速遍历等。

  1. 权限控制

如果接口不在公司内网,那么这一点更应该做到。

  1. 标志位设置

开发人员应当事先约定好标志位,用以判定是否请求到数据/请求的数据是否有效。