如何在 Flask API 路由系统中定义基本路由
How to define a base route in Flask API routing system
在某些框架中,例如 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。蓝图是将您的应用程序分成几个较小部分的好方法 - 例如,您可能有一个 "main" 网络应用程序蓝图、一个 "admin" 管理界面蓝图和一个 "api" 你的 RESTful API.
的蓝图
虽然 Blueprints 很棒,但看起来您正在寻找更具体的扩展,以满足您构建 HTTP 方法之间很容易不同的 API 的愿望。
您可能想看看 Flask-Classy,这是一个 flask 扩展,它就是这样做的。您可以为每个资源创建一个 class (就像您在伪代码中描述的那样)并且在 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,如果你有特殊情况的话。
在某些框架中,例如 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。蓝图是将您的应用程序分成几个较小部分的好方法 - 例如,您可能有一个 "main" 网络应用程序蓝图、一个 "admin" 管理界面蓝图和一个 "api" 你的 RESTful API.
的蓝图虽然 Blueprints 很棒,但看起来您正在寻找更具体的扩展,以满足您构建 HTTP 方法之间很容易不同的 API 的愿望。
您可能想看看 Flask-Classy,这是一个 flask 扩展,它就是这样做的。您可以为每个资源创建一个 class (就像您在伪代码中描述的那样)并且在 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,如果你有特殊情况的话。