使用Flask构建简单API | 作者:Samantha Jackson - Medium

作者:API传播员 · 2025-11-28 · 阅读时间:5分钟
本文分享了使用Flask框架构建简单API的实践过程,包括从基础功能开发到机器学习模型部署的完整步骤。通过动物收容所数据集预测模型,展示了如何利用Flask快速构建API以自动化预测结果,并涵盖模型序列化、请求类型配置等关键技术点,帮助开发者快速上手Flask API开发。

使用 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 模块对模型进行序列化。这包括对 LabelEncoderPolynomialFeatures 和模型本身的序列化。序列化的好处在于,可以快速加载模型,而无需每次启动 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