前言
我有一个很棒的服务想分享给别人用,但是因为对方的环境和我不一样,当然不能再花时间和精力装环境咯,而且假如我的服务是运行在4090上的,软件环境好解决,可是硬件环境。。。
说了这么多,可见API的重要性。何为API?如果你在百度百科上搜索,你会得到如下结果:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。通俗一点说,用户可以将自己的服务封装,向外部提供一个接口,然后别人可以通过接口使用你的服务,大大节省了时间和精力。
一、FastAPI库介绍
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.8+ based on standard Python type hints.
什么,看不懂英文?👉🏻https://fanyi.baidu.com/
不管学什么语言,都应该至少掌握一个框架,方面我们后续,进行服务部署、服务对外支持等
FastAPI的优势:
- 快速:可与 NodeJS 和 Go 并肩的极高性能(归功于
Starlette 和 Pydantic
)。最快的 Python web 框架之一。- 高效编码:提高功能开发速度约 200% 至 300%。
- 更少 bug:减少约 40% 的人为(开发者)导致错误。
- 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
- 简单:设计的易于使用和学习,阅读文档的时间更短。
- 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
- 健壮:生产可用级别的代码。还有自动生成的交互式文档。
- 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为
Swagger
) 和 JSON Schema。
二、启动一个ASGI服务器:
你还会需要一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn。
pip install "uvicorn[standard]"
编辑test.py
测试文件
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
启动服务器:
uvicorn test:app --reload
PS:可以设置端口和HOST:
uvicorn test:app --reload --port 3359 --host 0.0.0.0
使用浏览器访问: http://127.0.0.1:8000/items/5?q=somequery
会看到如下JSON响应:
{"item_id": 5, "q": "somequery"}
你已经创建了一个具有以下功能的 API:
- 通过 路径 / 和 /items/{item_id} 接受 HTTP 请求。
- 以上 路径 都接受 GET 操作(也被称为 HTTP 方法)。
- /items/{item_id} 路径 有一个 路径参数 item_id 并且应该为 int 类型。
- /items/{item_id} 路径 有一个可选的 str 类型的 查询参数 q。
三、交互式API文档:
现在访问 http://127.0.0.1:8000/docs
你会看到自动生成的交互式 API 文档(由 Swagger UI生成)
SwaggerUi风格文档:
http://127.0.0.1:8000/docsReDoc风格文档:
http://127.0.0.1:8000/redoc
- 如何关闭文档生成?
如果不想生成交互式文档,可以通过以下方式实例化FastAPI
:
# docs_url=None: 代表关闭SwaggerUi
# redoc_url=None: 代表关闭redoc文档
app = FastAPI(docs_url=None, redoc_url=None)