返回介绍

实现 API Blueprint

发布于 2025-01-02 21:54:01 字数 2741 浏览 0 评论 0 收藏 0

为了让你体验开发 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文