最近一直在研究一个新的 Python 语言的API,在一位同事的建议下,我们决定使用 Fastapi 作为我们的框架。

Fastapi是一个基于python的框架,该框架鼓励使用Pydantic和OpenAPI(以前称为Swagger)进行文档编制,使用Docker进行快速开发和部署以及基于Starlette框架进行的简单测试。

它提供了许多好处,例如自动OpenAPI验证和文档编制,而无需添加不必要的膨胀。我认为,在不提供任何内置功能与提供太多内置功能之间取得很好的平衡。

入门

安装 fastapi 和 ASGI 服务器(例如uvicorn):

确保您使用的是Python 3.6.7+ 如果 pip 和python 给您python 2版本,则可能必须使用 pip3 和 python3 。另外,请查看我关于python入门的文章。pip install fastapi uvicorn

并在main.py文件中添加旧的“ hello world”:from fastapi import FastAPI

app = FastAPI()

@app.get("/")

def home():

return {"Hello": "World"}

运行开发

然后运行以进行开发,可以运行uvicorn main:app --reload

这就是简单服务器要做的全部!现在您可以检查 //localhost:8000/ 以查看“主页”。而且,如您所见,JSON响应“正常工作”!您还可以通过 //localhost:8000/docs 免费获得Swagger UI。

验证

如前所述,很容易验证数据(并为接受的数据格式生成Swagger文档)。只需从fastapi添加Query导入,然后使用它来强制验证:from fastapi import FastAPI, Query

@app.get('/user')

async def user(

*,

user_id: int = Query(..., title="The ID of the user to get", gt=0)

):

return { 'user_id': user_id }

第一个参数...是默认值,如果用户不提供值则提供该默认值。如果设置为None,则没有默认值,并且该参数是可选的。为了没有默认值并且该参数是强制性的,请使用Ellipsis ,或...代替。

如果运行此代码,则会在swagger UI上自动看到更新:

Swagger UI允许您查看新的/ user路由并使用特定的用户ID进行请求

如果您输入任何用户ID,您会看到它会自动为您执行请求,例如 //localhost:8000/user?user_id=1。在页面中,您只能看到回显了用户ID!

如果要改为使用路径参数(以使其为 /user/1,则只需输入并使用Path而不是Query。也可以结合两者

Post 路线

如果您有POST路由,则只需定义输入即可@app.post('/user/update')

async def update_user(

*,

user_id: int,

really_update: int = Query(...)

):

pass

在这种情况下,您可以看到user_id仅被定义为一个没有Query或Path的整数;这意味着它将在POST请求正文中。如果您接受更复杂的数据结构,例如JSON数据,则应研究请求模型。

请求和响应模型

您可以使用Pydantic模型记录并声明详细的请求和响应模型。这不仅可以让您拥有所有模型的自动OpenAPI文档,而且还可以验证请求模型和响应模型,以确保输入的任何POST数据都是正确的,并且返回的数据也符合该模型。

只需像这样声明模型:from pydantic import BaseModel

class User(BaseModel):

id:: int

name: str

email: str

然后,如果您希望将用户模型作为输入,则可以执行以下操作:async def update_user(*, user: User):

pass

或者,如果您要将其用作输出:@app.get('/user')

async def user(

*,

user_id: int = Query(..., title="The ID of the user to get", gt=0),

response_model=User

):

my_user = get_user(user_id)

return my_user

路由和分解更大的API

您可以使用APIRouter将api分解为路由。例如,我已经在我的 API 中找到了这个app / routers / v1 / __ init __。pyfrom fastapi import APIRouter

from .user import router as user_router

router = APIRouter()

router.include_router(

user_router,

prefix='/user',

tags=['users'],

)

然后您可以在app / routers / v1 / user.py中使用上面的用户代码-只需导入APIRouter并使用@ router.get('/')< aaaa>而不是 @ app.get('/ user')。它会自动路由到 / user / ,因为该路由是相对于前缀的。from fastapi import APIRouter

router = APIRouter()

@router.get('/')

async def user(

*,

user_id: int = Query(..., title="The ID of the user to get", gt=0),

response_model=User

):

my_user = get_user(user_id)

return my_user

最后,要在应用程序中使用所有v1路由器,只需将main.py编辑为:from fastapi import FastAPI

from app.routers import v1

app = FastAPI()

app.include_router(

v1.router,

prefix="/api/v1"

)

您可以通过这种方式随意链接路由器,从而允许您拆分大型应用程序并拥有版本化的API。

Dockerizing and Deploying

Fastapi 的作者使出乎意料的轻松之一就是 Dockerizing!默认的Dockerfile是2行!FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7

COPY ./app /app

是否想通过自动重新加载进行 Dockerize 开发?这是我在撰写文件中使用的秘方:version: "3"

services:

test-api:

build: ..

entrypoint: '/start-reload.sh'

ports:

- 8080:80

volumes:

- ./:/app

这会将当前目录挂载为app并将在任何更改时自动重新加载。您可能还想将app / app用于更大的应用程序。

有用的网址

所有这些信息都来自 Fastapi网站,该文档具有出色的文档,我鼓励您阅读。此外,作者在 Gitter 上非常活跃并乐于助人!

结论

就是这样-我希望本指南对您有所帮助,并且您会像我一样喜欢使用 Fastapi。

以上就是Python 快速使用 REST API的详细内容,更多请关注php中文网其它相关文章!

本文转载于:learnku,如有侵犯,请联系a@php.cn删除

python rest api_Python 快速使用 REST API相关推荐

  1. Python Qt GUI快速编程第六章代码分析

    这是我敲的Python Qt Gui快速编程第六章上的代码,以后可能要用到其中一些,如果忘记了就来这里看看. #coding=utf-8 #d import os import platform im ...

  2. Python深度学习-快速指南

    Python深度学习-快速指南 (Python Deep Learning - Quick Guide) Python深度学习-简介 (Python Deep Learning - Introduct ...

  3. python获取文件夹大小_S3 API for python–创建bucket文件夹统计文件夹大小

    最近一直在跟S3打交道,但是苦于java不会,python懂一点,API这个东东经常听也知道是啥,但是没有实际根据API文档去进行相关开发的经历,所以前期一直很忐忑,都是找别人帮忙写好特定功能的程序, ...

  4. 基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别)

    基于Python的百度AI人脸识别API接口(可用于OpenCV-Python人脸识别) 资源: download.csdn.net/download/weixin_53403301/43644312 ...

  5. 【Python零基础快速入门系列 | 03】AI数据容器底层核心之Python列表

    • 这是机器未来的第7篇文章 原文首发地址:https://blog.csdn.net/RobotFutures/article/details/124957520 <Python零基础快速入门 ...

  6. 新书推荐 |《机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序》...

    新书推荐 <机器学习即服务:将Python机器学习创意快速转变为云端Web应用程序> 点击上图了解及购买 谷歌云和Salesforce首选合作伙伴SpringML数据科学副总裁领衔撰写,讲 ...

  7. Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云)

    Python零基础速成班-第12讲-Python获取网络数据Socket,API接口,网络爬虫Crawler(制作弹幕词云) 学习目标 获取网络数据Socket API接口 网络爬虫Crawler(制 ...

  8. 【Python数据科学快速入门系列 | 06】Matplotlib数据可视化基础入门(一)

    这是机器未来的第52篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/126899226 <Python数据科学快速入 ...

  9. python使用heapq快速查找最大或最小的 N 个元素

    python使用heapq快速查找最大或最小的 N 个元素 heapq实现了一个适合与Python的列表一起使用的最小堆排序算法. 堆是非线性的树形的数据结构,有两种堆,最大堆与最小堆.( heapq ...

最新文章

  1. 在Ubuntu 16.04.3 LTS上运行go install出错的问题
  2. Ext.Msg.alert要注意的问题
  3. 发表的原创文章还希望大家多提宝贵意见!
  4. 计算机学院开展活动,团学会 | 以梦为马,不负韶华 计算机学院开展“逐梦100”活动(一)...
  5. 详解XStream别名
  6. win7未启用计算机远程访问,Win7系统下连接远程提示未启用对服务器的远程访问如何解决...
  7. 携程发布2021年一季度财报:净利润环比增长近80% 达18亿元人民币
  8. macosx php环境,MacOSX环境下MAMP安装配置PHP的开发环境
  9. collectors 求和_Java-Collectors常用的20个方法
  10. Java:String和Date、Timestamp之间的转换
  11. CSS优先级、CSS选择器、编写CSS时的注意事项
  12. PHP 安装SSH2扩展 Centos
  13. Java-Lambda表达式第一篇认识Lambda表达式
  14. 2022-2028全球食品和饮料行业热转印设备行业调研及趋势分析报告
  15. 使用SoftEther 上免费校园网(ipv6)
  16. dell 2420 bios 降级文件,可以用回独立显卡
  17. 中标麒麟Linux能运行wine吗,中标麒麟V6下wine完美运行通达信
  18. this的三种用法 详解
  19. python绘制正态分布图_用python制作正态分布图
  20. 女人要优雅,男人要幽默

热门文章

  1. mysql 全盘扫描_mysql explain 正常,但是实际上是全盘扫描
  2. 【课程·研】高级人工智能 | MOOC习题及课后作业:第1~3章
  3. 本地部署Jellyfin影音服务器【公网远程影音库】
  4. 【Kafka生产者发消息流程】
  5. 如何用一部手机输出视频内容
  6. javaSE/ javaEE/ javaME
  7. 企业文化对企业战略的意义
  8. Hexo搭建Github-Pages博客填坑教程
  9. python爬虫爬取豆瓣读书
  10. 常用各height的区别