FastAPI 干啥的?

FastAPI 是用来构建 API 服务的一个高性能框架。

为什么选择 FastAPI ?

FastAPI 是一个现代、高性能 web 框架,用于构建 APIs,基于 Python 3.6 及以上版本。

最大特点:快!性能极高,可与 NodeJS, Go 媲美。

基于 Starlette 和 Pydantic,是 FastAPI 如此高性能的重要原因。

还具备代码复用性高,容易上手,健壮性强的优点。

个人还觉得,FastAPI 还有一个非常强的优势:方便的 API 调试,生成 API 文档,直接能够做到调试自己构建的 API,这在实际应用中,价值凸显。

FastAPI 这么强悍,有必要研究和使用,因为无论做开发,还是做算法,API 服务真的太重要,太重要,尤其是大厂,离不开 API 接口。

Pydantic 做类型强制检查

FastAPI 基于 PydanticPydantic 主要用来做类型强制检查。参数赋值,不符合类型要求,就会抛出异常。

对于 API 服务,支持类型检查非常有用,会让服务更加健壮,也会加快开发速度,因为开发者再也不用自己写一行一行的做类型检查。

首先 pip install pydantic

然后,使用 Pydantic 做强制类型检查。

from pydantic import ValidationErrorfrom datetime import datetime
from typing import List
from pydantic import BaseModelclass User(BaseModel):id:intname='jack guo'signup_timestamp: datetime = Nonefriends: List[int] = []

观察到:

  • id 要求必须为 int

  • name 要求必须为 str, 且有默认值

  • signup_timestamp 要求为 datetime, 默认值为 None

  • friends 要求为 List,元素类型要求 int, 默认值为 []

使用 User 类:

try:User(signup_timestamp='not datetime',friends=[1,2,3,'not number'])
except ValidationError as e:print(e.json())

id 没有默认值,按照预期会报缺失的异常

signup_timestamp 被赋为非 datetime 类型值,按照预期会报异常

friends 索引为 3 的元素被赋值为 str,按照预期也会报异常

执行代码,验证是否符合预期。

执行结果显示,符合预期

[{"loc": ["id"],"msg": "field required","type": "value_error.missing"},{"loc": ["signup_timestamp"],"msg": "invalid datetime format","type": "value_error.datetime"},{"loc": ["friends",3],"msg": "value is not a valid integer","type": "type_error.integer"}
]

快速上手 FastAPI

这是一个入门 demo, 构建以下三个路由:

from fastapi import FastAPI
from pydantic import BaseModelapp = FastAPI()class User(BaseModel):id: intname: strfriends: list@app.get("/")
def index():return {"admin": "welcome to FastAPI"}@app.get("/users/{user_id}")
def read_user(user_id: int, name: str = None):return {"user_id": user_id, "name": name}@app.put("/users/{user_id}")
def update_user(user_id: int, user: User):return {"user_name": user.name, "user_id": user_id}

将上述代码保存为 main.py

再安装与构建服务相关的框架 uvicorn

安装完成后,后台执行:uvicorn main:app --reload

启动服务,显示如下:

打开客户端,输入:localhost:8000,回车:

输入请求:localhost:8000/users/5,回车,看到前台数据,非常容易的就能传递到 controller 层,方便。

输入请求:localhost:8000/docs,回车:,看到 API 文档界面

点开第二个 get 请求,然后点击 Try it out 后,便可以进行接口调试。非常方便!

输入user_id, name 后,点击 Execute,执行成功。如果 user_id 输入非数值型,点击 Execute 后,红框闪动一下,不会执行,直到输入正确为止。

输入user_id, name 后,点击 Execute,

能看到结果,包括请求的 URL

也能看到,服务器响应前端,返回的结果:

FastAPI 基于以上这些强大的优点,相信在实际开发 API 服务时,会很敏捷。期待!

FastAPI 构建 API 服务,究竟有多快?相关推荐

  1. Java VS Go,微服务究竟谁更快?

    作者 | 程序猿DD   责编 | 张文 头图 | CSDN 下载自视觉中国 Java 微服务能像 Go 微服务一样快吗?这是我最近一直在思索的一个问题. 去年 8 月份的 the Oracle Gr ...

  2. 【python 算法接口】使用FastAPI框架快速构建高性能的api服务

    无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家.教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家.点这里可以跳转到教程.人工智能课程 一.FastAPI ...

  3. 基于 Go 语言构建企业级的 RESTful API 服务

    现代软件架构已经逐渐从单体架构转向微服务架构,在微服务架构中服务间通信采用轻量级通信机制.对于轻量级通信的协议而言,通常基于 HTTP 和 RPC ,能让服务间的通信变的标准化并且无状态化.此外开发模 ...

  4. 基于事件驱动架构构建微服务第5部分:容器化(Web Api Core 和 SQL Server Linux)

    原文链接:https://logcorner.com/building-microservices-through-event-driven-architecture-part5-dockerizat ...

  5. pycharm构建虚拟环境_10分钟,带你用Python构建RESTful API 服务

    1. 前言 上一篇文章,介绍了使用 Java + Spring Boot + MyBatis 构建 RESTful API 的详细步骤:很多小伙伴表示,更愿意用 Python 编写 RESTful A ...

  6. 利用Vert.x构建简单的API 服务、分布式服务

    目前已经使用Vertx已经一年多了,虽然没有太多的造诣,但也已在项目中推广了下:从最初的vertx搭建web服务,到项目上线运营,还算比较稳定.再到后来尝试搭建基于vertx的分布式服务,一路下来也积 ...

  7. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  8. abp构建Web API服务

    构建动态Web API控制器 ABP可以自动地为应用层生成Web API 层.比如说我们之前创建的应用层: namespace Noah.ChargeStation.Application.Citie ...

  9. 通过API开发平台构建微服务应用实例(一)

    API开发平台能帮助开发人员快速发布API和构建微服务,那么这个过程是怎么样的,我们今天就用使用实际的场景来演示整个开发过程.下图是传统供应链系统的功能架构. 可以看到供应链系统的模块还是比较多的,我 ...

最新文章

  1. 初识、理解适配器模式
  2. java中finally与return的测试方法
  3. web前端 学习线路
  4. pdf在线转换图片该如何进行操作
  5. VTK:PolyData之IsoLines
  6. How to create a Python dictionary with double quotes as default quote format?
  7. 服务器芯片采购,服务器采购具体要求.pdf
  8. 计算机教育实习日志,计算机教师实习日志
  9. java飞机_使用java写出飞机小游戏
  10. 黄健翔激情解说之中国移动版、石化版、房地产版
  11. 【Java开源项目】消息推送平台 日志引入
  12. 【VUE+Mapbox】mapbox地图在vue中展示所遇问题解决
  13. 星际穿越-网易python(简单数学公式)
  14. (6)打鸡儿教你Vue.js
  15. elementui 限制输入字数
  16. 今天去献血啦,在这里做一回义务献血宣传员吧 ^_^
  17. 鹿晗是如何成功表白关晓彤的?
  18. [附源码]java毕业设计中学学生学籍管理
  19. hutool 获取某月最后一天_huTool--工具类常用方法
  20. java jar war 文件 打包 运行

热门文章

  1. geek_2013年How-To Geek的节日礼物指南:一定要装满东西
  2. 信号与槽是如何实现的_Nature | 破解Wnt信号高效远距离传递之谜
  3. RNA-seq 详细教程:实验设计(2)
  4. Coreseek、Sphinx-for-chinaese、Sphinx+Scws区别
  5. 【征集反馈】工作中让你印象最深刻、最想吐槽的一件事是什么?
  6. 企业微信禁用成员是什么意思?
  7. 在安卓上部署服务器 - 解决内网穿透
  8. Typora中如何使用数学公式、数学符号
  9. 聊聊Web3为什么能赚钱?为什么不要All in Web3?
  10. JS实现倒计时精确到天数,时,分,秒或者精确到时、分、秒(小时数累加)