18.14. RESTful-API通信¶
学习大纲
什么是RESTful API。
使用RESTful API的标准库。
处理JSON数据。
18.14.1. 什么是RESTful API¶
REST 即表述性状态传递 (Representational State Transfer)
,而RESTful
API是一种用于Web服务开发的通信方式。作为互联网上不同系统之间的通信方式,它是一种Web服务的风格。它也是一个应用程序接口,用于在HTTP
上使用GET 、PUT 、POST 和DELETE 等方法请求数据。
REST的优势在于它占用带宽较少,适合网络应用。RESTful
API使用统一的接口,所有资源都由GET 、POST 、PUT
和DELETE 操作处理。其中,RESTful API使用GET
来获取资源,使用PUT 更新资源或更改资源状态,使用POST
创建资源,并使用DELETE 删除资源。使用RESTful
API的系统具有快速和可靠等特点。
RESTful API独立处理每个请求,从客户端发送到服务器的请求必须包含(让服务器)理解该请求所需的所有信息。
使用RESTful API的标准库¶
本节我们将学习如何使用RESTful API。接下来将使用Python的requests
和JSON模块。现在我们来看一些示例程序,程序将使用requests
模块从API获取信息。这里会用到GET 和POST 请求。
首先,我们按如下方式安装requests 库。
$ pip3 install requests
现在来看一个示例程序。创建一个脚本,命名为rest_get_example.py
,并在其中写入以下代码。
import requests
req_obj = requests.get('https://www.news.baidu.com')
print(req_obj)
上面的示例程序导入了requests
模块以发送请求,接着创建了一个请求对象req_obj
,并指定了想要发送请求的链接地址,最后输出结果。这里得到的状态代码为200
,表示请求成功。
现在,我们来看POST 请求的示例程序,POST
请求用于将数据发送到服务器。创建一个脚本,命名为rest_post_example.py
,并在其中写入以下代码。
import requests
import json
url_name = 'http://httpbin.org/post'
data = {"Name" : "John"}
data_json = json.dumps(data)
headers = {'Content-type': 'application/json'}
response = requests.post(url_name, data=data_json, headers=headers)
print(response)
上面的示例程序使用了POST 请求。首先导入了必要的requests
模块和json
模块,接着给出了URL。然后制定了想要以字典格式发送到服务器的数据,并给出了请求头。接着使用POST
请求发送了数据。最后得到的状态代码为200 ,表示请求成功。
处理JSON数据¶
处理JSON数据。JSON 即对象简谱 (JavaScript Object Notation) 。JSON是一种数据交换格式,我们可以将Python对象编码为JSON字符串,也可以将JSON字符串解码为Python对象。Python包含一个JSON模块,可以格式化JSON数据输出。它具有序列化和反序列化JSON的函数,如下所示。
json.dump(obj, fileObj):此函数将Python对象序列化为JSON格式的流。json.dumps(obj):此函数将Python对象序列化为JSON格式的字符串。json.load(JSONfile):此函数将JSON文件反序列化为Python对象。json.loads(JSONfile):此函数将字符串类型的JSON文件反序列化为Python对象。
它还有两个用于编码和解码的类。
JSONEncoder:用于将Python对象转换为JSON格式的文件。JSONDecoder:用于将JSON格式的文件转换为Python对象。
从JSON字符串到Python对象的转换。创建一个脚本,命名为json_to_python.py
import json
j_obj = '{ "Name":"Harry", "Age":26, "Department":"HR"}'
p_obj = json.loads(j_obj)
print(p_obj["Name"])
print(p_obj["Department"]
上面的示例程序将JSON字符串转换为Python对象,json.loads()
函数用于将JSON字符串转换为Python对象。
将Python对象转换为JSON字符串。创建一个脚本,命名为python_to_json.py
import json
emp_dict1 = '{ "Name":"Harry", "Age":26, "Department":"HR"}'
json_obj = json.dumps(emp_dict1)
print(json_obj)
上面的示例程序将Python对象转换为JSON字符串,其中的json.dumps()
函数用于实现这种转换。
现在我们来看如何将各种类型的Python对象转换为JSON字符串。创建一个脚本,命名为python_object_to_json.py
import json
python_dict = {"Name": "Harry", "Age": 26}
python_list = ["Mumbai", "Pune"]
python_tuple = ("Basketball", "Cricket")
python_str = ("hello_world")
python_int = (150)
python_float = (59.66)
python_T = (True)
python_F = (False)
python_N = (None)
json_obj = json.dumps(python_dict)
json_arr1 = json.dumps(python_list)
json_arr2 = json.dumps(python_tuple)
json_str = json.dumps(python_str)
json_num1 = json.dumps(python_int)
json_num2 = json.dumps(python_float)
json_t = json.dumps(python_T)
json_f = json.dumps(python_F)
json_n = json.dumps(python_N)
print("json object : ", json_obj)
print("json array1 : ", json_arr1)
print("json array2 : ", json_arr2)
print("json string : ", json_str)
print("json number1 : ", json_num1)
print("json number2 : ", json_num2)
print("json true", json_t)
print("json false", json_f)
print("json null", json_n)
从Python对象到JSON字符串的转换关系如表
从Python对象到JSON字符串的转换关系
Python |
JSON |
|---|---|
|
Object |
|
Array |
|
Array |
|
String |
|
Number |
|
Number |
|
true |
|
false |
|
null |
18.14.2. 总结¶
我们学习了RESTful API的requests
库。还学习了处理JSON数据,将JSON字符串转换为Python对象以及将Python对象转换为JSON字符串。