如何使用Python创建API - Ander Fernández Jauregui

作者:API传播员 · 2025-11-15 · 阅读时间:7分钟

作为数据科学家或数据工程师,我们经常需要分享自己的工作成果,以便公司中的其他人能够使用我们创建的流程或模型。显然,直接共享脚本并不是一个理想的选择,因为这要求其他人拥有与我们完全相同的环境和依赖项。在这种情况下,Python创建API。


API基础知识

API(应用程序编程接口)是一种允许两个计算机系统相互通信的工具。例如,如果我们开发了一个自动生成报告并通过电子邮件发送的系统,邮件的发送将由脚本完成,而不是手动操作。为此,Python需要通过Gmail API向Gmail发送请求,并附加报告文件。

了解了API的基本概念后,我们来看一下API的主要组成部分:

HTTP传输协议

HTTP是网络上信息交换的主要方式,常见的HTTP方法包括:

  • GET:用于从数据库或进程中获取信息。
  • POST:用于发送信息,例如向数据库添加数据或传递机器学习模型的输入。
  • PUT:用于更新信息,通常用于修改数据库中的记录。
  • DELETE:用于从数据库中删除信息。

URL

URL是访问API的地址,通常由以下三部分组成:

  • 协议:例如http://https://
  • 域名:API托管的主机地址,例如example.com
  • 端点:API的具体路径,例如/api/v1/resource。每个端点对应API的一个功能。

了解了API的基础知识后,我们将学习如何在Python中创建API。


如何在Python中创建API

FastAPI和Flask。接下来,我们将分别介绍如何使用这两种框架创建API。


如何使用FastAPI在Python中创建API

使用FastAPI的要求

FastAPI是一个现代化的Python框架,专为构建高性能API而设计。它于2018年底推出,仅支持Python 3.6及以上版本。

要使用FastAPI,需要安装以下两个库:

pip install fastapi uvicorn

创建第一个FastAPI API

安装完必要的库后,我们可以创建一个Python文件来定义API。以下是一个简单的示例:

from fastapi import FastAPI

app = FastAPI()@app.get("/my-first-api")
def hello():
    return {"message": "Hello, World!"}

在上面的代码中,我们定义了一个GET方法的端点/my-first-api,当访问该端点时,API将返回{"message": "Hello, World!"}

添加参数支持

FastAPI允许我们为API添加参数,并指定参数的数据类型。例如:

from fastapi import FastAPI

app = FastAPI()@app.get("/my-first-api")
def hello(name: str):
    return {"message": f"Hello, {name}!"}

在这个例子中,API需要一个名为name的字符串参数。如果我们访问http://127.0.0.1:8000/my-first-api?name=Ander,API将返回{"message": "Hello, Ander!"}

返回不同的数据类型

FastAPI支持返回多种数据类型,例如DataFrame或图像。以下是一个返回DataFrame的示例:

from fastapi import FastAPI
import pandas as pd

app = FastAPI()@app.get("/get-iris")
def get_iris():
    url = "https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/iris.csv"
    iris = pd.read_csv(url)
    return iris.to_dict()

如果需要返回图像,可以使用StreamingResponse

from fastapi import FastAPI
from fastapi.responses import StreamingResponse
import matplotlib.pyplot as plt
import pandas as pd
import io

app = FastAPI()@app.get("/plot-iris")
def plot_iris():
    url = "https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/iris.csv"
    iris = pd.read_csv(url)
    plt.scatter(iris['sepal_length'], iris['sepal_width'])
    plt.savefig("iris.png")
    file = open("iris.png", mode="rb")
    return StreamingResponse(file, media_type="image/png")

运行和测试FastAPI

将以上代码保存为main.py,然后运行以下命令启动API:

uvicorn main:app --reload

API将运行在http://127.0.0.1:8000,您可以通过浏览器或代码测试API。例如:

import requests

response = requests.get("http://127.0.0.1:8000/my-first-api?name=Ander")
print(response.json())

FastAPI还内置了Swagger文档,您可以通过http://127.0.0.1:8000/docs访问。


如何使用Flask在Python中创建API

使用Flask的要求

Flask是一个轻量级的Python框架,适合构建简单的Web应用程序和API。要使用Flask,需要安装以下库:

pip install flask flask-restful

创建第一个Flask API

以下是一个简单的Flask API示例:

from flask import Flask, jsonify

app = Flask(__name__)@app.route("/my-first-api", methods=["GET"])
def hello():
    return jsonify({"message": "Hello, World!"})if __name__ == "__main__":
    app.run(debug=True, port=8000)

运行上述代码后,API将运行在http://127.0.0.1:8000

添加参数支持

在Flask中,可以通过request.args.get获取请求参数。例如:

from flask import Flask, request, jsonify

app = Flask(__name__)@app.route("/my-first-api", methods=["GET"])
def hello():
    name = request.args.get("name")
    if name:
        return jsonify({"message": f"Hello, {name}!"})
    return jsonify({"message": "Hello, World!"})

返回不同的数据类型

Flask也支持返回JSON数据或图像。例如,返回DataFrame:

from flask import Flask, jsonify
import pandas as pd

app = Flask(__name__)@app.route("/get-iris", methods=["GET"])
def get_iris():
    url = "https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/iris.csv"
    iris = pd.read_csv(url)
    return jsonify(iris.to_dict())

返回图像的示例:

from flask import Flask, send_file
import matplotlib.pyplot as plt
import pandas as pd

app = Flask(__name__)@app.route("/plot-iris", methods=["GET"])
def plot_iris():
    url = "https://gist.githubusercontent.com/curran/a08a1080b88344b0c8a7/raw/iris.csv"
    iris = pd.read_csv(url)
    plt.scatter(iris['sepal_length'], iris['sepal_width'])
    plt.savefig("iris.png")
    return send_file("iris.png", mimetype="image/png")

结论

FastAPI和Flask都是非常优秀的Python框架,各有优劣:

  • FastAPI:适合快速数据验证和文档生成功能。
  • Flask:适合构建完整的Web应用程序,灵活性更高。

如果您的目标是快速创建API,推荐使用FastAPI;如果需要构建一个包含前后端的完整应用程序,Flask可能是更好的选择。

无论选择哪种框架,掌握API开发都是数据科学家和工程师的重要技能。

原文链接: https://anderfernandez.com/en/blog/how-to-create-api-python/