使用Flask构建简单API | 作者:Samantha Jackson - Medium
使用 Flask 构建简单 API 的实践分享
最近,我一直在研究如何利用数据创建预测模型。比如,我使用动物收容所的数据集,开发了一个模型,可以根据动物的摄入细节(如品种、颜色、大小、位置等)预测它们的收容结果。尽管创建和调整这些模型非常有趣,但我希望未来能让其他人通过自动化的方式使用这些模型,而无需打开我的 Jupyter Notebook 并运行所有单元格来获取预测结果。
为了解决这个问题,我决定构建一个 API,它能够接收输入(特征),并基于我训练的模型返回预测结果。这里,我选择了 Flask 作为开发工具。
为什么选择 Flask?
Flask 是一个轻量级的 Python Web 框架,特别适合快速构建生产就绪的应用程序。它的入门门槛很低,新手也能轻松上手。在访问 Flask 官方文档的几秒钟内,你就可以启动并运行一个基本的应用程序。只需复制提供的 Python 代码,保存为 hello.py 文件,然后通过终端安装 Flask 并运行应用程序即可。
以下是一个简单的例子:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, World!"
if __name__ == '__main__':
app.run()
通过几行代码,Flask 就能帮助你启动一个简单的内置 API 服务器,非常方便。
从简单的功能开始
在熟悉了 Flask 的基本用法后,我尝试在 hello.py 文件中添加一个简单的功能:根据 URL 参数返回自定义问候语。例如,当用户在 URL 中传递一个 name 参数时,API 会返回“Hello, {name}!”。
以下是实现代码的关键部分:
from flask import Flask, request
app = Flask(__name__)
@app.route('/greet')
def greet():
name = request.args.get('name', 'World')
return f"Hello, {name}!"
if __name__ == '__main__':
app.run()
通过在 URL 中添加参数(如 /greet?name=Samantha),API 将返回个性化的问候语。这种方式虽然简单,但在 URL 中添加大量参数显得不够优雅,因此我开始探索更好的解决方案。
初学者的注意事项
在开发过程中,我发现每次修改 .py 文件后,都需要手动关闭正在运行的 Flask 实例(通过终端使用 Ctrl+C),然后重新运行 $ flask run,这显得有些繁琐。不过,通过添加 --reload 参数(即运行 $ flask run --reload),Flask 可以在保存文件时自动重新加载代码,极大地提升了开发效率。
配置 API 的请求类型
为了让 API 更加灵活,我配置了不同的请求类型。例如,使用 GET 请求从服务器检索资源,或使用 POST 请求向服务器发送数据。以下是一个示例代码:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/submit', methods=['GET', 'POST'])
def submit():
if request.method == 'POST':
data = request.form['data']
return f"Received: {data}"
return render_template('form.html')
if __name__ == '__main__':
app.run()
通过这种方式,客户端可以通过浏览器访问 API,并与之交互。
模型的序列化与加载
为了让模型能够在 API 中高效运行,我使用了 Python 的 pickle 模块对模型进行序列化。这包括对 LabelEncoder、PolynomialFeatures 和模型本身的序列化。序列化的好处在于,可以快速加载模型,而无需每次启动 API 时重新训练。
以下是序列化和加载模型的示例代码:
import pickle
# 序列化模型
with open('model.pkl', 'wb') as f:
pickle.dump(model, f)
# 加载模型
with open('model.pkl', 'rb') as f:
loaded_model = pickle.load(f)
# 使用加载的模型进行预测
prediction = loaded_model.predict(transformed_features)
通过这种方式,API 可以快速调用模型并返回预测结果。
构建预测 API
最终,我将这些功能整合到一个完整的 API 中,使其能够根据动物的特征生成预测结果。以下是核心代码:
from flask import Flask, request, jsonify
import pickle
app = Flask(__name__)
# 加载模型
with open('model.pkl', 'rb') as f:
model = pickle.load(f)
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json()
features = data['features']
prediction = model.predict([features])
return jsonify({'prediction': prediction.tolist()})
if __name__ == '__main__':
app.run()
通过上述代码,客户端可以通过发送 POST 请求,向 API 提供特征数据,并获取预测结果。
总结
Flask 是一个功能强大且易于使用的框架,特别适合快速构建 API。通过本文的实践分享,我们可以看到如何利用 Flask 将机器学习模型部署为一个可用的 Web 服务。虽然本文仅仅触及了 Flask 的基础功能,但它已经能够满足大多数简单应用的需求。如果你对 Flask 感兴趣,可以深入研究其文档,探索更多高级功能。
原文链接: https://medium.com/better-programming/setting-up-a-simple-api-b3b00bc026b4
最新文章
- 用 Poe-API-wrapper 连接 DALLE、ChatGPT,批量完成AI绘图或文字创作
- 2025年20大自动化API测试工具 – HeadSpin
- RESTful Web API 设计中要避免的 6 个常见错误
- LangGraph 工具详解:构建 AI 多步骤流程的关键利器
- GitHubAPI调用频率限制的增加方法
- 如何使用Route Optimization API优化配送路线
- 什么是聚类分析?
- 安全好用的OpenApi
- 医疗数据管理与fhir api的未来发展趋势
- 为什么要使用Google My Business Reviews API
- 2025年7月第2周GitHub热门API推荐:rustfs/rustfs、pocketbase/pocketbase、smallcloudai/refact
- API设计的首要原则