django■6行代码创建一个API服务,FastAPI入门简介( 二 )


uvicorn main:app --reload

这条命令的意思是用uvicorn启动当前目录下main.py这个文件里的app实例 , 加上reload的意思是文件内容变更后自动重启服务 , 便于开发调试 。
演示结果如下 , 用浏览器访问本地回环地址127.0.0.1加8000端口即可:
怎么样 , 写一个API接口是不是很方便?现在我们来解析一下代码 。

  1. from fastapi import FastAPI 用于导入 FastAPI类库 。
  2. app = FastAPI()用于实例化 FastAPI类 , 通常app这个变量会设置成全局的 , 至少在当前模块作用域有效 。
  3. @app.get(\"/\")是一个装饰器 , 在这里的作用是将普通的Python函数变成一个get请求接口 (\"/\")表示url是根目录主页 。
  4. 至于函数里的代码就很好理解了 , 定义了一个函数 , 然后return 了一个字典 , 表示接口被访问时默认会返回一个JSON格式的数据回去(当然也可以return别的数据格式 , 例如字符串、列表等) 。
FastAPI第一个例子现在我们来写一个稍微完整的例子 , 包含GET、POST、PUT方法的接口程序 。
前面我们讲到 , 可以用 @app.get(\"/\")定义一个GET请求方法 , 那么如何定义POST、PUT等请求方法呢?
最简单的方法是下面这种 , 写相同名称的函数 , 用不同的装饰器处理即可 。
@app.get(\"/\")
def fun1():
return {

@app.post(\"/\")
def fun1():
return {

@app.put(\"/\")
def fun1():
return {

如果嫌以上这种方法太麻烦 , 还有另外两种更简练的写法 。
@app.get(\"/\")
@app.post(\"/\")
@app.put(\"/\")
def fun1():
return {

@app.api_route(\"/items/\" methods=[\"get\" \"post\" \"put\"
)
def items():
return {

以上两种方法都是可行的 , 不过需要做好针对不同的请求方法进行不同的处理 , 这部分知识我们以后再讲 。
现在我们先来定义一个GET方法并接受客户端的请求参数 , 然后输出到页面上 。
from fastapi import FastAPI

app = FastAPI()


@app.get(\"/items/\")
def items(item_id q):
return {
\"item_id\": item_id
\"q\": q


这个例子很简单 , items这个接口接受了客户端两个参数的值:item_id和q 。 然后作为一个 JSON格式的数据把这两个值返回给客户端 。
需要注意的是 , 如果我们在 items函数里定义了item_id和q这两个参数名之后 , 那么这两个参数在浏览器上是必须要传的 , 缺一不可 , 否则就会提示缺少参数 。
以上就是参数缺少一个的时候FastAPI自动爆出来的错误信息 。
如果我们需要让某些参数变成非必填项的话 , 可以这样函数的参数设置一个默认值为None 。
from fastapi import FastAPI

app = FastAPI()


@app.get(\"/items/\")
def items(item_id=None q=None):
return {
\"item_id\": item_id
\"q\": q


现在items这个接口的参数就可以接受非必填的情况了 。
FastAPI自动文档介绍最后说说关于文档自动生成这一块 , 很多后端程序员写完程序后都懒得写接口文档 , 或者是接口经常发生变化 , 来不及更新文档 , 最初都是程序手写文档 , 还需要考虑各种排版和格式问题 。 前几年有像swagger之类的工具出现 , 大家可以在代码里定义好注释 , 然后swagger可以自动帮我们生成一个接口文档服务 , 提供给别人查看和测试 。
到现在 , FastAPI甚至连注释也不让我们写了 , 直接就根据已知的接口生成文档(基于swagger或其他工具) , 让程序员可以越来越懒 。
我们直接访问/docs这个地址即可查看自动生成好的接口文档 。