python - 如何在 Flask API 路由系统中定义基本路由

标签 python api routes flask restful-url

在某些框架(例如 slim php 框架)中,您可以定义在所有路由(例如 /api/v1)中相同的基本路由。

因此,在 slim 中,我们可以对路由进行分组,不要将 /api/v1 放入每个路由中:

$app->group('/api/v1', function () use ($app) {

        // Get book with ID
        $app->get('/books/:id', function ($id) {

        });

        // Update book with ID
        $app->put('/books/:id', function ($id) {

        });

        // Delete book with ID
        $app->delete('/books/:id', function ($id) {

        });

});

但是在 Flask 中我找不到一种简单的方法来对路线进行分组。如果我必须在调用的每个资源中写入 /api/v1 怎么办?有没有办法将它们分组?

在 python 中我应该使用如下所示的内容:

class TaskListAPI(Resource):
    def get(self):
        pass

    def post(self):
        pass

class TaskAPI(Resource):
    def get(self, id):
        pass

    def put(self, id):
        pass

    def delete(self, id):
        pass

api.add_resource(TaskListAPI, '/api/v1/tasks', endpoint = 'tasks')
api.add_resource(TaskAPI, '/api/v1/tasks/<int:id>', endpoint = 'task')

最佳答案

同时Blueprints太棒了,看来您正在寻找一个更具体的扩展,以满足您构建一个可以轻松区分 HTTP 方法的 API 的愿望。

您可能想看看Flask-Classy ,这是一个 Flask 扩展,它就是这样做的。您可以为每个资源创建一个类(正如您在伪代码中描述的那样)并在 http 方法上有所不同:

from flask_classy import FlaskView


class TaskView(FlaskView):
    def index(self):
        """Return a list of all tasks."""
        pass

    def get(self, id):
        """Get a specific task."""
        pass

    def delete(self, id):
        """Delete the task."""
        pass

TaskView.register(app)

此外,Flask-Classy 支持多种方式 customize the endpoints ,如果有特殊情况。

关于python - 如何在 Flask API 路由系统中定义基本路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28133492/

相关文章:

python - 为 SocketServer 添加 SSL 支持

c# - SetWindowsHookEx 与 SetWinHookEventEx

asp.net-mvc-3 - .NET MVC 路由与 Url 编码问题

php - Laravel 如何将组前缀参数添加到路由功能

node.js - 表达4参数条件

php - 我应该在什么基础上构建我的 alpha 平台,PHP、Ruby、Python、.NET 等?

python - .bashrc 中设置的 Fabric 环境变量不可用

python - 将 css 类从数据库添加到 manytomany 字段

javascript - YouTube Player API无法完全加载?

php - 编写 PHP API 和 Android 应用程序