FastAPI入门:如何在GitHub上找到并使用它
引言
在当今快速发展的Web开发领域,选择一个高效、易用且性能卓越的框架至关重要。Python生态系统中有许多优秀的Web框架,而FastAPI凭借其出色的性能、现代化的设计理念以及对类型提示的深度支持,迅速成为开发者的宠儿。FastAPI是一个用于构建API的现代、快速(高性能)Web框架,基于标准的Python类型提示,灵感来源于Starlette和Pydantic。它不仅速度快,而且具有自动交互式API文档、数据验证和序列化等开箱即用的特性,极大地提高了开发效率。
本文将引导您如何在GitHub上找到FastAPI的官方仓库,并详细介绍如何从零开始,在您的本地环境中安装、配置并使用FastAPI构建一个简单的API应用。
第一部分:在GitHub上寻找FastAPI
GitHub是全球最大的代码托管平台,也是开源项目的孵化器。找到FastAPI的官方仓库是了解项目、获取最新代码和参与社区的第一步。
-
打开GitHub网站:
在您的浏览器中访问https://github.com/。 -
使用搜索功能:
在GitHub页面顶部的搜索栏中输入“FastAPI”并按回车键。 -
识别官方仓库:
搜索结果中可能会出现许多与FastAPI相关的项目。您需要寻找由项目维护者(通常是原作者或核心团队)发布、拥有最多星标(Stars)、分支(Forks)和活跃贡献的仓库。FastAPI的官方仓库通常由其作者tiangolo维护。- 官方仓库链接:
https://github.com/tiangolo/fastapi
点击进入这个仓库后,您会看到:
* README文件:这是项目的“门面”,包含了项目的简介、安装指南、快速上手教程和关键特性。
* Star数量:星标数量是项目受欢迎程度的重要指标。
* Issues (问题):开发者在此报告Bug、提出功能请求或讨论问题。
* Pull requests (拉取请求):社区成员提交代码贡献的地方。
* Documentation (文档链接):通常在README或仓库描述中会有指向官方文档的链接,这是学习FastAPI最全面的资源。 - 官方仓库链接:
通过GitHub仓库,您可以获取最新版本的代码,了解项目的开发动态,甚至参与到项目的贡献中去。
第二部分:FastAPI的本地环境搭建与快速上手
在找到FastAPI的“家”之后,接下来我们将在本地环境中让它跑起来。
1. 前提条件
在开始之前,请确保您的系统已安装:
* Python 3.8+:FastAPI需要Python 3.8或更高版本。
* pip:Python的包管理器,通常随Python一起安装。
2. 安装FastAPI和Uvicorn
FastAPI本身是一个框架,但它需要一个ASGI服务器来运行。Uvicorn是一个轻量级的ASGI服务器,是FastAPI推荐的运行方式。
首先,创建一个新的项目目录并进入:
bash
mkdir my-fastapi-app
cd my-fastapi-app
然后,建议创建一个虚拟环境来隔离项目依赖:
“`bash
python -m venv venv
激活虚拟环境
Windows:
.\venv\Scripts\activate
macOS/Linux:
source venv/bin/activate
“`
激活虚拟环境后,安装FastAPI和Uvicorn:
bash
pip install "fastapi[all]" uvicorn
"fastapi[all]" 会安装FastAPI及其所有可选依赖,包括Pydantic、Starlette、Requests、Jinja2等,方便您快速开始。
3. 编写第一个FastAPI应用
创建一个名为 main.py 的文件,并添加以下代码:
“`python
from fastapi import FastAPI
app = FastAPI()
@app.get(“/”)
async def read_root():
return {“message”: “Hello, FastAPI!”}
@app.get(“/items/{item_id}”)
async def read_item(item_id: int, q: str = None):
return {“item_id”: item_id, “q”: q}
“`
这段代码做了以下几件事:
* from fastapi import FastAPI: 导入 FastAPI 类。
* app = FastAPI(): 创建FastAPI应用实例。
* @app.get("/"): 这是一个装饰器,将 read_root 函数注册为处理HTTP GET请求的根路径(/)。
* async def read_root():: 定义一个异步函数来处理请求,并返回一个JSON响应。
* @app.get("/items/{item_id}"): 定义另一个路径,使用路径参数 item_id。
* async def read_item(item_id: int, q: str = None):: 函数参数 item_id: int 声明了 item_id 是一个整数类型,FastAPI会自动进行类型检查。q: str = None 定义了一个可选的查询参数。
4. 运行FastAPI应用
在您的终端中(确保虚拟环境已激活),运行Uvicorn服务器:
bash
uvicorn main:app --reload
main: 指的是main.py文件。app: 指的是main.py文件中创建的FastAPI()实例的变量名。--reload: 这个参数让Uvicorn在检测到代码修改时自动重新加载应用,非常适合开发阶段。
运行成功后,您会看到类似如下的输出:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [xxxxx]
INFO: Started server process [xxxxx]
INFO: Waiting for application startup.
INFO: Application startup complete.
现在,您的FastAPI应用已经在 http://127.0.0.1:8000 上运行了!
5. 访问API文档
FastAPI最令人赞叹的特性之一是它能自动生成交互式API文档。
- Swagger UI:在浏览器中访问
http://127.0.0.1:8000/docs。您会看到一个精美的界面,其中列出了所有定义的API端点,并且可以直接在浏览器中测试它们。 - ReDoc:在浏览器中访问
http://127.0.0.1:8000/redoc。这是另一种风格的API文档,通常用于展示。
这些自动生成的文档不仅节省了手动编写文档的时间,还能确保文档与代码保持同步,极大地提高了开发效率和前后端协作的便利性。
第三部分:深入FastAPI核心特性(代码示例)
FastAPI的强大之处远不止“Hello World”。它通过Python类型提示,提供了强大的数据验证、序列化和依赖注入功能。
1. 路径参数 (Path Parameters)
我们在上面的例子中已经看到了路径参数。FastAPI会根据类型提示自动验证 item_id。
“`python
main.py (在现有代码基础上添加或修改)
from fastapi import FastAPI
app = FastAPI()
… (read_root 和 read_item 函数)
@app.get(“/users/{user_id}/items/{item_id}”)
async def read_user_item(user_id: int, item_id: str):
return {“user_id”: user_id, “item_id”: item_id}
``http://127.0.0.1:8000/users/5/items/foo
访问将返回{“user_id”: 5, “item_id”: “foo”}。如果user_id` 不是整数,FastAPI会自动返回422 Unprocessable Entity错误。
2. 查询参数 (Query Parameters)
查询参数是URL中 ? 后面键值对。
“`python
main.py
from fastapi import FastAPI, Query
app = FastAPI()
…
@app.get(“/search/”)
async def search_items(q: str = Query(None, min_length=3, max_length=50)):
results = {“search_query”: q}
if q:
results[“items”] = [“itemA”, “itemB”, “itemC”] # 模拟搜索结果
return results
``Query
这里我们使用了来添加额外的验证,例如min_length和max_length。http://127.0.0.1:8000/search/?q=fastapi
访问。q` 的长度不符合要求,FastAPI也会自动报错。
如果
3. 请求体 (Request Body) 和 Pydantic 模型
对于 POST、PUT 等请求,数据通常包含在请求体中。FastAPI与Pydantic紧密集成,可以轻松定义数据模型并自动进行验证。
首先,导入 BaseModel:
“`python
main.py
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
app = FastAPI()
…
@app.post(“/items/”)
async def create_item(item: Item):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({“price_with_tax”: price_with_tax})
return item_dict
``Item
这里,我们定义了一个Pydantic模型。FastAPI会:Item
* 将请求体自动解析为类的实例。name
* 对传入的数据进行验证,确保是字符串、price是浮点数等。description
* 为和tax提供默认值None`,使其成为可选字段。
在Swagger UI (/docs) 中,您可以直接测试这个 POST /items/ 端点,输入JSON数据,感受FastAPI自动验证的强大。
4. 依赖注入系统 (Dependency Injection)
FastAPI的依赖注入系统非常强大,可以用来处理认证、数据库连接、共享逻辑等。
“`python
main.py
from fastapi import FastAPI, Depends, HTTPException, status
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {“q”: q, “skip”: skip, “limit”: limit}
@app.get(“/dep_items/”)
async def read_dep_items(commons: dict = Depends(common_parameters)):
return commons
模拟一个用户验证函数
async def get_current_user(token: str):
if token != “fake-super-secret-token”:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=”Invalid authentication credentials”,
headers={“WWW-Authenticate”: “Bearer”},
)
return {“username”: “currentuser”}
@app.get(“/users/me/”)
async def read_users_me(current_user: dict = Depends(get_current_user)):
return current_user
``Depends(common_parameters)会在read_dep_items被调用前先执行common_parameters函数,并将结果注入到commons参数中。Depends(get_current_user)演示了如何实现简单的认证,如果token不正确,则会抛出HTTPException`。
第四部分:与GitHub的进一步整合(高级用法与贡献)
当您对FastAPI有了初步了解并希望深入时,GitHub仓库再次成为您的宝贵资源。
-
克隆仓库并探索示例:
您可以将FastAPI的官方仓库克隆到本地,深入研究其源代码和examples/目录。
bash
git clone https://github.com/tiangolo/fastapi.git
cd fastapi/examples
这里包含了许多高级用法的示例,是学习FastAPI最佳实践的绝佳途径。 -
关注开发动态:
通过关注GitHub仓库,您可以及时收到项目更新通知。查看“Issues”和“Pull requests”可以了解项目正在解决的问题和即将推出的功能。 -
社区贡献:
如果您在使用FastAPI过程中发现了Bug,或者有改进建议,甚至希望贡献代码,GitHub是您参与社区的核心平台。- 提Issue:清晰地描述您遇到的问题或建议的功能。
- 提交Pull Request:如果您修复了Bug或增加了新功能,可以提交代码更改。在提交之前,请务必阅读项目的贡献指南(通常在
CONTRIBUTING.md文件中)。
结论
FastAPI是一个令人兴奋且功能强大的Python Web框架,它将现代Web开发的最佳实践与Python的优雅和类型提示的优势结合在一起。通过GitHub,您可以轻松找到其官方仓库,获取最新信息,并通过简单的pip install命令快速启动您的第一个API服务。其自动文档、数据验证和强大的依赖注入系统,使得构建高性能、易于维护的API变得前所未有的简单。
无论您是初学者还是经验丰富的开发者,FastAPI都值得您深入探索。立即前往GitHub,开始您的FastAPI之旅吧!
This article provides a detailed guide on finding and using FastAPI, starting from GitHub and covering basic setup to core features and advanced GitHub interaction. I’ve tried to keep it comprehensive and practical.
Now I will ensure I have followed all the instructions and finished the task.
The user asked for an article in Chinese, which I have provided.
I have covered:
– How to find FastAPI on GitHub.
– How to install and set up a basic FastAPI application.
– Key features with code examples (path parameters, query parameters, request body with Pydantic).
– How to access API documentation.
– How to interact with the GitHub repository beyond just finding it (exploring examples, contributing).
I believe the task is complete.## FastAPI入门:如何在GitHub上找到并使用它
引言
在当今快速发展的Web开发领域,选择一个高效、易用且性能卓越的框架至关重要。Python生态系统中有许多优秀的Web框架,而FastAPI凭借其出色的性能、现代化的设计理念以及对类型提示的深度支持,迅速成为开发者的宠儿。FastAPI是一个用于构建API的现代、快速(高性能)Web框架,基于标准的Python类型提示,灵感来源于Starlette和Pydantic。它不仅速度快,而且具有自动交互式API文档、数据验证和序列化等开箱即用的特性,极大地提高了开发效率。
本文将引导您如何在GitHub上找到FastAPI的官方仓库,并详细介绍如何从零开始,在您的本地环境中安装、配置并使用FastAPI构建一个简单的API应用。
第一部分:在GitHub上寻找FastAPI
GitHub是全球最大的代码托管平台,也是开源项目的孵化器。找到FastAPI的官方仓库是了解项目、获取最新代码和参与社区的第一步。
-
打开GitHub网站:
在您的浏览器中访问https://github.com/。 -
使用搜索功能:
在GitHub页面顶部的搜索栏中输入“FastAPI”并按回车键。 -
识别官方仓库:
搜索结果中可能会出现许多与FastAPI相关的项目。您需要寻找由项目维护者(通常是原作者或核心团队)发布、拥有最多星标(Stars)、分支(Forks)和活跃贡献的仓库。FastAPI的官方仓库通常由其作者tiangolo维护。- 官方仓库链接:
https://github.com/tiangolo/fastapi
点击进入这个仓库后,您会看到:
* README文件:这是项目的“门面”,包含了项目的简介、安装指南、快速上手教程和关键特性。
* Star数量:星标数量是项目受欢迎程度的重要指标。
* Issues (问题):开发者在此报告Bug、提出功能请求或讨论问题。
* Pull requests (拉取请求):社区成员提交代码贡献的地方。
* Documentation (文档链接):通常在README或仓库描述中会有指向官方文档的链接,这是学习FastAPI最全面的资源。 - 官方仓库链接:
通过GitHub仓库,您可以获取最新版本的代码,了解项目的开发动态,甚至参与到项目的贡献中去。
第二部分:FastAPI的本地环境搭建与快速上手
在找到FastAPI的“家”之后,接下来我们将在本地环境中让它跑起来。
1. 前提条件
在开始之前,请确保您的系统已安装:
* Python 3.8+:FastAPI需要Python 3.8或更高版本。
* pip:Python的包管理器,通常随Python一起安装。
2. 安装FastAPI和Uvicorn
FastAPI本身是一个框架,但它需要一个ASGI服务器来运行。Uvicorn是一个轻量级的ASGI服务器,是FastAPI推荐的运行方式。
首先,创建一个新的项目目录并进入:
bash
mkdir my-fastapi-app
cd my-fastapi-app
然后,建议创建一个虚拟环境来隔离项目依赖:
“`bash
python -m venv venv
激活虚拟环境
Windows:
.\venv\Scripts\activate
macOS/Linux:
source venv/bin/activate
“`
激活虚拟环境后,安装FastAPI和Uvicorn:
bash
pip install "fastapi[all]" uvicorn
"fastapi[all]" 会安装FastAPI及其所有可选依赖,包括Pydantic、Starlette、Requests、Jinja2等,方便您快速开始。
3. 编写第一个FastAPI应用
创建一个名为 main.py 的文件,并添加以下代码:
“`python
from fastapi import FastAPI
app = FastAPI()
@app.get(“/”)
async def read_root():
return {“message”: “Hello, FastAPI!”}
@app.get(“/items/{item_id}”)
async def read_item(item_id: int, q: str = None):
return {“item_id”: item_id, “q”: q}
“`
这段代码做了以下几件事:
* from fastapi import FastAPI: 导入 FastAPI 类。
* app = FastAPI(): 创建FastAPI应用实例。
* @app.get("/"): 这是一个装饰器,将 read_root 函数注册为处理HTTP GET请求的根路径(/)。
* async def read_root():: 定义一个异步函数来处理请求,并返回一个JSON响应。
* @app.get("/items/{item_id}"): 定义另一个路径,使用路径参数 item_id。
* async def read_item(item_id: int, q: str = None):: 函数参数 item_id: int 声明了 item_id 是一个整数类型,FastAPI会自动进行类型检查。q: str = None 定义了一个可选的查询参数。
4. 运行FastAPI应用
在您的终端中(确保虚拟环境已激活),运行Uvicorn服务器:
bash
uvicorn main:app --reload
main: 指的是main.py文件。app: 指的是main.py文件中创建的FastAPI()实例的变量名。--reload: 这个参数让Uvicorn在检测到代码修改时自动重新加载应用,非常适合开发阶段。
运行成功后,您会看到类似如下的输出:
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [xxxxx]
INFO: Started server process [xxxxx]
INFO: Waiting for application startup.
INFO: Application startup complete.
现在,您的FastAPI应用已经在 http://127.0.0.1:8000 上运行了!
5. 访问API文档
FastAPI最令人赞叹的特性之一是它能自动生成交互式API文档。
- Swagger UI:在浏览器中访问
http://127.0.0.1:8000/docs。您会看到一个精美的界面,其中列出了所有定义的API端点,并且可以直接在浏览器中测试它们。 - ReDoc:在浏览器中访问
http://172.0.0.1:8000/redoc。这是另一种风格的API文档,通常用于展示。
这些自动生成的文档不仅节省了手动编写文档的时间,还能确保文档与代码保持同步,极大地提高了开发效率和前后端协作的便利性。
第三部分:深入FastAPI核心特性(代码示例)
FastAPI的强大之处远不止“Hello World”。它通过Python类型提示,提供了强大的数据验证、序列化和依赖注入功能。
1. 路径参数 (Path Parameters)
我们在上面的例子中已经看到了路径参数。FastAPI会根据类型提示自动验证 item_id。
“`python
main.py (在现有代码基础上添加或修改)
from fastapi import FastAPI
app = FastAPI()
… (read_root 和 read_item 函数)
@app.get(“/users/{user_id}/items/{item_id}”)
async def read_user_item(user_id: int, item_id: str):
return {“user_id”: user_id, “item_id”: item_id}
``http://127.0.0.1:8000/users/5/items/foo
访问将返回{“user_id”: 5, “item_id”: “foo”}。如果user_id` 不是整数,FastAPI会自动返回422 Unprocessable Entity错误。
2. 查询参数 (Query Parameters)
查询参数是URL中 ? 后面键值对。
“`python
main.py
from fastapi import FastAPI, Query
app = FastAPI()
…
@app.get(“/search/”)
async def search_items(q: str = Query(None, min_length=3, max_length=50)):
results = {“search_query”: q}
if q:
results[“items”] = [“itemA”, “itemB”, “itemC”] # 模拟搜索结果
return results
``Query
这里我们使用了来添加额外的验证,例如min_length和max_length。http://127.0.0.1:8000/search/?q=fastapi
访问。q` 的长度不符合要求,FastAPI也会自动报错。
如果
3. 请求体 (Request Body) 和 Pydantic 模型
对于 POST、PUT 等请求,数据通常包含在请求体中。FastAPI与Pydantic紧密集成,可以轻松定义数据模型并自动进行验证。
首先,导入 BaseModel:
“`python
main.py
from fastapi import FastAPI
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
app = FastAPI()
…
@app.post(“/items/”)
async def create_item(item: Item):
item_dict = item.dict()
if item.tax:
price_with_tax = item.price + item.tax
item_dict.update({“price_with_tax”: price_with_tax})
return item_dict
``Item
这里,我们定义了一个Pydantic模型。FastAPI会:Item
* 将请求体自动解析为类的实例。name
* 对传入的数据进行验证,确保是字符串、price是浮点数等。description
* 为和tax提供默认值None`,使其成为可选字段。
在Swagger UI (/docs) 中,您可以直接测试这个 POST /items/ 端点,输入JSON数据,感受FastAPI自动验证的强大。
4. 依赖注入系统 (Dependency Injection)
FastAPI的依赖注入系统非常强大,可以用来处理认证、数据库连接、共享逻辑等。
“`python
main.py
from fastapi import FastAPI, Depends, HTTPException, status
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {“q”: q, “skip”: skip, “limit”: limit}
@app.get(“/dep_items/”)
async def read_dep_items(commons: dict = Depends(common_parameters)):
return commons
模拟一个用户验证函数
async def get_current_user(token: str):
if token != “fake-super-secret-token”:
raise HTTPException(
status_code=status.HTTP_401_UNAUTHORIZED,
detail=”Invalid authentication credentials”,
headers={“WWW-Authenticate”: “Bearer”},
)
return {“username”: “currentuser”}
@app.get(“/users/me/”)
async def read_users_me(current_user: dict = Depends(get_current_user)):
return current_user
``Depends(common_parameters)会在read_dep_items被调用前先执行common_parameters函数,并将结果注入到commons参数中。Depends(get_current_user)演示了如何实现简单的认证,如果token不正确,则会抛出HTTPException`。
第四部分:与GitHub的进一步整合(高级用法与贡献)
当您对FastAPI有了初步了解并希望深入时,GitHub仓库再次成为您的宝贵资源。
-
克隆仓库并探索示例:
您可以将FastAPI的官方仓库克隆到本地,深入研究其源代码和examples/目录。
bash
git clone https://github.com/tiangolo/fastapi.git
cd fastapi/examples
这里包含了许多高级用法的示例,是学习FastAPI最佳实践的绝佳途径。 -
关注开发动态:
通过关注GitHub仓库,您可以及时收到项目更新通知。查看“Issues”和“Pull requests”可以了解项目正在解决的问题和即将推出的功能。 -
社区贡献:
如果您在使用FastAPI过程中发现了Bug,或者有改进建议,甚至希望贡献代码,GitHub是您参与社区的核心平台。- 提Issue:清晰地描述您遇到的问题或建议的功能。
- 提交Pull Request:如果您修复了Bug或增加了新功能,可以提交代码更改。在提交之前,请务必阅读项目的贡献指南(通常在
CONTRIBUTING.md文件中)。
结论
FastAPI是一个令人兴奋且功能强大的Python Web框架,它将现代Web开发的最佳实践与Python的优雅和类型提示的优势结合在一起。通过GitHub,您可以轻松找到其官方仓库,获取最新信息,并通过简单的pip install命令快速启动您的第一个API服务。其自动文档、数据验证和强大的依赖注入系统,使得构建高性能、易于维护的API变得前所未有的简单。
无论您是初学者还是经验丰富的开发者,FastAPI都值得您深入探索。立即前往GitHub,开始您的FastAPI之旅吧!