小白学FastAPI 正式开写了!

2022-03-14 19:50:55 浏览数 (3)

大家好,我是Kuls。

本系列文章的目的就是能够通俗易懂的讲述FastAPI这个框架,让每个人学习这门框架都没有什么门槛。

这个系列想了很久到底用什么形式来呈现,期间也发了投票给各位读者。

大家投出来最后的结果是,视频 图文的形式。

所以,这个系列我将会通过视频 图文的形式来呈现,当然视频的录制可能会晚一点点。

好了,接下来我们来细细说说fastapi这个框架。

敲门砖:写一个demo

如果让我用一个句话来描述fastapi,我会说这是Python里面最好的api框架!

不比go、node.js差!

以往我们使用Python来写后端,基本上使用的是Django和Flask。

但是现在不一样了,fastapi不仅仅高效率而且还很适合产品级的开发。

本系列最后会带着大家做一个完整的产品级项目,所以大家一定要记得星标公众号!

最直观的了解一个框架,就是先写一个简单的demo,然后跑起来。

在写demo之前,我们需要安装一下fastapi以及ASGI(ASGI是WSGI的升级版,支持异步调用)

代码语言:javascript复制
pip install fastapi
pip install uvicorn

安装完毕之后,创建一个main.py ,然后粘贴我们下面的代码跑一下:

代码语言:javascript复制
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
    return {"msg": "hello world"}

@app.get("/items/{item_id}")
def read_item(item_id: int, keyword: str):
    return {"item_id": item_id, "keyword": keyword}

如何运行?

如何运行呢?

直接 python main.py ?

不是的,上面我们已经安装了uvicorn,我们就直接用它来运行

代码语言:javascript复制
$ uvicorn main:app --reload --port 8000
$ curl http://127.0.0.1:8000
$ curl http://127.0.0.1:8000/items/1?keyword=book

这里估计也得跟大家介绍一下上面几个命令行的意思。

首先第一个 uvicorn main:app --reload --port 8000

其中的main 指的是我们的文件名,app指的是我们在代码中FastAPI()这个类赋予的变量名,例如在上面app = FastAPI(),所以这里就是app。--reload是热部署的意思,热部署就是指我们改动代码服务器会自动更新代码文件然后重新运行。--port就不用多说了。

其次curl ,你可以理解为是一个请求web资源的命令行。

最后,运行完成,可以看到我们输出了一个json类型字符串

当然你也可以在浏览器中访问。

openAPI支持

在之前介绍fastapi的文章中也讲了,fastapi是一个符合OpenAPI 和 JSON Schema的框架。

所以fastapi也支持了API文档的自动生成,这一点对程序员来说真的是非常非常的舒服。

如何访问呢?

http://127.0.0.1:8000/docs

在后面加个docs就行了

http://127.0.0.1:8000/redoc

这样也能访问,只不过是换了一个api文档

可能很多读者不知道swagger是个啥,其实你可以理解为它是一个api管理和调试的工具箱。

我们编写的api接口都能够通过它来进行管理和调试。

例如下面,我可以直接调用之前写的/ 接口。

swagger的整体UI设计也是非常不错的!

新玩法的引入

有一些细心的朋友可能发现了上面我所写的代码,跟大家平时写的有一点点不同:

代码语言:javascript复制
@app.get("/items/{item_id}")
def read_item(item_id: int, keyword: str):
    return {"item_id": item_id, "keyword": keyword}

主要是在这一行 def read_item(item_id: int, keyword: str):

因为fastapi是一个比较年轻的api框架,创立于2018年12月,距今不到两年。

所以也引入了Python3.6 中比较新的类型提示功能。其实就是使用了pydantic这个库实现的。

这里我引入官网的几张图来给大家直观的看看

我们可以通过声明变量的类型,编辑器和一些工具能给你提供更好的支持。

K哥认为引入这个的目的也是为了fastapi中的fast,让我们的开发更加快!

在官网中也说了高效编码:提高功能开发速度约 200% 至 300%。

关于fastapi的很多特性,我们都会从后面的文章中详细解答,例如它的安全和认证等等。

0 人点赞