FastAPI:Python打造高效API的终极武器

在Python的世界里,如果你想要一个既快速又现代的方式来构建API,那么FastAPI可能是你的首选。这个库基于Starlette(用于Web编程)和Pydantic(用于数据验证),专门为速度和易用性设计。

image-20240429143040552

什么是FastAPI?

FastAPI 是一个用于构建API的现代、快速(高性能)框架,使用Python 3.6及以上版本,基于标准Python类型提示。它允许开发者使用Python的类型提示来声明请求和响应的数据模型,从而使得API具有自动生成的文档(Swagger UI),并支持数据验证和序列化。

核心特性:
  1. 快速:FastAPI框架非常快。其性能可与NodeJS和Go相媲美,主要得益于Starlette(用于Web微服务的工具集)和Pydantic(数据验证库)。
  2. 简单易用:设计目的是易于使用和学习,减少可能的错误。
  3. 自动生成文档:使用Swagger和ReDoc,FastAPI会自动为你生成交互式API文档。

FastAPI 的原理

FastAPI 使用 Python 的类型提示增强其性能和错误处理能力。当你创建一个API函数时,你可以给每个函数参数添加类型提示,FastAPI 会使用这些信息来执行请求参数的验证和序列化。

快速入门示例

步骤 1:安装FastAPI和Uvicorn

首先,我们需要安装FastAPI框架和Uvicorn,一个光速ASGI服务器,用于运行我们的应用。

pip install fastapi uvicorn
步骤 2:创建一个基本的API

接下来,我们写一个简单的应用来展示FastAPI的基础功能,将代码保存为example.py。

from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def read_root():return {"Hello": "World"}
步骤 3:运行服务器

运行上面的应用非常简单,只需要在命令行中执行以下命令:

uvicorn example:app --reload

这条命令会启动服务器,并且每当你修改代码后,服务器会自动重新加载。

步骤 4:测试API

打开你的浏览器或者使用工具如Postman,访问 http://127.0.0.1:8000/,你将看到像这样的响应:

image-20240429115243099

进阶示例

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Listapp = FastAPI()class Book(BaseModel):title: strauthor: strprice: floatin_stock: int# 初始化books_db,确保每个条目都是Book对象
books_db: List[Book] = [Book(title="西游记", author="吴承恩", price=100.0, in_stock=10),Book(title="三国演义", author="罗贯中", price=120.0, in_stock=15),Book(title="水浒传", author="施耐庵", price=110.0, in_stock=5),Book(title="红楼梦", author="曹雪芹", price=130.0, in_stock=8)
]@app.post("/books/")
async def add_book(book: Book):books_db.append(book)return {"msg": "Book added successfully", "book": book}@app.get("/books/", response_model=List[Book])
async def get_books():return books_db

执行步骤

  1. 保存上述代码到一个名为example.py的文件中。

  2. 在你的开发环境中安装FastAPI和uvicorn:

    pip install fastapi uvicorn
    
  3. 在命令行中运行下面的命令来启动服务器:

    uvicorn example:app --reload
    
  4. 使用浏览器或API测试工具(如Postman)来发送请求:

    • 发送POST请求到http://127.0.0.1:8000/books/以添加新书。
    • 发送GET请求到http://127.0.0.1:8000/books/以查看所有书籍。

执行效果

image-20240429142128405

FastAPI 的官方文档是学习资源的宝库,提供了详尽的指南和API参考。

FastAPI 官方文档:https://fastapi.tiangolo.com/

FastAPI GitHub:https://github.com/tiangolo/fastapi

FastAPI提供了一个强大而灵活的方式来构建API,其性能优异,自动化文档和数据验证功能可以大大加快开发速度。适合需要快速迭代和部署的现代Web应用。

希望这篇文章能帮助你了解FastAPI的基本用法和构建高效API的能力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/836657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【系统架构师】-案例篇(三)NoSQL与分布式对象调用

1、NoSQL 一个基于Web 2.0的大型社交网络系统。就该系统的数据架构而言,李工决定采用公司熟悉的数据架构,使用通用的商用关系型数据库,系统内部数据采用中央集中方式存储。该系统投入使用后,初期用户数量少,系统运行平…

【LeetCode】每日一题 2024_5_13 腐烂的橘子(经典多源 BFS)

文章目录 LeetCode?启动!!!题目:找出不同元素数目差数组题目描述代码与解题思路 每天进步一点点 LeetCode?启动!!! 好久没写每日一题题解了,今天重新起航 干…

U盘打不开无法使用

我一个U盘通过window无法识别了,属性也打不开; 我这时候通过挂载U盘到我的centos虚拟机上,打开后,将其挂载 如有需要备份其中的文件 fdisk -L blkid mount /dev/sdc4 /UP cp -r /UP /opt/ umout /UP mkfs.xfs -f /dev/sdc4…

AI与边缘设备,光子芯片,AI规划能力,自然语言驱动的AI游戏

1 Archetype AI 发布了一个创新的人工智能平台 —— Newton 这是一个专门为理解物理世界设计的基础模型。 Newton 设计用于连接实时物理数据,其数据源是全球数十亿传感器的输入,实现了对物理现实的直接解读。 利用从各种传感器(如加速度计…

thinkphp8 framework和 element plus admin前后端分离系统之PHP安装教程

DIYGW-UI-PHP是一款基于thinkphp8 framework和 element plus admin开发而成的前后端分离系统。目的是结合现有diygw-ui打造一个后台API开发。 实现PHP源码前请先下载小皮面板或者宝塔。 系统已经集成了部分功能 用户管理 后台用户管理部门管理 配置公司的部门结构&#xff0…

248 基于matlab的GA-RBF神经网络预测

基于matlab的GA-RBF神经网络预测,遗传算法优化来训练RBF网络权值,RBF优化后的结果用于预测。输出真实值、RBF预测结果、GA-RBF预测结果,并进行对比。程序已调通,可直接运行。 248 RBF神经网络 GA-RBF 时间序列预测 - 小红书 (xiao…

银发经济背后百万亿市场,解析冷门暴利的中老年AI赚钱项目!

最近“银发经济”这个词频繁出现,如果你注意到了抖音被封号的“秀才”以及仍在活跃的“一笑倾城”这两个账号,你就会明白中老年赛道的前景是多么广阔。 《银发经济蓝皮书》数据显示,到目前为止,我国60岁及以上的老年人口已超过2.8…

扭蛋机小程序开发,探索扭蛋机市场的盈利趋势

近几年随着互联网科技的不断创新,扭蛋机又再一次进入到了大众的目光中,各种全新的“互联网扭蛋机”模式为大众打造了一个全新的扭蛋体验,市场规模也在不断扩大,为扭蛋机商家和创业者提供了巨大的发展空间。本文将介绍“互联网扭蛋…

夜莺监控(Nightingale)上线内置指标功能

Prometheus 生态里如果要查询数据,需要编写 promql,对于普通用户来说,门槛有点高。通常有两种解法,一个是通过 AI 的手段做翻译,你用大白话跟 AI 提出你的诉求,让 AI 帮你写 promql,另一种是平台…

巩固学习6

正则表达式 又称规则表达式,Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”&…

Uniapp 自定义弹窗

布局 <view><view v-if"show" class"popup"><view class"popup-box"><view>支付方式:{{way}}</view><view>停车费用:{{money}}</view><view class"btn-box"><view class"ca…

Spring高手之路18——从XML配置角度理解Spring AOP

文章目录 1. Spring AOP与动态代理1.1 Spring AOP和动态代理的关系1.2 AOP基本术语 2. 通过XML配置实现Spring AOP2.1 添加Spring依赖2.2 定义业务接口和实现类2.3 定义切面类2.4 配置XML 1. Spring AOP与动态代理 1.1 Spring AOP和动态代理的关系 Spring AOP使用动态代理作为…

Python从0到POC编写--基础

什么是EXP、POC、CVE&#xff1a; 在某个漏洞出现的时候&#xff0c;会经常看到 exp啊&#xff0c;poc啊什么鬼的&#xff0c; 那么这些究竟是什么东西&#xff1f;&#xff1f; 余弦大大说&#xff1a; POC 即 Proof Of Concept&#xff0c;观点验证程序。 运行这个程序就…

【Linux系统编程】第十七弹---进程理解

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、进程的基本概念 2、描述进程-PCB 2.1、什么是PCB 2.2、为什么要有PCB 3、task_ struct 3.1、启动进程 3.2、创建进程…

基于微信小程序的预约挂号系统(源码)

博主介绍&#xff1a;✌程序员徐师兄、10年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447…

Ubuntu20.04右键打不开终端

今天用virtualbox安装了ubuntu20.04 问题&#xff1a;右键打开终端&#xff0c;怎么也打开不了&#xff01; 点了也没反应&#xff0c;或者鼠标转小圈圈&#xff0c;然后也没有反应… 解决方法&#xff1a; 1、Ctrl Alt F6 先切换到终端访问界面 mac电脑 Ctrl Alt F6 …

vuerouter声明式导航

声明式导航-跳转传参数 1.查询参数传参 语法&#xff1a;to /path?参数名值 2.对应页面组件接受传来的值 $router.query.参数名 2.动态路由传参 1.配置动态路由 2.配置导航连接 to/path/参数值 3.对应页面组件接收传递过来的值 #route.params.参数名 多个参数传递&…

情感感知OCR:整合深度学习技术提升文字识别系统的情感理解能力

摘要&#xff1a;随着深度学习技术的发展&#xff0c;文字识别&#xff08;OCR&#xff09;系统在识别准确率和速度上取得了长足的进步。然而&#xff0c;在处理文本时&#xff0c;仅仅依靠字符和词语的识别并不足以满足用户对信息的全面理解需求。本文提出了一种新颖的方法&am…

Redis五大基本数据类型介绍及其使用场景

文章目录 1 String&#xff08;字符串&#xff09;应用场景 2 List&#xff08;列表&#xff09;应用场景 3 Set&#xff08;集合&#xff09;4 sorted set&#xff08;有序集合&#xff09;应用场景 5 hash&#xff08;哈希&#xff09;应用场景 Redis 是一个开源&#xff0c;…

彩信群发推广:四大革新优势,引领营销新时代!

在数字化营销日益盛行的今天&#xff0c;短信群发已成为我们生活中不可或缺的一部分。然而&#xff0c;您是否想过&#xff0c;除了传统的文本短信&#xff0c;还有一种更为丰富、更具吸引力的推广方式——彩信群发推广&#xff1f;彩信不仅融合了图片、文字、音频、动画和视频…