flask中实现restful-api
举例,我们可以创建一个用于管理任务(Task)的API。在这个例子中,我们将有以下API:
GET /tasks
: 获取所有任务POST /tasks
: 创建一个新的任务GET /tasks/<id>
: 获取一个任务的详情PUT /tasks/<id>
: 更新一个任务DELETE /tasks/<id>
: 删除一个任务
在这个例子中,我们将使用一个简单的内存数据结构来存储任务,而不是使用数据库。这是代码:
python
from flask import Flask, request
from flask_restful import Resource, Api, abort
app = Flask(__name__)
api = Api(app)
# 用于存储任务的字典,以ID为键
TASKS = {}
def abort_if_task_doesnt_exist(task_id):
if task_id not in TASKS:
abort(404, message="Task {} doesn't exist".format(task_id))
class TaskList(Resource):
def get(self):
return TASKS
def post(self):
task_id = max(TASKS.keys()) + 1 if TASKS else 1
task = {'task': request.json.get('task', "")}
TASKS[task_id] = task
return task, 201
class Task(Resource):
def get(self, task_id):
abort_if_task_doesnt_exist(task_id)
return TASKS[task_id]
def put(self, task_id):
abort_if_task_doesnt_exist(task_id)
task = {'task': request.json.get('task', TASKS[task_id]['task'])}
TASKS[task_id] = task
return task
def delete(self, task_id):
abort_if_task_doesnt_exist(task_id)
del TASKS[task_id]
return '', 204
api.add_resource(TaskList, '/tasks')
api.add_resource(Task, '/tasks/<int:task_id>')
if __name__ == '__main__':
app.run(debug=True)
在这个例子中,定义了两个资源:TaskList
和Task
。TaskList
资源有两个方法:GET和POST,分别用于获取所有任务和创建新任务。Task
资源有三个方法:GET,PUT和DELETE,分别用于获取,更新和删除一个特定的任务。对于每一个方法,我们都需要处理不同的请求和响应。
在REST架构中,资源(Resource)是一种基本概念。在Web中,一个资源可以是一件事物或实体,比如用户、订单、产品等,可以通过URI(统一资源标识符)来唯一标识。每个资源可以有一个或多个表述(Representation),比如JSON或XML等格式的数据。通过HTTP方法(如GET, POST, PUT, DELETE等)可以对资源进行操作。
在Flask-RESTful中,Resource类是定义资源的基础类,可以通过继承这个类来创建我们自己的资源。在Resource类中,可以定义各种HTTP方法来响应不同的请求。例如:
python
from flask_restful import Resource
class MyResource(Resource):
def get(self):
pass
def post(self):
pass
在这个例子中,创建了一个名为MyResource
的资源,这个资源有两个方法:GET和POST。当我们在Flask-RESTful的API对象中添加这个资源时,API对象将会根据请求的HTTP方法来调用相应的方法。例如,如果收到一个GET请求,那么就会调用get
方法。
注意,Resource类中的方法名应该和HTTP方法名一致。你可以定义以下这些方法:get
, post
, put
, delete
, head
, options
, patch
。