研究背景:

通过python语言,书写相关的算法接口,供本部门和别的部门相关同事调用实现相关功能,完成不同部门之间的工作合作。

问题描述:

不知道如何写接口,也不了解如何测试接口,调用接口。

原因分析:

第一次用python去写接口,对接口概念不是很了解,也不知道如何去写接口。

解决方案:

1.参考公司已拥有python接口代码,了解该接口使用的框架,最终确定使用uvicorn框架。

2.向研究微服务的同仁请教接口的测试方法,得知接口自带的测试方法如下:http://192.168.196.89:8080/docs#/。IP和端口可以根据自己实际书写的接口改变。

Uvicorn相关知识:

uvicorn 简介是一个基于 asyncio 开发的一个轻量级高效的 web 服务器框架。是基于 uvloop 和 httptools 构建的非常快速的 ASGI 服务器,官网链接:http://www.uvicorn.org

uvloop和httptools:

  • uvloop 用于替换标准库 asyncio 中的事件循环,使用 Cython 实现,它非常快,可以使 asyncio 的速度提高 2-4 倍。
  • httptools 是 nodejs HTTP 解析器的 Python 实现。
  • asyncio 是高性能异步模块,写异步代码离不开它。

uvicorn 初衷:

  1. 使用 uvloop和 httptools实现一个极速的 asyncio 服务器。
  2. 实现一个基于 ASGI(异步服务器网关接口)的最小的应用程序接口。

uvicorn 支持类型:目前支持 httpwebsocketsPub/Sub 广播,并且可以扩展到其他协议和消息类型。

uvicorn 安装: pip3 install uvicorn 或 pip install uvicorn     注意:uvicorn 目前仅支持 python 3.5.3 以上版本。

uvicorn 内部构造查看:

版本信息、依赖信息、内部函数信息
 

uvicorn代码测试: 

uvicorn安装成功后。就可以来编写我们的服务器应用代码了。先创建一个应用文件 app.py(名字可以自取),在这个文件中,来编写一个简单的服务器应用。

这里涉及到协程和异步,参考:https://www.cnblogs.com/xinghun85/p/9937741.htmlhttps://zhuanlan.zhihu.com/p/27258289

# coding:utf-8

async def hello_world(message, channels,a):
    content = b'<h1>Hello World</h1>'
    resp = {
         'status': 200,
         'headers': [[b'content-type', b'text/html'],],
         'content': content,
     }
    await channels['reply'].send(resp)

代码运行:uvicorn app:hello_world  (运行方式: uvicorn文件名:callable对象名

出现以下结果表示服务运行成功:

[32mINFO[0m:     Started server process [[36m2316[0m]
[32mINFO[0m:     Waiting for application startup.
[32mINFO[0m:     ASGI 'lifespan' protocol appears unsupported.
[32mINFO[0m:     Application startup complete.
[32mINFO[0m:     Uvicorn running on [1mhttp://127.0.0.1:8000[0m (Press CTRL+C to quit)

或者参考截图:

浏览器访问:

在后台服务开启的前提下,我们在任意浏览器中访问 http://127.0.0.1:8000, 网页上若显示出 h1 号字体的 Hello World,也就是我们代码中定义的 content 的字符串内容表示运行成,否则就运行失败。

经测试报错:

前台错误
服务端错误

 

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐