Part:1. 本地测试环境
uvicorn就是一个ASGI服务器,可以把你的代码跑在你知道的一个平台上。
ASGI服务器:异步网关协议接口。它是介于网络协议服务和python应用之间的标准接口。就是能够处理多种通用的协议类型,例如:HTTP、HTTP2、WebSocket等。
→1.1 使用方法
首先下载uvicorn
pip install uvicorn
为了测试后面要写的接口,python同样要装个包叫fastapi。
pip install fastapi
→1.2 启动http监听
我们在启动监听时,要用uvicorn先起一个app服务用来监听。举个简单的例子,我们可以在python中写一个简单的main.py如下:
from fastapi import FastAPI # 导入FastAPI
app = FastAPI() # 创建一个app实例
@app.get("/")
def index():
return {"msg": "hello world"}
启动app的监听在teminal中使用如下命令:
uvicorn main:app --reload
输入命令后,终端大概返回如下图所示,监听服务就启动好了。

按照上面这个简单的main.py文件中index()中所表述的功能,我们这时候在浏览器中访问http://127.0.0.1:8000/就能得到如下图所示的结果。

-
这里唯一需要注意的是(如果完全不明白内在逻辑,仅是抄作业的话),启动app的命令中 main对应了main.py的名字,app对应了文件中的语句app=FastAPI()。
→1.3 一个简单的RPC接口功能调用
回想下本地的函数调用形式,比如下面这个例子:
def multiply():
result = 2 * 3
return {"result": result}
print(multiply())
如果本地调用结果很显然会显示multiply这个函数的返回结果就是6。
设想一个场景,我们假设本地没有计算工具,这个multiply的功能在我的服务器上,大家又想用网页实现multiply()这个功能。这个时候就需要RPC接口通过网页调用我服务器上的功能了。也就是说大家不用本地实现,通过网页请求到我实现的功能,达到同样的效果。
换个说法,就是通过这个逻辑,我可以提供一些封装好的服务,用户只需要通过网页请求,就能获得我提供的服务功能。应用场景挺多,比如我做的各种因子数据库,大家可以通过接口拿到我放在云端的数据结果,类似Tushare等等。
那么怎么来实现呢?就这个例子来说,远程访问multiply()可以这样改main.py
from fastapi import FastAPI # 导入FastAPI
import uvicorn
app = FastAPI() # 创建一个app实例
@app.get("/")
def index():
return {"msg": "hello world"}
@app.get("/multiply")
def multiply():
result = 2 * 3
return {"result": result}
我们同样用@app.get(“/multiply”)对multiply进行装饰,而”/multiply”其实就是接口的访问入口。我们在浏览器中刷新测试结果如下:

到这里我们就实现了一个get请求的简单接口。那我们的请求方式不仅是有get。 下面来看个post的例子。
→1.4 post在浏览器中的一个错误返回
先从一个错误的返回来看看post和get的区别。我们在main.py中增加一段代码:
@app.post("/multi_post")
def multi_post():
result = 2 * 3
return {"result": result}
可以看见方法的内容跟之前的multiply是没有区别的。只是这里我们装饰的访问方法变成了post。那么在浏览器中访问的结果是什么样子的呢?如下:

这时候我们可以用浏览器的开发工具,查看一下原因状态码。我们可以看到:

常见的状态码: 1** 正常,可以继续(没有结束); 2** 成功(结束了); 3** 转移,还需要继续; 4** 请求端错误; 5** server端错误。
其实这里请求端的错误原因在于:浏览器并不适合测试post接口,都是get请求。这个时候我们可以在一些专业的接口测试工具中去测试post接口,比如postman等等。

比如说我在专门的接口测试工具Apipost客户端中测试就成功了,看到了我们想要的乘法结果返回{“result”: 6}
时间关系,今天先写这么多。
原文始发于微信公众号(拒绝拍脑袋):接口API开发系列(1)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/54814.html