首页
学习
活动
专区
工具
TVP
发布

Python 快速搭建 RESTful API

RESTful  是什么?

RESTful 是一种网络应用程序的开发方式或设计风格,基于 HTTP 网络协议,可以使用 XML 或 JSON 格式定义,目前使用最多的是 JSON 格式,因为它相比 XML 体积更小,传输速度更快,承载内容更多。

RESTful  应用场景

RESTful  开发方式大多应用在前端和后端开发分离的环境中,前端和后端分离带来的最大好处就是项目耦合度得到降低,前端通过 RESTful  API 接口服务完成对数据的增删改查,也就是常说的对数据库的 CRUD

在 Python 中如何实现快速高效地开发 RESTful API 呢?

在 Python 中有很多 RESTful Web 框架,如 Django REST framework,Flask-RESTful 等等。

Django REST framework 是一个功能强大且灵活的 REST Web API 框架,包含 OAuth1a、OAuth2身份验证策略,支持 ORM 和非 ORM 数据源的序列化,使用基于函数的常规视图实现自定义你所需要的功能,有广泛的文档资料和社区支持。

Flask-RESTful 是一个非常轻量级,能够快速上手的 RESTful Web API 框架。可以快速搭建并运行完成一个  RESTful  API 服务。相对于 Django REST framework 是比较轻量级的 RESTful API 框架。

那还有比这俩框架更好用,更容易上手的 RESTful  API 框架吗?

答案是 FastAPI ,从 FastAPI 的名字就可以看出,FastAPI 最大的特点那就是快,上手快,运行速度更快,到底有多快,接下来我们一起来探究下。

FastAPI 是一个高性能的异步Web框架,具有并发性能强、容错性能强,快速上手,自动生成交互式文档,堪称目前最快最高效的 Web 框架。

首先安装  FastAPI 和相关的运行环境

pip install fastapi,运行命令安装 FastAPI,如下图,表示安装成功。

pip install uvicorn,安装 uvicorn Web 服务框架。Uvicorn 一个基于 asyncio 开发的一个轻量级高效的 Web 服务器框架,Uvicorn 设计的初衷是使用 uvloop 和 httptools 实现一个极速的 asyncio 服务器;实现一个基于 ASGI(异步服务器网关接口)的最小的应用程序接口。

在 PyCharm 中新建一个 Python 项目

新建一个 main.py 文件,编写 RESTful  API 服务。在 .NET Core 或 Java 中,创建一个接口,通常命名为 xxxController,比如 UserController。当然,这只是一种命名方式,如果你喜欢这样命名,这也可以这样命名。

# 根目录@app.get("/")def read_root(): return {"Hello": "World"}

# 获取 item@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}

# 添加 item@app.post("/add_item")def add_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}

# 删除 item@app.delete("/delete_item")def delete_item(item_id: int): msg = str(item_id) + "删除成功" return {msg}

在 main.py 中,简单实现四个接口,看看运行完成后是什么样。

在 PyCharm 控制台 cd 到 main.py 目录中,输入命令 uvicorn main:app --reload 运行 FastAPI,显示如下信息,表示运行完成。在浏览器中打开 127.0.0.1:8080 查看运行完成后的 Fast API。

运行结果如下。当我第一次运行完成后,我有点怀疑这是不是真的,是不是我在浏览器中输入的链接地址错误了。因为我对 Swagger 不管在 .NET Core 或 Java 中都没有这么简单,在这里,我基本没有对 Swagger 文档做任何配置,就可以显示一个 API 文档了。这样一来,又帮助开发者节约了一部分时间,在开发中,最浪费时间的工作就是在这种开发环境配置。

自定义 OpenAPI

在上图中,可以看到,API 标题,API 描述、版本等信息都修改成了我这边测试的信息,怎么修改的呢?

直接贴代码

def custom_openapi(): # 判断缓存 if app.openapi_schema: return app.openapi_schema openapi_schema = get_openapi( title="我的 FastAPI", version="1.0.0", description="API 描述", routes=app.routes, ) openapi_schema["info"]["x-logo"] = { "url": "https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" } # 将 .openapi_schema 用作缓存,存储生成的模式,这样,避免每次打开文档时都去重新生成 # 它只会生成一次。 app.openapi_schema = openapi_schema return app.openapi_schema

当然,还有很多相关的自定义,这里就不一一讲解了。

下面给大家介绍一个比较好用的功能

本地断网情况下继续使用 OpenApi

首先,安装 aiofiles 库,执行命令 pip install aiofiles

然后在本地项目中新建一个存放资源文件的文件夹,放入这三个资源文件,资源文件可以通过 FastAPI 官方网站上获取,也可以私信我获取。

导入相关的包,和配置 static 目录,

docs 页面配置

配置完成后重新运行项目,断开网络连接,你会发现在没有网络连接的情况下也居然可以访问我们写好的 RESTful  API,这个特点在内部封闭式开发中或突然断开网络连接情况下,是非常友好的一个功能。

FastAPI 非常强大,还有很多好的功能等着我们去发现和使用,希望本篇文章能让你对 FastAPI 有初步的认识与了解。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200514A0RTS500?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券