实现 API Blueprint
为了让你体验开发 API 所涉及的内容,我将在 Microblog 添加 API。 我不会实现所有的 API,只会实现与用户相关的所有功能,并将其他资源(如用户动态)的实现留给读者作为练习。
为了保持组织有序,并遵循我在 第十五章 中描述的结构, 我将创建一个包含所有 API 路由的新 blueprint。 所以,让我们从创建 blueprint 所在的目录开始:
(venv) $ mkdir app/api
在 blueprint 的 __init__.py
文件中创建 blueprint 对象,这与应用程序中的其他 blueprint 类似:
app/api/__init__.py
: API blueprint 构造器。
from flask import Blueprint
bp = Blueprint('api', __name__)
from app.api import users, errors, tokens
你可能会记得有时需要将导入移动到底部以避免循环依赖错误。 这就是为什么 app/api/users.py , app/api/errors.py 和 app/api/tokens.py 模块(我还没有写)在 blueprint 创建之后导入的原因。
API 的主要内容将存储在 app/api/users.py 模块中。 下表总结了我要实现的路由:
HTTP 方法 | 资源 URL | 注释 |
---|---|---|
GET | /api/users/ | 返回一个用户 |
GET | /api/users | 返回所有用户的集合 |
GET | /api/users//followers | 返回某个用户的粉丝集合 |
GET | /api/users//followed | 返回某个用户关注的用户集合 |
POST | /api/users | 注册一个新用户 |
PUT | /api/users/ | 修改某个用户 |
现在我要创建一个模块的框架,其中使用占位符来暂时填充所有的路由:
app/api/users.py :用户 API 资源占位符。
from app.api import bp
@bp.route('/users/<int:id>', methods=['GET'])
def get_user(id):
pass
@bp.route('/users', methods=['GET'])
def get_users():
pass
@bp.route('/users/<int:id>/followers', methods=['GET'])
def get_followers(id):
pass
@bp.route('/users/<int:id>/followed', methods=['GET'])
def get_followed(id):
pass
@bp.route('/users', methods=['POST'])
def create_user():
pass
@bp.route('/users/<int:id>', methods=['PUT'])
def update_user(id):
pass
app/api/errors.py 模块将定义一些处理错误响应的辅助函数。 但现在,我使用占位符,并将在之后填充内容:
app/api/errors.py :错误处理占位符。
def bad_request():
pass
app/api/tokens.py 是将要定义认证子系统的模块。 它将为非 Web 浏览器登录的客户端提供另一种方式。现在,我也使用占位符来处理该模块:
app/api/tokens.py : Token 处理占位符。
def get_token():
pass
def revoke_token():
pass
新的 API blueprint 需要在应用工厂函数中注册:
app/__init__.py
:应用中注册 API blueprint。
# ...
def create_app(config_class=Config):
app = Flask(__name__)
# ...
from app.api import bp as api_bp
app.register_blueprint(api_bp, url_prefix='/api')
# ...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论