一个用于快速创建restapi客户端的库。

microclient的Python项目详细描述


微客户机

Microclient是一个库,用于为restapi构建简单的python客户机。在

基本用法:

frommicroclientimportBaseClient,EndpointInfoclassZOOClient(BaseClient):service_name='ZOO API'endpoints=[EndpointInfo("animals",[EndpointInfo("cats","GET"),EndpointInfo("dogs","GET"),EndpointInfo("elephants","GET"),]),EndpointInfo("zoo-status","GET"),EndpointInfo("tickets","GET, POST, DELETE")]

也就是说客户是这样的:

^{pr2}$

目前,可以在客户端初始化时通过Auth Token进行授权:

zoo_client=ZooClient('http://localhost:8000',auth='some_token')

令牌将被附加到每个请求头。默认情况下,授权头前缀是Token,但可以这样设置:

zoo_client=ZooClient('http://localhost:8000',auth='some_token',auth_prefix="Bearer")

将发送如下标题: "Authorization": "Bearer some_token"

回应

在微客户机上调用的每个端点都将返回LazyResponse对象,顾名思义,它是延迟加载的。Lazy Response有三个最重要的主要属性: data(最好是JSON响应数据,但在解码失败时将回退到字节字符串内容)、status(整数状态代码)和{}(响应头)。在

目前微客户机只处理json数据(请求和响应)。在

测试

如果您想在不实际调用底层API的情况下对客户机进行单元测试,请使用LazyResponse属性检查发送的端点、方法和数据是否正确。 示例:

zoo_client=ZooClient('http://localhost:8000')response=zoo_client.animals.cats()print(response.url,response.method,response.request_data)# http://localhost:8000/animals/cats, GET, None response=zoo_client.tickets.post(data={'amount':2})print(response.url,response.method,response.request_data)# http://localhost:8000/tickets, POST, {'amount': 2}

取消通知:

在以前版本的微客户机中,您还可以使用debug测试相同的东西,在实际调用和测试客户机之间切换。 示例:

zoo_client=ZooClient('http://localhost:8000')zoo_client.debug=Trueprint(zoo_client.animals.cats())# (http://localhost:8000/animals/cats, GET, None) print(zoo_client.tickets.post(data={'amount':2}))# (http://localhost:8000/tickets, POST, {'amount': 2})

但是,debug属性从版本1.0开始将不可用(可能在几个月内),建议切换到LazyResponse方法。在

标题

标题可以附加在4个级别上:

  • 全局-将附加到此客户端发出的每个请求:
classZOOClient(BaseClient):service_name='ZOO API'global_headers={"Content-Type":"application/*"}endpoints=[EndpointInfo("animals","GET")]
  • 在一组端点上:
classZOOClient(BaseClient):service_name='ZOO API'endpoints=[EndpointInfo("animals",[EndpointInfo("cats","GET"),EndpointInfo("dogs","GET"),EndpointInfo("elephants","GET"),],headers={"Content-Type":"application/*"}),# Every endpoint inside 'animals' will append these headers ('animals' itself included)]
  • 在单个端点上:
classZOOClient(BaseClient):service_name='ZOO API'endpoints=[EndpointInfo("animals",[EndpointInfo("cats","GET",headers={"Content-Type":"application/*"}),EndpointInfo("dogs","GET"),EndpointInfo("elephants","GET"),]),]
  • 一次请求:
zoo_client=ZooClient('http://localhost:8000')response=zoo_client.animals.cats(headers={"Content-Type":"application/*"})

变更日志

v0.7.4版:

  • 日志记录会截断长字符串(url除外),因此不会淹没控制台。在

v0.7.3版:

  • 仅在like params格式设置为固定值时提供like params。例子: {"param1": None, "param2": ''}) -> ''。以前是{"param1": None, "param2": ''}) -> '?'

v0.7版:

  • 添加了对单个请求、单个端点、内部端点(端点组)和客户端全局的标头支持。在
  • 为每个请求添加了定时诊断(在LazyResponse中的request_time属性中提供)
  • 修正了IDE可能指出resource_id参数必须是str的错误。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java随机填充2d数组   java运行时。getRuntime。带有长参数的exec(cmd)   java Minecraft无法放置自定义背景   java AChartEngine YAxis自定义标签区域边距和图表值为字符串?   泛型类的java类型安全错误   整数的java符号等价物。toBinaryString方法?   Java中数组列表的数组   java WebView应用程序在谷歌登录后显示空白屏幕   java从backback中删除特定片段   如果服务器不支持使用的协议,java JSSE是否实现回退?   java Sonarqube正在进行核心漏洞查找。如何解决   javajavax。jcr。UnsupportedPositionOperationException:testVersionable处的节点不可版本化   java在安卓中每隔X小时运行一次文件/函数,无需打开应用程序   java如何为磁盘持久性配置BigMemory?   java BufferWriter不转换383以上的整数   Java7交集类型:规范具体说明了什么?   Java:CollectionHow创建多列   java如何检测运算符的空白   java问题:在firebase中为导航栏中的第二个表单提交数据第一个表单工作正常。实际isse是连接Mainactivity中的另一个活动