面向初学者的简易 Flask API 服务器 - 附示例代码
各位程序员朋友们好!
本文介绍了一个简单的 API 入门示例,可以帮助初学者更好地理解API 的概念。代码库可以从 GitHub 下载,并用于在线学习或生产环境。该 API 基于Flask框架,Flask 是一个领先的软件库,受到众多open-source爱好者的积极支持和版本控制。
Thanks for reading!盒子里装的是什么:
- 👉基于极简表格的简单 API
Datas - 👉
SQLite Persistence由优雅的 ORM(SqlAlchemy)管理 - 👉
Powerful API核心由 Flask-RestX 提供 - 👉
Strong Input validation - 🎁通过电子邮件和Discord(1000+ 社区)提供免费支持。
API定义
| 路线 | 动词 | 信息 | 地位 |
|---|---|---|---|
/datas |
得到 | 所有物品 | ✔️ |
| 邮政 | 创建新项目 | ✔️ | |
/datas:id |
得到 | 退回一件商品 | ✔️ |
| 放 | 更新项 | ✔️ | |
| 删除 | 删除项目 | ✔️ |
技术栈
Flask用于路由和整体管理Flask-RestXAPIFlask-SqlAlchemy- 用最少的代码管理数据库Docker该设置为像我这样的懒惰开发者提供了快速入门的方法。
✨ API 编码与实现规则
- 简洁界面
- 一致、直观的行动
- 为每个动作使用正确的动词
GET行动read-onlyDELETE移除物品POST更新信息
- 强输入验证
✨代码库结构
所有相关文件均列于下方。其他文件docker-compose.yml,例如 README 和 LICENSE,已省略。
api-server-flask/
├── api
│ ├── __init__.py
│ ├── config.py
│ ├── models.py
│ └── routes.py
├── README.md
├── requirements.txt
└── run.py
简单介绍一下每一项:
run.py入口点api folder__init__.py构建应用程序models.py- 定义一个单一的(简单的)模型routes.py——做那些辛苦的工作config.py- 实现最小设置
✨ API 模型
API 管理的信息保存在一个包含三个字段的简单表格中:id,,data。date_created以下是源代码:
# Contents of "api/models.py" (truncated)
...
class Datas(db.Model):
id = db.Column(db.Integer() , primary_key=True)
data = db.Column(db.String(256) , nullable=False)
date_created = db.Column(db.DateTime() , default=datetime.utcnow)
...
源代码提供了一些辅助功能,可以简化我们作为开发人员的工作:
update_data- 更新data字段save- 保存并提交当前对象的更新toJSON返回JSON表示形式
✨路由
每种方法都力求简单,但同时又能提供强大的验证和优雅的 SQL 访问。
例如,管理更新操作的路由item:
# Contents of "api/routes.py" (truncated)
....
@rest_api.route('/api/datas/<int:id>')
class ItemManager(Resource):
...
"""
Update Item
"""
@rest_api.expect(update_model, validate=True)
def put(self, id):
item = Datas.get_by_id(id)
# Read ALL input from body
req_data = request.get_json()
# Get the information
item_data = req_data.get("data")
if not item:
return {"success": False,
"msg": "Item not found."}, 400
item.update_data(item_data)
item.save()
return {"success" : True,
"msg" : "Item [" +str(id)+ "] successfully updated",
"data" : item.toJSON()}, 200
...
让我们遍历相关行:
@rest_api.route('/api/datas/<int:id>')定义路线
/api/datas/1例如,当用户访问时,Flask 会将请求路由到此部分。
@rest_api.expect(update_model, validate=True)
此装饰器会触发一个预先定义的验证,如下所示:
update_model = rest_api.model('UpdateModel', {"data": fields.String(required=True, min_length=1, max_length=255)})
如果data字段大小超过 255,则请求将被拒绝。对我们开发人员来说,这几乎不需要编写任何代码。
我们的处理程序接下来将执行以下步骤:
- 使用以下方法从数据库中选择项目
IDitem = Datas.get_by_id(id)通过 SQLAlchemy
- 如果未找到项目,则退出并显示详细的错误信息。
- 如果找到该物品
- 更新
data字段 - 将新对象保存到数据库中
- 更新
✨接下来该何去何从
这个简单的API很快将扩展更多功能:
Datas向模型添加更多字段- 实现身份验证
- 限制
update操作仅限已认证用户。
有什么想法吗?请在评论区留言。
谢谢你!
✨ 如需更多资源,请访问:
- 👉 Flask - 官方网站
- 👉 Flask-RestX - 库文档
- 👉 更多烧瓶启动器可供尝试