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 有初步的认识与了解。
领取专属 10元无门槛券
私享最新 技术干货