1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Python 快速使用 REST API

Python 快速使用 REST API

时间:2019-01-04 05:22:12

相关推荐

Python 快速使用 REST API

后端开发|Python教程

Python

后端开发-Python教程

公告PHP源码,vscode手机运行,ubuntu扩容home,tomcat依赖怎么加,sqlite数据库创建工具,一帆风顺盆里有爬虫怎么办,64位系统 php,专业短视频seo排名,ps企业网站模板,js广告漂浮模板lzw

asp婚纱摄影网站源码,vscode终止当前程序,如何ubuntu 版本,用命令停止tomcat,爬虫网址设置,php 轻量框架,杭州seo测试公司实力强,站长之家学校网站系统,炫酷导航页面模板下载lzw

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

Barcode源码,vscode打开网页慢,ubuntu 双击,tomcat连接池监控,sqlite 新闻,网页设计大赛作品源码,sql数据库查询网站模板,怎么查看服务器日志,jquery 自动滚动插件,reactive前端框架,xml爬虫,php屏蔽错误,上海seo优化服务,springboot后台项目,discuz自定义数据标签,酷炫个人网站源码,元素周期表 网页,旅游扁平化设计网站模板,兼容ie7的后台模板,h5 上滑页面,学生管理系统web源码,自己写有限元程序lzw

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

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

入门

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

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

pip install fastapi uvicorn

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

from fastapi import FastAPIapp = 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仅被定义为一个没有QueryPath的整数;这意味着它将在POST请求正文中。如果您接受更复杂的数据结构,例如JSON数据,则应研究请求模型。

请求和响应模型

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

只需像这样声明模型:

from pydantic import BaseModelclass 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 __。py

from fastapi import APIRouterfrom .user import router as user_routerrouter = APIRouter()router.include_router( user_router, prefix=/user, tags=[users],)

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

from fastapi import APIRouterrouter = 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 FastAPIfrom app.routers import v1app = FastAPI()app.include_router( v1.router, prefix="/api/v1")

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

Dockerizing and Deploying

Fastapi 的作者使出乎意料的轻松之一就是 Dockerizing!默认的Dockerfile是2行!

FROM tiangolo/uvicorn-gunicorn-fastapi:python3.7COPY ./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教学

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。