使用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 时重新训练。
以下是序列化和加载模型的示例代码:
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
最新文章
- 为API网关构建ChatGPT自定义插件 – API7.ai
- 更快的API,更高效的开发者:API Gateway自定义授权器
- 如何使用 node.js 和 express 创建 rest api
- 2025年暑假大学生AI副业+联盟营销指南:自动化文章与链接实现月入过万
- 如何在Python中使用ChatGPT API?
- FastAPI 异步编程:提升 API 性能
- 什么是 LangChain
- Google News API 的热门话题与趋势分析
- GraphQL API渗透测试指南
- GitHub Copilot API接入指南
- 如何创建带有JSON响应的简单REST API
- 一文讲透MCP的原理及实践