0

0

Python 快速使用 REST API

Guanhui

Guanhui

发布时间:2020-06-15 18:15:24

|

5669人浏览过

|

来源于learnku

转载

Python 快速使用 REST API

最近一直在研究一个新的 python 语言的api,在一位同事的建议下,我们决定使用 fastapi 作为我们的框架。

Fastapi是一个基于python的框架,该框架鼓励使用Pydantic和OpenAPI(以前称为Swagger)进行文档编制,使用Docker进行快速开发和部署以及基于Starlette框架进行的简单测试。

它提供了许多好处,例如自动OpenAPI验证和文档编制,而无需添加不必要的膨胀。我认为,在不提供任何内置功能与提供太多内置功能之间取得很好的平衡。

入门

安装 fastapi 和 ASGI 服务器(例如uvicorn):

确保您使用的是Python 3.6.7+ 如果 pippython 给您python 2版本,则可能必须使用 pip3python3 。另外,请查看我关于python入门的文章。

立即学习Python免费学习笔记(深入)”;

pip install fastapi uvicorn

并在main.py文件中添加旧的“ hello world”:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def home():
    return {"Hello": "World"}

运行开发

然后运行以进行开发,可以运行uvicorn main:app --reload

这就是简单服务器要做的全部!现在您可以检查  //localhost:8000/  以查看“主页”。而且,如您所见,JSON响应“正常工作”!您还可以通过 //localhost:8000/docs 免费获得Swagger UI。

验证

如前所述,很容易验证数据(并为接受的数据格式生成Swagger文档)。只需从fastapi添加Query导入,然后使用它来强制验证:

from fastapi import FastAPI, Query

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0)
):
  return { 'user_id': user_id }

第一个参数...是默认值,如果用户不提供值则提供该默认值。如果设置为None,则没有默认值,并且该参数是可选的。为了没有默认值并且该参数是强制性的,请使用Ellipsis ,或...代替。

如果运行此代码,则会在swagger UI上自动看到更新:

Swagger UI允许您查看新的/ user路由并使用特定的用户ID进行请求

如果您输入任何用户ID,您会看到它会自动为您执行请求,例如  //localhost:8000/user?user_id=1。在页面中,您只能看到回显了用户ID!

如果要改为使用路径参数(以使其为 /user/1,则只需输入并使用Path而不是Query。也可以结合两者

Post 路线

如果您有POST路由,则只需定义输入即可

黑点工具
黑点工具

在线工具导航网站,免费使用无需注册,快速使用无门槛。

下载
@app.post('/user/update')
async def update_user(
    *,
    user_id: int,
    really_update: int = Query(...)
):
    pass

在这种情况下,您可以看到user_id仅被定义为一个没有QueryPath的整数;这意味着它将在POST请求正文中。如果您接受更复杂的数据结构,例如JSON数据,则应研究请求模型。

请求和响应模型

您可以使用Pydantic模型记录并声明详细的请求和响应模型。这不仅可以让您拥有所有模型的自动OpenAPI文档,而且还可以验证请求模型和响应模型,以确保输入的任何POST数据都是正确的,并且返回的数据也符合该模型。

只需像这样声明模型:

from pydantic import BaseModel

class User(BaseModel):
    id:: int
    name: str
    email: str

然后,如果您希望将用户模型作为输入,则可以执行以下操作:

async def update_user(*, user: User):
    pass

或者,如果您要将其用作输出:

@app.get('/user')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user

路由和分解更大的API

您可以使用APIRouter将api分解为路由。例如,我已经在我的 API 中找到了这个app / routers / v1 / __ init __。py

from fastapi import APIRouter
from .user import router as user_router

router = APIRouter()

router.include_router(
    user_router,
    prefix='/user',
    tags=['users'],
)

然后您可以在app / routers / v1 / user.py中使用上面的用户代码-只需导入APIRouter并使用@ router.get('/')而不是 @ app.get('/ user')。它会自动路由到 / user / ,因为该路由是相对于前缀的。

from fastapi import APIRouter

router = APIRouter()

@router.get('/')
async def user(
    *,
    user_id: int = Query(..., title="The ID of the user to get", gt=0),
    response_model=User
):
  my_user = get_user(user_id)
  return my_user

最后,要在应用程序中使用所有v1路由器,只需将main.py编辑为:

from fastapi import FastAPI
from app.routers import v1

app = FastAPI()

app.include_router(
    v1.router,
    prefix="/api/v1"
)

您可以通过这种方式随意链接路由器,从而允许您拆分大型应用程序并拥有版本化的API。

Dockerizing and Deploying

Fastapi 的作者使出乎意料的轻松之一就是 Dockerizing!默认的Dockerfile是2行!

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app

是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:

version: "3"
services:
  test-api:
    build: ..
    entrypoint: '/start-reload.sh'
    ports:
        - 8080:80
    volumes:
        - ./:/app

这会将当前目录挂载为app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!

结论

就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。

推荐教程:Python教程

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

455

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

28

2025.12.22

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

251

2026.02.06

pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

373

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

436

2024.12.20

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号