FastAPI系列:FastAPI快速入门项目

部署运行你感兴趣的模型镜像

这个分步指南向你展示如何使用FastAPI编写第一个Restful API: Hello World项目。事不宜迟,我们开始吧。

FastAPI 是什么?

FastAPI 是一个现代、高性能的 Python Web 框架,专为构建 API(应用程序接口)而设计。它结合了以下特点:

速度快:性能接近 Node.js 和 Go(基于 Starlette 和 Pydantic)

  • 开发效率高:极简的代码即可实现复杂功能
  • 类型提示支持:基于 Python 类型注解(Type Hints)自动验证请求数据
  • 自动文档生成:内置 Swagger UI 和生成接口文档
  • 异步支持:原生兼容 async/await 语法

核心特性

特性说明
类型驱动开发使用 Python 类型注解定义请求/响应模型,自动验证数据格式
依赖注入系统灵活管理代码依赖(如数据库连接、认证)
OAuth2/JWT 支持内置安全工具,快速实现身份验证和授权
WebSocket 支持轻松处理实时双向通信
OpenAPI 标准自动生成符合 OpenAPI 规范的文档(Swagger UI)

搭建环境

创建一个新目录来承载示例项目:

mkdir fastapi01

导航到新创建的文件夹,然后通过执行以下命令初始化Python虚拟环境, 然后激活虚拟环境:

Python3 -m venv

source env/bin/activate

安装包

除了FastAPI,我们还需要使用另一个名为uvicorn的包。Uvicorn是一个Python的web服务器实现,它可以帮助我们启动我们的后端,这样它就可以从web浏览器或任何HTTP客户端(Postman, Thunder client等)访问。此外,当我们更改代码时,uvicorn还可以自动重新加载服务器,使我们的工作过程更快,更高效。

在上一步激活的环境中,执行如下命令:

pip install fastapi uvicorn

在这里插入图片描述

编写代码

在项目文件夹中,创建一个名为main.py的新文件。项目文件结构现在看起来像这样:

.
├── env
├── __pycache__
└── main.py

main.py代码如下:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")  
async def hello_world():  
    return {"success": True, "message": "Hello World"}

代码解释:

首先,我们导入FastAPI:

from fastapi import FastAPI

然后我们实例化一个FastAPI对象:

app = FastAPI()

下一行用来定义路由:

@app.get(“/”)

最后但并非最不重要的是当访问路由时将调用的函数:

async def hello_world():  
    return {"success": True, "message": "Hello World"}

运行测试

运行以下命令启动API:

uvicorn main:app --reload

命令解释如下:

  • main:我们的入口文件main.py的名字,不带扩展名.py
  • app: main.py中的app对象
  • –reload:此标志将帮助我们的服务器在代码更改时自动刷新

现在,您将在终端窗口中看到以下输出:

图

在浏览器中,访问http://localhost:8000或http://127.0.0.1:8000。你会看到这个:

图

响应体是JSON格式。

如果你访问了一个不存在的路由,响应将是:

{"detail":"Not Found"}

FastAPI的一个令人敬畏的特性是自动生成的交互式文档。在web浏览器中访问http://localhost:8000/docs,您将看到有关路由的所有信息:

截图:

要停止web服务器,只需按Ctrl + C。如果你愿意,你可以添加其他路由:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def hello_world():
    return {"success": True, "message": "Hello World"}


@app.get('/users')
async def get_users():
    return {"success": True, "users": ["John", "Jane", "Sling Academy"]}

祝贺!你已经使用FastAPI成功创建了第一个后端API。代码的数量少得惊人。

动态路由

路由是指API的端点(uri)如何响应传入请求。在FastAPI中,路由路径与请求方法结合,定义了可以发出请求的端点。可以定义一个动态路由路径,该路径可以包含一个或多个路径参数(变量)。每个参数将被包装在一对花括号{}中。

让我们看看下面最简单的例子:

from fastapi import FastAPI

app = FastAPI()

@app.get('/users/{user_id}/{user_name}')
async def get_users(user_id: int, user_name: str):
    return {"user_data": {
        "id": user_id,
        "message": "Hello, " + user_name,
    }}

路径参数user_id和user_name的值将作为参数user_id和user_name传递给处理程序函数。

如果你运行上面的代码,用浏览器访问http://localhost:8000/users/123/ABCDEF,你会看到:

{"user_data":{"id":123,"message":"Hello, ABCDEF"}}

如果仔细查看代码,你会注意到参数的类型是在函数中声明的,其中user_id是int, user_name是str,这有助于验证传递给URL的值。如果你在地址栏中输入这个URL http://localhost:8000/users/foo/bar,你会得到一个错误:

{"detail":
  [{
      "loc":["path","user_id"],
       "msg":"value is not a valid integer",
       "type":"type_error.integer"
  }]
}

有关API的详细信息也在http://localhost:8000/docs上自动生成:

在这里插入图片描述

这将使使用你的API(面向web前端或移动应用)的开发人员更容易获得必要的见解。

查询参数

查询字符串是URL中问号?后面的部分。它意味着通过URL向服务器发送少量信息。此信息通常用作对数据库中的记录进行分页、筛选和排序的参数。查询参数(或查询参数)是查询字符串中以&字符分隔的键值对。例如,如果我们有一个这样的URL:

http://localhost:8000/items?page=1&limit=10&orderBy=id&order=DESC

然后有4个键值对查询参数:

  • page: 值为 1
  • limit: 值为 10
  • orderBy: 值为 id
  • order: 值为 DESC (abbreviation of descending)

在FastAPI中,提取和验证查询参数是简单而直接的。我们要做的是将它们声明为请求处理程序函数的参数。不属于路径参数的参数将被自动解释为queryparameters。

我们将编写代码来获取上面URL中的查询参数:

from fastapi import FastAPI

app = FastAPI()


@app.get('/items')
async def get_items(page: int, limit: int, orderBy: str, order: str):
    return {"information": {
        "page": page,
        "limit": limit,
        "orderBy": orderBy,
        "order": order
}}

启动FastAPI应用程序,然后打开web浏览器并访问以下URL:

http://localhost:8000/items?page=1&limit=10&orderBy=id&order=DESC

你会得到这个:

图

还可以为查询参数设置默认值,如下所示:

from fastapi import FastAPI

app = FastAPI()


@app.get('/items')
async def get_items(page: int = 0, limit: int = 10, orderBy: str = 'id', order: str = 'asc'):
    return {"information": {
        "page": page,
        "limit": limit,
        "orderBy": orderBy,
        "order": order
}}

然后,如果URL中没有显式列出任何参数,则将使用默认值。此外,FastAPI还自动验证参数的类型。另一件值得注意的事情是,用户在没有在path操作函数中声明的情况下任意添加的参数也会被忽略。这增加了应用程序的安全性。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

使用 Python 创建 FastAPI 项目可按以下步骤进行: ### 安装依赖 需安装 FastAPI 和 Uvicorn,Uvicorn 是用于运行 FastAPI 应用的 ASGI 服务器 [^2]。可使用以下命令进行安装: ```bash pip install fastapi uvicorn ``` ### 创建项目文件 创建一个名为 `main.py` 的文件,在其中编写 FastAPI 应用代码,示例如下: ```python from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} @app.get("/hello/{name}") async def say_hello(name: str): return {"message": f"Hello {name}"} ``` 上述代码中,定义了一个 FastAPI 应用实例 `app`,并创建了两个路由:根路径 `/` 返回一个包含问候信息的 JSON 响应;`/hello/{name}` 接受一个路径参数 `name`,并返回包含个性化问候信息的 JSON 响应 [^4]。 ### 启动项目 在终端中运行以下命令启动项目: ```bash uvicorn main:app --reload ``` 其中,`main` 是 Python 文件名(不包含 `.py` 扩展名),`app` 是在 `main.py` 文件中创建的 FastAPI 应用实例名称,`--reload` 选项用于在代码修改时自动重启服务器,方便开发调试 [^4]。 ### 项目优化与工具链配合 结合 FastAPI 官方推荐实践和企业级开发经验,可配合以下工具链来提升项目质量和开发效率: - 代码格式化:使用 `black + isort` 进行代码格式化。 - 静态检查:使用 `mypy + pylint` 进行静态代码检查。 - 测试覆盖:使用 `pytest + coverage` 进行测试和测试覆盖率统计。 - 文档生成:使用 `swagger UI + redoc` 自动生成 API 文档。 - CI/CD:使用 `GitHub Actions` 或 `GitLab CI` 实现持续集成和持续部署 [^5]。 ### 创建远程仓库 创建远程仓库用于保存代码,方便日后接着开发 [^1]。 ### 部署项目FastAPI 项目部署到服务器,以便通过浏览器访问 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值