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)

在这个例子中,定义了两个资源:TaskListTaskTaskList资源有两个方法: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

相关推荐
laity1710 分钟前
激活IDM的几种方法
python
gsls20080823 分钟前
使用xdocreport导出word
前端·python·word
Johny_Zhao1 小时前
基于CentOS Stream 8的物联网数据采集与展示方案
linux·网络·python·mqtt·mysql·网络安全·信息安全·云计算·shell·yum源·系统运维
这里有鱼汤1 小时前
想成为下一个吉姆·西蒙斯,这十种经典K线形态你一定要记住
后端·python
Scoful2 小时前
快速用 uv 模拟发布一个 Python 依赖包到 TestPyPI 上,以及常用命令
开发语言·python·uv
xyl8662 小时前
Python 包管理器 uv 介绍
python·uv
databook2 小时前
规则学习:让机器学习像人类一样思考的可解释之路
python·机器学习·scikit-learn
cylat2 小时前
Day23 pipeline管道
人工智能·python·算法·机器学习
蓝桉~MLGT3 小时前
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java·开发语言·python
IOT.FIVE.NO.13 小时前
Conda安装pytorch和cuda出现问题的解决记录
人工智能·pytorch·python