Python开发框架FastAPI系列(1. 初体验)

news2024/11/16 13:49:59

本文为系列文章Python开发框架FastAPI系列的第一部分。

缘起

其实Python的Web开发框架已经有很多了,包括老将Django和后起之秀Flask都做得很好,各有各的特色。那么为什么FastAPI作为一个后来者,短时间内就人气飙升呢?我也是看到很多招聘描述上提到了这个框架,产生了兴趣想去学习这个框架的意向。

根据官网的介绍,我们可以了解FastAPI的基本特点:

FastAPI framework, high performance, easy to learn, fast to code, ready for production

FastAPI is a modern, fast (high-performance), web framework for building APIs with Python based on standard Python type hints.

  • 高性能
  • 容易学习
  • 编码迅速
  • 生产环境可用

在这个系列文章中,我们逐步来展开讨论这些特点,看看官方介(chui)绍 (xu)的是不是很符合事实。

创世纪

安装很简单(感谢美丽善良的pip)

$ pip install fastapi

然后按照惯例,先上前菜hello world。

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "FastAPI"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

如果小伙伴们有过其他Web开发框架例如Flask, NodeJS Express的开发经验,阅读这个代码应该没有任何问题。注意因为FastAPI是一个现代的框架,用了包括Type Hints在内的一些Python语言特性。对Type Hints不熟悉的同学推荐参考本人拙作Python中的typings-CSDN博客。

上面代码核心的部分就是导入fastapi包,并且实例化app对象。

from fastapi import FastAPI

app = FastAPI()

然后通过Python注解来标注路由规则,例如

@app.get("/items/{item_id}") # 路由规则
def read_item(item_id: int, q: Union[str, None] = None):
    return {"item_id": item_id, "q": q}

函数read_item则是一个控制器(也就是MVC中的Controller),它实现了具体的业务逻辑,并且返回了操作结果的恰当表示,这里返回的格式为JSON。

如何运行

将上面的代码保存为main.py,然后执行

fastapi dev main.py

就可以运行起来了。是不是很简单?

然后可以打开浏览器或者使用Postman,curl之类的兵器来测试这个应用,这里不再赘述了。

亮点:自动生成交互式文档

从FastAPI的名字来看,大家也能猜测到它的一个出发点是快速开发Web API的。而目前占据Web API统治地位的依然是RESTful API。既然有API,那么文档不可少。写文档难,维护文档更难。因为文档难搞,又没有成就感,所以很多同学都不乐意写文档,造成了大多数项目文档缺失和文档质量低下等问题。但是FastAPI的一个特点,就是能够自动生成交互式的文档。这个特性真的是亮瞎了我的狗眼。我还清晰记得以前做的JAVA服务上线后,痛苦地补写文档的日子。

在浏览器中打开地址http://127.0.0.1:8000/docs, 你会看到基于Swagger UI的可交互文档已经帮你生成好了。

这些文档基于open API Spec,依靠给力的Swagger UI,都是可以交互使用的。想象一下,通过FastAPI实现的服务上线了,文档也就同步完成了,对于开发者来说是不是很美妙?

另外FastAPI也集成了Redoc,这样可以给API的使用者提供更美观的参考文档。小伙伴们亲自试一试 http://127.0.0.1:8000/redoc

FastAPI的初体验就写到这里打住了,喜欢的朋友们请 tuple(点赞,收藏,关注)一下哦。你轻轻动动手指,就是为我添加巨大动力。炎炎夏日,也要动力澎湃。努力学习,做更好的自己~

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

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

相关文章

【linux】【操作系统】初始化程序之main.c源码阅读

/init/main.c是Linux操作系统启动过程的核心部分,它负责初始化硬件、设备、内存和系统服务,以及启动第一个用户进程,为后续的系统运行奠定基础。 详细解析 1. 内联函数定义 fork, pause, setup, sync: 这些函数被声明为内联,意…

解决secureCRT乱码设置UTF-8显示中文

永久性配置UTF-8 在SecureCRT的安装文件夹中搜索“Default.ini” 找到D:“Filenames Always Use UTF8”00000000,将最后的0变成1,即:D:“Filenames Always Use UTF8”00000001 将S:”Output Transformer Name”Default修改为S:”Output Tran…

如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据

背景介绍 网页数据的抓取已经成为数据分析、市场调研等领域的重要工具。无论是获取产品价格、用户评论还是其他公开数据,网页抓取技术都能提供极大的帮助。今天,我们将探讨如何使用 PHP Simple HTML DOM Parser 轻松获取网页中的特定数据。PHP Simple H…

SPSSAU | 最好最差权重BWM原理及案例实操分析

BWM(best-worse-method,最好最差法)是一种多准则决策方法,由Jafar Rezaei于2015年提出,其通常用于确定决策标准的权重。其原理是比如5个指标,如果以前AHP就需要5个指标两两的相对重要性数据。但是现在简化为…

CSS实现文本溢出处理

1.单行文本溢出 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

如何利用DFMEA优化产品设计?

在快节奏的产品开发周期中&#xff0c;DFMEA如同一双锐利的眼睛&#xff0c;帮助团队在设计初期就识别并预防潜在的问题。它不仅仅是一种分析方法&#xff0c;更是一种系统化的思维工具&#xff0c;通过深入分析每个设计元素可能发生的失效模式、原因、影响及严重程度&#xff…

Vue3父子组件传属性和方法调用Demo

Vue3父子组件传属性和方法调用Demo 说明目录父组件给子组件传值和方法父组件给子组件传值-使用defineProps接受父组件属性值父组件给子组件传值-使用defineModel接受父组件v-model值当子组件只需要接收父组件一个v-model值时,写法1如下:子组件接收单个v-model写法2如下:当子组件…

设计界的新宠:5款热门UI在线设计软件评测

随着用户界面设计行业的蓬勃发展&#xff0c;越来越多的设计师进入用户界面设计。选择一个方便的用户界面设计工具尤为重要&#xff01;除了传统的用户界面设计工具&#xff0c;在线用户界面设计工具也受到越来越多设计师的青睐。这种不受时间、地点、计算机配置限制的工作方法…

12. 计算机网络TCP四次挥手

1. 前言 上一章节分析了 TCP 建立连接的过程,既然有建立连接,对应的也有断开连接。数据传输完成之后,客户端和服务器端保持通信状态会占用资源开销,所以需要断开连接,TCP 协议中断开连接也被称为 TCP 四次挥手。 2.1 TCP 四次挥手 面试官提问: 说明一下 TCP 断开连接的…

Azure AD 配置角色,在Blazor中从Claims读取角色

首先是在 Microsoft Entra admin center 中配置你的应用程序角色 然后分配用户到你创建的角色 1. 首先从下图找到你要配置的程序 2. 然后找到分配用户到角色的地方 选择用户 再选择角色 这样就成功给用户分配了权限 接下来就可以在Blazor页面中读取了 using Microsoft.AspNe…

安居客全国小区(名称、价格、地区、地址)数据快速整理导出

安居客二手房小区全国(南京|重庆|青岛|天津|杭州|成都|沈阳|武汉|长沙|西安)实时数据&#xff0c;含小区名称、价格、地区、地址、商圈、标签、经纬度、物业类型、交易权属、竣工时间、产权年限、开发商、总户数、总建面积、绿化率、容积率、统一供暖 供水供电、停车位、停车费…

ruoyi若依框架中货道关联商品

<el-button link type"primary" click"handleGoods(scope.row)" v-hasPermi"[manage:vm:edit]">货道</el-button> <!-- 货道组件 --> <ChannelDialog :goodVisible"goodVisible" :goodData"goodData" …

职业本科综合布线实训室

一、职业本科综合布线实训室建设背景 在数字化时代的大潮中&#xff0c;网络技术作为推动社会进步的重要力量&#xff0c;其地位日益凸显。随着云计算、大数据、物联网、人工智能等技术的不断发展和融合&#xff0c;网络技术的边界和应用领域不断扩展&#xff0c;对于掌握现代…

无线领夹麦克风怎么选,直播唱歌只用领夹麦可以吗?

现如今视频自媒体行业还在蓬勃发展&#xff0c;麦克风对于自媒体行业可以说是必不可少的装备了&#xff0c;在互联网“内卷”的时代&#xff0c;各大视频博主、Up主、主播大多都会使用无线麦克风来辅助视频和直播内容输出。无线领夹麦克风作为视频行业中的麦克风新宠&#xff0…

script 加载的三种方式详解

首屏优化这个问题想必已经老生常谈了&#xff0c;在面试当中也是经常被提及到&#xff0c;例如&#xff0c;面试官&#xff1a;有没有做过首屏优化&#xff0c;首屏优化都有哪些方案&#xff1f;当然在首屏优化中并没有一套方案是一劳永逸的&#xff0c;要根据具体网站首页的需…

【vluhub】weblogin之xxe实体注入

XXE 漏洞 XXE漏洞&#xff0c;全称XML外部实体注入漏洞&#xff0c;是一种常见的针对解析XML输入的应用程序的安全漏洞。当应用程序在解析XML数据时&#xff0c;如果没有正确验证或限制实体引用&#xff0c;攻击者就可以通过构造恶意的XML输入&#xff0c;将外部实体引用进来&…

NLB快速实现IPv4服务的负载均衡

阿里云网络型负载均衡NLB&#xff08;Network Load Balancer&#xff09;支持TCP、UDP和TCPSSL协议&#xff0c;提供了强大的四层负载均衡能力。 为了实现IPv4服务的负载均衡&#xff0c;需要快速创建一个NLB实例&#xff0c;并将来自客户端的访问请求转发至后端服务器。 操作…

自闭症儿童能否摘帽?摘帽成功的秘诀揭秘

自闭症&#xff0c;这一曾经被视为不可逆转的障碍&#xff0c;如今在科学的进步与社会的关注下&#xff0c;正逐步展现出被“摘帽”的可能性。那么&#xff0c;自闭症儿童真的能完全摆脱这一标签&#xff0c;实现真正的“摘帽”吗&#xff1f;答案是肯定的&#xff0c;关键在于…

开发效率提升利器:5款支持C#语言的AI辅助编程工具

前言 在这个AI迅速发展的阶段&#xff0c;涌现出了一大批好用的AI辅助编程工具。AI辅助编程工具能够提高开发效率、改善代码质量、降低bug率&#xff0c;是现代软件开发过程中的重要助手。今天大姚给大家分享5款AI辅助编程工具&#xff08;并且都支持C#语言&#xff09;&#…