路由

在上一遍文章中,我使用了 Flask 的视图函数来定义所有的路由。

Flask-RESTful 提供了一个 Resource 基础类,它能够定义一个给定 URL 的一个或者多个 HTTP 方法。例如,定义一个可以使用 HTTP 的 GET, PUT 以及 DELETE 方法的 User 资源,你的代码可以如下:

1. from flask import Flask
2. from flask.ext.restful import Api, Resource

4. app = Flask(__name__)
5. api = Api(app)

7. class UserAPI(Resource):
8. def get(self, id):
9. pass

11. def put(self, id):
12. pass

14. def delete(self, id):
15. pass

17. api.add_resource(UserAPI, '/users/<int:id>', endpoint = 'user')

add_resource 函数使用指定的 endpoint 注册路由到框架上。如果没有指定 endpoint,Flask-RESTful 会根据类名生成一个,但是有时候有些函数比如 url_for 需要 endpoint,因此我会明确给 endpoint 赋值。

我的待办事项 API 定义两个 URLs:/todo/api/v1.0/tasks(获取所有任务列表),以及 /todo/api/v1.0/tasks/<int:id>(获取单个任务)。我们现在需要两个资源:

1. class TaskListAPI(Resource):
2. def get(self):
3. pass

5. def post(self):
6. pass

8. class TaskAPI(Resource):
9. def get(self, id):
10. pass

12. def put(self, id):
13. pass

15. def delete(self, id):
16. pass

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