下面我会详细讲解 Python 进行 Restful API 开发实例的完整攻略,并提供两个示例说明。
准备工作
在进行 Restful API 开发之前,需要安装 Flask 和 Flask-RESTful 等库。执行以下命令进行安装:
pip install Flask Flask-RESTful
示例一:ToDo List
在这个示例中,我们将创建一个简单的 ToDo List,包含以下操作:
- 获取所有 tasks
- 获取单个 task
- 创建 task
- 更新 task
-
删除 task
-
创建 Flask 应用
我们首先创建一个简单的 Flask 应用,代码如下:
from flask import Flask
app = Flask(__name__)
if __name__ == '__main__':
app.run(debug=True)
- 创建 tasks 数据
我们创建 tasks 数据来模拟正式的数据库,代码如下:
tasks = [
{
'id': 1,
'title': 'Learn Python',
'description': 'Learn Python basics',
'done': False
},
{
'id': 2,
'title': 'Read book',
'description': 'Read book for 1 hour',
'done': False
}
]
- 创建 API 资源
接下来,我们定义 Flask-RESTful 的 Resource 类来管理 API 资源。我们创建一个 TaskList 类来获取所有 tasks,以及一个 Task 类来获取单个 task。
from flask_restful import Resource
class TaskList(Resource):
def get(self):
return {'tasks': tasks}
class Task(Resource):
def get(self, id):
for task in tasks:
if task['id'] == id:
return task
return {'task': None}, 404
然后,我们在 Flask 应用中添加任务资源的路由:
from flask_restful import Api
api = Api(app)
api.add_resource(TaskList, '/tasks/')
api.add_resource(Task, '/tasks/<int:id>')
现在,我们可以在浏览器中访问 http://localhost:5000/tasks/ 来获取所有 tasks,访问 http://localhost:5000/tasks/1 来获取具有 ID 为 1 的单个 task。
- 更新和删除 task
下一步,我们添加更新和删除 task 的方法。我们使用 PUT 请求来更新 task,使用 DELETE 请求来删除 task。
class Task(Resource):
def get(self, id):
for task in tasks:
if task['id'] == id:
return task
return {'task': None}, 404
def put(self, id):
task = [task for task in tasks if task['id'] == id]
if len(task) == 0:
return {'task': None}, 404
task = task[0]
args = parser.parse_args()
task['title'] = args['title']
task['description'] = args['description']
task['done'] = args['done']
return {'task': task}
def delete(self, id):
task = [task for task in tasks if task['id'] == id]
if len(task) == 0:
return {'task': None}, 404
tasks.remove(task[0])
return {'task': 'deleted'}
我们还需要定义 PUT 和 DELETE 请求的参数:
from flask_restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('title', type=str)
parser.add_argument('description', type=str)
parser.add_argument('done', type=bool)
- 创建 task
最后,我们添加一个 POST 请求来创建 task。
class TaskList(Resource):
def get(self):
return {'tasks': tasks}
def post(self):
args = parser.parse_args()
task = {
'id': len(tasks) + 1,
'title': args['title'],
'description': args['description'],
'done': False
}
tasks.append(task)
return {'task': task}, 201
api.add_resource(TaskList, '/tasks/')
api.add_resource(Task, '/tasks/<int:id>')
现在,我们可以使用 POST 请求来创建一个 task:
$ curl -H "Content-Type: application/json" -X POST -d '{"title":"new task", "description":"new task description"}' http://localhost:5000/tasks/
示例二:简单的 RESTful API
在这个示例中,我们将创建一个简单的 RESTful API,包含以下操作:
- 获取所有 students
- 获取单个 student
- 创建 student
- 更新 student
-
删除 student
-
创建 Flask 应用
我们首先创建一个简单的 Flask 应用,代码如下:
from flask import Flask, jsonify, request
app = Flask(__name__)
if __name__ == '__main__':
app.run(debug=True)
- 创建 students 数据
我们创建 students 数据来模拟正式的数据库,代码如下:
from datetime import datetime
students = [
{
'id': 1,
'name': 'Anna',
'age': 22,
'created_at': datetime.now()
},
{
'id': 2,
'name': 'Bob',
'age': 20,
'created_at': datetime.now()
}
]
- 创建 API 路由
接下来,我们创建路由来定义 API 的各个功能,包括获取所有 students、获取单个 student 以及更新和删除 student。需要注意的是,在进行 POST 和 PUT 请求的处理时,我们需要从 request 中获取数据。
@app.route('/students', methods=['GET', 'POST'])
def handle_students():
if request.method == 'GET':
return jsonify(students)
if request.method == 'POST':
student = {
'id': len(students) + 1,
'name': request.json['name'],
'age': request.json['age'],
'created_at': datetime.now()
}
students.append(student)
return jsonify(student), 201
@app.route('/students/<int:id>', methods=['GET', 'PUT', 'DELETE'])
def handle_student(id):
student = [student for student in students if student['id'] == id]
if len(student) == 0:
return jsonify({'error': 'student not found'}), 404
student = student[0]
if request.method == 'GET':
return jsonify(student)
if request.method == 'PUT':
student['name'] = request.json['name']
student['age'] = request.json['age']
student['created_at'] = datetime.now()
return jsonify(student)
if request.method == 'DELETE':
students.remove(student)
return jsonify({'result': True})
- 测试 API
现在,我们可以在浏览器或终端中发送 GET、POST、PUT、DELETE 等请求来对 API 进行测试。例如,我们可以使用 curl 命令来创建一个新的 student:
$ curl -H "Content-Type: application/json" -X POST -d '{"name":"Lucy", "age":"28"}' http://localhost:5000/students
至此,我们完成了一个简单的 RESTful API 的开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python进行Restful API开发实例详解 - Python技术站