python后端服务接口快速开发框架-fastapi

写在前面

总体而言,python作为一门胶水语言,由于学习成本相对较低,主要用途还是在原型验证、模型探索等方面,而作为web框架,更多应用在内部管理系统中,在大型生产环境中应用还是比较少见的。
谈到python web 框架,首先就要谈到大而全的Django,也正是大而全这三个字,让很多新入门的同学忘而却步,不过它仍然是web应用的首选。然后就是以微小和可扩展著称的flask,flask的发展势头很迅猛,docker官方的很多示例也都是使用的flask。
时至今日,稍有规模的团队都会顺应前后端分离的潮流。今天就来聊一聊近两年横空出世的python后端服务接口快速开发框架--fastapi
本文大多内容参考fastapi官方文档,请按需移步:https://fastapi.tiangolo.com/zh/

fastapi的自我介绍

FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

fastapi的关键特性

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一
  • 高效编码:提高功能开发速度约 200% 至 300%。
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

fastapi的安装

pip install fastapi

同时还需要一个asgi服务器

pip install uvicorn

创建示例程序

from typing import Optional

from fastapi import FastAPI

app = FastAPI()


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


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

运行示例程序

(venv) mango@wanzhouyi:~/test_venv$ uvicorn app:app --reload
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [664] using statreload
INFO:     Started server process [666]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     127.0.0.1:58940 - "GET / HTTP/1.1" 200 OK
INFO:     127.0.0.1:58940 - "GET /favicon.ico HTTP/1.1" 404 Not Found
INFO:     127.0.0.1:58946 - "GET /items/5?q=somequery HTTP/1.1" 200 OK
INFO:     127.0.0.1:58946 - "GET /favicon.ico HTTP/1.1" 404 Not Found

到此已经创建了一个具有以下功能的 API:

通过 路径 / 和 /items/{item_id} 接受 HTTP 请求。
以上 路径 都接受 GET 操作(也被称为 HTTP 方法)。
/items/{item_id} 路径 有一个 路径参数 item_id 并且应该为 int 类型。
/items/{item_id} 路径 有一个可选的 str 类型的 查询参数 q。

查看由swagger ui自动生成的交互式接口文档

交互式接口文档

总结

总的来说,你就像声明函数的参数类型一样只声明了一次请求参数、请求体等的类型。
你使用了标准的现代 Python 类型来完成声明。
你不需要去学习新的语法、了解特定库的方法或类,等等。
只需要使用标准的 Python 3.6 及更高版本。
举个例子,比如声明 int 类型:
item_id: int
或者一个更复杂的 Item 模型
item: Item
......在进行一次声明之后,你将获得:

编辑器支持,包括:

  • 自动补全
  • 类型检查

数据校验:

  • 在校验失败时自动生成清晰的错误信息
  • 对多层嵌套的 JSON 对象依然执行校验

转换 来自网络请求的输入数据为 Python 数据类型。包括以下数据:

  • JSON
  • 路径参数
  • 查询参数
  • Cookies
  • 请求头
  • 表单
  • 文件

转换 输出的数据:转换 Python 数据类型为供网络传输的 JSON 数据:

  • 转换 Python 基础类型 (str、 int、 float、 bool、 list 等)
  • datetime 对象
  • UUID 对象
  • 数据库模型
  • ......以及更多其他类型

自动生成的交互式 API 文档,包括两种可选的用户界面:

  • Swagger UI
  • ReDoc
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容