FastAPI 使用教程:将函数改造成可调用的 API(附完整示例)

引言

FastAPI 是一个现代化、快速(高性能)、基于标准 Python 类型提示构建的 Web 框架,非常适合开发 RESTful API。如果你有现成的 Python 函数,并希望通过 HTTP 请求调用它,FastAPI 可以帮助你快速实现。

在本文中,我们将介绍如何使用 FastAPI 将已有函数改造成 API,并通过 GET 和 POST 请求调用它。同时,我们还会展示如何在服务运行时,自定义主机地址、端口号以及启用 SSL 证书等高级配置。

1. 安装必要依赖

首先,请确保你安装了 FastAPI 和 Uvicorn:

pip install fastapi uvicorn

2. 定义已有的函数

假设我们有一个简单的函数,用于计算两数之和:

def add_numbers(a: int, b: int) -> int:
    return a + b

接下来,我们将通过 FastAPI 将这个函数改造成一个可以通过 HTTP 请求调用的 API。

3. 编写 FastAPI 应用

为了更灵活地管理服务和路由,我们将把 FastAPI 的逻辑分成几个部分:创建应用、挂载路由和运行服务。

3.1 创建 FastAPI 应用

以下是创建应用的代码示例:

from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware

APP_VERSION = "v1.0.0"
ENABLE_CORS = True

def create_app() -> FastAPI:
    """
    创建 FastAPI 应用实例
    """
    app = FastAPI(
        title="Example API Server",
        version=APP_VERSION,
        description="这是一个示例服务,包含简单的数学操作 API",
    )

    # 启用跨域支持(CORS),允许所有来源
    if ENABLE_CORS:
        app.add_middleware(
            CORSMiddleware,
            allow_origins=["*"],
            allow_credentials=True,
            allow_methods=["*"],
            allow_headers=["*"],
        )

    return app

3.2 挂载路由

我们通过单独的函数将路由挂载到应用上:

def mount_routes(app: FastAPI):
    """
    挂载路由
    """
    @app.get("/add", tags=["Math"], summary="两数相加")
    def add(a: int, b: int):
        """
        GET 请求:通过查询参数计算两数之和
        """
        return {"result": add_numbers(a, b)}

    @app.post("/add", tags=["Math"], summary="两数相加(POST 请求)")
    def add_post(data: dict):
        """
        POST 请求:通过请求体计算两数之和
        """
        a = data.get("a")
        b = data.get("b")
        return {"result": add_numbers(a, b)}

3.3 运行服务

运行服务时,可以配置主机地址、端口号以及支持 SSL 的选项。以下是运行服务的代码:

import uvicorn

def run_server(app: FastAPI, host: str = "127.0.0.1", port: int = 8000, **kwargs):
    """
    启动 FastAPI 服务
    """
    if kwargs.get("ssl_keyfile") and kwargs.get("ssl_certfile"):
        uvicorn.run(
            app,
            host=host,
            port=port,
            ssl_keyfile=kwargs.get("ssl_keyfile"),
            ssl_certfile=kwargs.get("ssl_certfile"),
        )
    else:
        uvicorn.run(app, host=host, port=port)

3.4 主入口

以下是服务的主入口代码,支持通过命令行参数运行服务:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="示例服务")
    parser.add_argument("--host", type=str, default="0.0.0.0", help="主机地址")
    parser.add_argument("--port", type=int, default=8000, help="端口号")
    parser.add_argument("--ssl_keyfile", type=str, default=None, help="SSL 私钥文件路径")
    parser.add_argument("--ssl_certfile", type=str, default=None, help="SSL 证书文件路径")
    args = parser.parse_args()

    # 创建应用
    app = create_app()

    # 挂载路由
    mount_routes(app)

    # 启动服务
    run_server(app, host=args.host, port=args.port, ssl_keyfile=args.ssl_keyfile, ssl_certfile=args.ssl_certfile)

4. 启动服务

你可以通过以下命令运行服务,并指定自定义参数:

默认启动

运行以下命令(默认地址为 http://127.0.0.1:8000):

python main.py

自定义主机和端口

运行以下命令,指定主机和端口:

python main.py --host 0.0.0.0 --port 8080

启用 SSL 支持

如果你有 SSL 私钥和证书文件,可以通过以下命令启用 HTTPS 服务:

python main.py --host 0.0.0.0 --port 8443 --ssl_keyfile "path/to/key.pem" --ssl_certfile "path/to/cert.pem"

5. 测试 API

服务启动后,你可以使用以下工具测试 API。

测试 GET 请求

  1. 使用浏览器或 cURL 测试:
curl "http://127.0.0.1:8000/add?a=10&b=20"
  1. Python 客户端调用 API 的代码示例:
import requests

# GET 请求
url = "http://127.0.0.1:8000/add"
params = {"a": 10, "b": 20}
response = requests.get(url, params=params)
print("GET 请求响应:", response.json())

响应示例:

{
  "result": 30
}

测试 POST 请求

  1. 使用 cURL 或 Postman 发送 POST 请求:
curl -X POST "http://127.0.0.1:8000/add" -H "Content-Type: application/json" -d '{"a": 15, "b": 25}'
  1. Python 客户端调用 API 的代码示例:
import requests

# POST 请求
url = "http://127.0.0.1:8000/add"
data = {"a": 15, "b": 25}
response = requests.post(url, json=data)
print("POST 请求响应:", response.json())

响应示例:

{
  "result": 40
}

6. 自动生成文档

FastAPI 会自动生成交互式文档,你可以访问以下地址:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc 文档: http://127.0.0.1:8000/redoc

在 Swagger UI 中,你可以直接测试 API。

7. 总结

通过本教程,我们实现了以下内容:

  1. 使用 FastAPI 将已有函数改造成 API。
  2. 支持 GET 和 POST 请求,并验证参数。
  3. 实现了跨域支持(CORS)。
  4. 支持通过命令行指定自定义主机、端口和启用 SSL。
  5. 提供自动生成的交互式文档。

FastAPI 的高性能、易用性和强大的功能,使其成为开发 Web API 的绝佳选择。如果你觉得本教程对你有帮助,记得点赞、收藏并分享!🎉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值