接口API开发系列(1)

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

输入命令后,终端大概返回如下图所示,监听服务就启动好了。

接口API开发系列(1)
uvicorn启动服务

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

接口API开发系列(1)
测试监听结果hello world
  • 这里唯一需要注意的是(如果完全不明白内在逻辑,仅是抄作业的话),启动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”其实就是接口的访问入口。我们在浏览器中刷新测试结果如下:

接口API开发系列(1)
简单的RPC远程调用测试

到这里我们就实现了一个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。那么在浏览器中访问的结果是什么样子的呢?如下:

接口API开发系列(1)
并没有出现我们想要的乘法结果

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

接口API开发系列(1)
405错误

常见的状态码: 1** 正常,可以继续(没有结束); 2** 成功(结束了); 3** 转移,还需要继续; 4** 请求端错误; 5** server端错误。

其实这里请求端的错误原因在于:浏览器并不适合测试post接口,都是get请求。这个时候我们可以在一些专业的接口测试工具中去测试post接口,比如postman等等。

接口API开发系列(1)
post不适合在浏览器中测试

比如说我在专门的接口测试工具Apipost客户端中测试就成功了,看到了我们想要的乘法结果返回{“result”: 6}接口API开发系列(1)

时间关系,今天先写这么多。


原文始发于微信公众号(拒绝拍脑袋):接口API开发系列(1)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/54814.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!