flask中实现restful-api

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。

相关推荐
一条大祥脚31 分钟前
CuTe 与 CuTe DSL:从 C++ 模板元编程到 Python DSL 的 GPU 编程演进
开发语言·c++·python·cutlass·cute·cute dsl
10年前端老司机1 小时前
Milvus 8种检索能力实践
数据库·python·agent
Sakura_j_h_2 小时前
从零写一个 MCP stdio Server:用 Python 校验博客文章格式
开发语言·python·自动化·ai工具·mcp·json-rpc
大草原的小灰灰2 小时前
LLM应用的标准开发框架LangChain(八)- 中间件
python·中间件·langchain
卷无止境2 小时前
百万 token 时代的真相:主流大模型上下文窗口与最大输出的横向对比分析
人工智能·python
用户298698530143 小时前
Python 实战:将 HTML 批量转换为 Markdown
python·html·markdown
hhcgchpspk3 小时前
flask服务端页面预防被爬措施
后端·python·flask·网络爬虫·防爬
小小张说故事3 小时前
Python 里 copy.copy() 和 deepcopy() 到底差在哪:拆开 __copy__、__deepcopy__ 和那个防止无限递归的 memo 字典
python
vipxieliang3 小时前
Python collections:高效容器与实战案例
后端·python
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 STEMA 省考(报名倒计时·11/22开考)+ 全国青少年信息素养大赛 2026—2027赛季 + 电子学会图形化考级:校园华容道大闯关
c++·python·算法·bfs·信息学竞赛