安装 FastAPI

pip install fastapi

# 将来需要将应用程序部署到生产环境可以安装 uvicorn 作为服务器
pip install uvicorn

最简单的代码栗子

from fastapi import FastAPI

app = FastAPI()

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

运行 uvicorn 命令,启动服务器

进到 py 文件所属目录的命令行

uvicorn main:app --reload  
  • main:main.py 文件(一个 Python「模块」)
  • app:在 main.py 文件中通过 app = FastAPI() 创建的对象
  • --reload:让服务器在更新代码后自动重新启动,仅在开发时使用该选项

我这里截图的名字换了哈

浏览器访问

http://127.0.0.1:8000 

查看交互式 API 文档

http://127.0.0.1:8000/docs

查看可选的 API 文档

http://127.0.0.1:8000/redoc 

OpenAPI

FastAPi 使用 API 的 OpenAPI 标准为所有 API 生成 schema

schema

  • 是对事物的一种定义或描述
  • 它并非具体的实现代码,而只是抽象的描述
  • 后面会详说

API Schema

  • OpenAPI 是一种规定如何定义 API Schema 的规范
  • 定义的 OpenAPI Schema 将包括 API 路径,以及它们可能使用的参数等等
  • 比如:这个 API 的作用是什么,需要必传哪些参数,请求方法是什么

Data Schema

  • 指的是某些数据比如 JSON 的结构
  • 它可以表示 JSON 的属性及其具有的数据类型
  • 比如:某个属性的数据类型是什么,有没有默认值,是不是必填,作用是什么

JSON Schema

  • OpenAPI 会为 API 定义 API Schema,一般会包括 API 发送和接收的数据的定义,比如:发送的数据的类型、是否必填
  • 这些定义会以 JSON数据格式展示出来,所以都会称为 JSON Schema

查看 openapi.json

原始的 OpenAPI Schema,其实它只是一个自动生成的包含了所有 API 描述的 JSON 数据结构

http://127.0.0.1:8000/openapi.json 

拆分代码详解

from fastapi import FastAPI

app = FastAPI()

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

将上面最简单的栗子代码进行拆开详解

第一步:导入 FastAPI

from fastapi import FastAPI
  • FastAPI 是一个为 API 提供了所有功能的 Python 类,必写就对了
  • FastAPI 是直接从 Starlette 继承的类,可以通过 FastAPI 使用所有的 Starlette 的功能

第二步:创建一个 FastAPI 实例

app = FastAPI()
  • app 就是 FastAPI 类的一个实例对象啦
  • 重点:app 将是创建所有 API 的主要交互对象
  • 要点:uvicorn 执行命令时也会用到 app
uvicorn main:app --reload

app 变量名换一下呢?

from fastapi import FastAPI

my_awesome_api = FastAPI()

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

那么用 uvicorn 运行命令时也需要换

uvicorn main:my_awesome_api --reload

第三步:创建一个路径操作

路径

  • 指的是 URL 中从第一个 / 起的后半部分,即常说的 path
  • 比如:https://example.com/items/foo 的路径就是/items/foo
  • 路径也称为:端点、路由

操作

就是 HTTP 请求方法

  • POST

  • GET

  • PUT

  • DELETE

  • OPTIONS

  • HEAD

  • PATCH

  • TRACE

在 HTTP 协议中,可以使用以上的其中一种(或多种)「方法」与每个路径进行通信

遵守 RESTFul 风格的话

通常使用:

  • POST:创建数据
  • GET:读取数据
  • PUT:更新数据
  • DELETE:删除数据

定义一个路径操作装饰器

@app.get("/")

有两点含义

  • 请求路径为 /
  • 使用 get 请求

其他请求方法的装饰器

  • @app.post()
  • @app.put()
  • @app.delete()
  • @app.options()
  • @app.head()
  • @app.patch()
  • @app.trace()

第四步:定义路径操作函数

async def root():
  • 这就是一个普通的 Python 函数
  • 每当 FastAPI 接收一个使用 GET 方法访问路径为  / 的请求时这个函数会被调用
  • 在这个例子中,它是一个 async 函数(异步处理函数,后面会细说)
# 也可以不加 async,就是个常规函数
def root():

第五步:函数返回内容

return {"message": "Hello World"}
  • 可以返回一个 dict、list,也可以是 str、int 单个值
  • 还可以返回 Pydantic 模型(后面详解)
  • 还可以是其他会自动转换为 JSON 的对象和模型(包括 ORM 对象等)

FastAPI 入门总结

编写一个最简单的 FastAPI 应用程序五部曲

  1. 导入 FastAPI
  2. 创建一个 app 实例
  3. 编写一个路径操作装饰器,如 @app.get("/")
  4. 编写一个路径操作函数,如  def root(): ...
  5. 运行开发服务器,如  uvicorn main:app --reload

FastAPI(2)- 快速入门的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

随机推荐

  1. 关于 pip 的 15 个使用小技巧

    认识pip 众所周知,pip可以对python的第三方库进行安装.更新.卸载等操作,十分方便. pip的全称:package installer for python,也就是Python包管理工具. ...

  2. Spring Cloud 专题之七:Sleuth 服务跟踪

    书接上回: SpringCloud专题之一:Eureka Spring Cloud专题之二:OpenFeign Spring Cloud专题之三:Hystrix Spring Cloud 专题之四:Z ...

  3. Manage sshd Service on CentOS

    Check the current sshd status: service sshd status Start sshd service: service sshd start Set sshd a ...

  4. STM32启动代码分析及其汇编学习-ARM

    STM32 启动代码 Author By YuCloud 边看启动文件边学汇编 汇编 see ARM: Assembler User Guide see: https://blog.csdn.net/ ...

  5. shell——if、case例题

    目录 例题一:检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 例题二:提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果 ...

  6. Linux中的账号权限管理

    一.用户账号和组账号概述 Linux基于用户身份对资源访问进行控制 1.1.用户账号 超级用户:root 用户是 Linux 操作系统中默认的超级用户账号,对本主机拥有最高的权限.系统中超级用户是唯一 ...

  7. SpringCloud-技术专区-从源码层面让你认识Feign工作流程和运作机制

    Feign工作流程源码解析 什么是feign:一款基于注解和动态代理的声明式restful http客户端. 原理 Feign发送请求实现原理 微服务启动类上标记@EnableFeignClients ...

  8. mysqldump备份恢复数据

    //导出数据(多个表以空格间隔)mysqldump -h 127.0.0.1 -uroot -p123456 --default-character-set=utf8 pandora report & ...

  9. DVWA(三):SQL injection 全等级SQL注入

    (本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  10. 【LeetCode】26. 删除有序数组中的重复项

    26. 删除有序数组中的重复项 知识点:数组:排序:双指针: 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度. 不要使用额外的 ...