前言

在开发项目的过程中,我们可能会遇到想要快速开发一个API应用,却不想要去了解Web框架底层运作的原理,只想提供一个可以用网络访问的API服务这种情况。Python无疑是这种快速应用开发最好的选择,而Python的Web框架百花齐放,Django完整而成熟,却太过臃肿;Flask简洁优雅,却难以屏蔽底层细节……这种情况,我们就需要FastAPI出场了。

FastAPI简介

FastAPI是用Node.js写的一个高性能Web服务器框架,提供了对应的Python接口,由于是使用Node.js开发的,所以它的速度比Django或者Flask这种基于Python开发的框架都要快,而且FastAPI非常简单而易于上手,几乎是采用的声明式开发,所以你可以无需考虑其它,而专心的开发你的API接口,FastAPI还自带Swagger(OpenAPI)文档生成,这样你就不用手动写API文档了,FastAPI会自动为你生成,听起来很棒,是吗?那就开始吧!

安装

好的模块从来都是大道至简,只需要一行代码就好:

1
pip install "fastapi[all]"

解释一下,这是pip的一个高级用法,平时我们都是pip install xxx,这样只会安装xxx这个库,有可能xxx的依赖库没有安装到,而pip install "xxx[all]"代表安装xxx及xxx的所有依赖库。所以,通过上述代码我们安装了fastapi及其所有依赖库(主要是uvicorn)。

HelloWorld

示例

看到这眼熟的大字标题,你应该明白我要讲什么了。是的,所有新知识都是从一行HelloWorld开始的,不管你是在开发一个惊天动地的大工程还是一个微不足道的小测试。闲话少说,上代码:

1
2
3
4
5
6
7
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
return {"message": "Hello World"}

解释一下这些代码的用途,会Flask的小伙伴们应该感觉很熟悉。

1
from fastapi import FastAPI

这一行很简单,我们从fastapi这个库中导入了FastAPI这个类,这个类即将在下面用到。

1
app = FastAPI()

这也很简单,我们实例化了一个FastAPI对象并命名为app。

1
2
3
@app.get("/")
async def root():
return {"message": "Hello World"}

这三行我们需要连在一起解释。首先,@app.get("/")这是Python独有的语法——装饰器,装饰器是什么我在这里不过多的描述了,以后我会写一篇文章专门讲解的。简单来说,对于装饰器的理解可以望文生义,就是用来装饰一个函数的功能的,也就是给函数增加一些新功能,在此处,它是用来声明下面的函数对应的路由的。此处的app是我们上面实例化好的对象,getapp的一个方法,用来声明这个API是通过get方法请求的,如果需要其他方法,直接将get改为其它的HTTP方法,如post或者put就可以了。这里get方法的参数是"/",这里/代表根目录,也就是通过get方法访问根目录,就会执行下面的函数,并返回一个值。

第二行async def root(),定义一个名为root的函数,后面的def root()很容易理解,前面的async不用过多的理解,只需要理解为这是fastapi必须的语法就够了,我们以后会说明它的用处的。

第三行return {"message": "Hello World"}很简单吧,就是返回一个字典格式的数据。键为message,值为Hello World

这样,我们就写好了自己的第一个FastAPI程序,并且完全理解了它,怎么样,是不是很有成就感?

运行

写好了程序,我们需要运行它。FastAPI程序的运行有些特别,并不是直接运行main.py文件,而是:

1
uvicorn main:app --reload

这里的unicorn已经在安装FastAPI的时候安装了,运行后,终端会出现以下输出:

1
2
3
4
5
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

这里的输出告诉我们:FastAPI已经在http://127.0.0.1:8000运行着了,按下CTRL+C可以终止运行。

这时候,我们通过浏览器访问http://127.0.0.1:8000,就可以看到如下的 JSON 响应:

1
{"message": "Hello World"}

这就代表,我们的第一个程序成功了!!!

如果我们访问http://127.0.0.1:8000/docs,你就可以看到如下界面:

Swagger UI

这就是Swagger(OpenAPI)自动为我们生成的API文档,非常详细,还有自动测试,以后再也不用自己写文档啦!

最后,解释一下运行的命令的含义,这里的main:app是制定FastAPI应用的,main是**.py文件名,我们的是main.py,所以是mainapp就是程序里面实例化的FastAPI的名字,--reload代表每次修改main.py**文件里的内容后不用重启服务器,只需要保存更改,就会自动识别,然后自动修改服务器的响应,非常智能好用。

总结

这一篇文章,我带大家入门了FastAPI的开发,大家也感受到了FastAPI的简洁与方便,以后我还会更新相关文章,敬请期待。