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

时间:2015-01-25 05:18:01

标签: python api routes flask restful-url

在一些像slim php框架这样的框架中,您可以在/api/v1等所有路由中定义相同的基本路由。

因此,在苗条的情况下,我们可以将路线分组,而不是在每条路线中放置/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')

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找Blueprints。蓝图是将您的应用分成几个较小部分的好方法 - 例如,您可能拥有&#34; main&#34;您的网络应用蓝图,&#34;管理员&#34;管理界面的蓝图和&#34; api&#34; RESTful API的蓝图。

答案 1 :(得分:1)

虽然Blueprints很棒,但看起来你正在寻找一个更具体的扩展,以满足你建立一个在HTTP方法之间容易区别的API的愿望。

您可能希望查看Flask-Classy,这是一个烧瓶扩展,就是这样做的。您可以为每个资源创建一个类(就像您在伪代码上描述的那样)并且在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提供很多方法。