轻易云集成平台支持使用Python进行适配器与SDK开发。在准备开发之前先需要了解适配器与SDK的一些约定规范。
每个适配器都必须要包含两个方法,分别是:

  • dispatch 调度队列方法
  • handleResponse 对API响应进行处理的方法

在进行python二开时,针对三种方法都有固定的输入、输出参数格式。

dispatch-调度队列方法

调度者主要职责是生成一个正确的API请求参数JSON,然后将这个请求参数放入到源平台队列池中进行排队处理。
1、在python二开dispatch方法中,集成平台会向其输入一个预生成的请求参数JSON变量;
2、二开方法可以对此请求参数JSON变量加工处理之后返回给集成平台;
3、集成平台收到新的请求参数后将放入到队列中进行排队执行;

输入参数

  1. {
  2. // 根据配置生成的请求基本参数
  3. // 以旺店通查询订单为例:https://open.wangdian.cn/qyb/open/apidoc/doc?path=trade_query.php
  4. "request": {
  5. "status": 4,
  6. "start_time": "2022-01-03 12:00:00",
  7. "end_time": "2022-01-03 13:00:00"
  8. },
  9. // 集成平台的配置元数据
  10. "metadata": {
  11. "api": "trade_query.php",
  12. "type": "QUERY",
  13. "method": "POST",
  14. "number": "assNo",
  15. "id": "assId",
  16. "pagination": {
  17. "pageSize": 50
  18. },
  19. "idCheck": true,
  20. "request": [
  21. {
  22. "parent": null,
  23. "label": "开始日期",
  24. "field": "status",
  25. "type": "string",
  26. "value": "4",
  27. "id": "status"
  28. }
  29. ]
  30. },
  31. // 原始数据(只有在目标平台的调度者下才会有)
  32. "source": {}
  33. }

输出参数

api request params json
根据自定义逻辑处理加工后的请求次数,按照输入参数格式要求返还JSON字符串。

示例

  1. #!/usr/bin/python3
  2. import json
  3. # 自定义调度方法,并且返回请求参数
  4. def dispatch(params):
  5. # handle todo
  6. return params;
  7. # 此处为接收集成平台参数的入口位置,不要进行修改
  8. if __name__ == "__main__":
  9. # sys.argv[1]
  10. print(dispatch(sys.argv[1]))

handleResponse-处理API响应的方法

处理响应方法主要是在SDK调用完接口之后,接收响应结果。并对响应的结果进行一些逻辑判断(例如是否响应成功)、对返回的数据进行二次加工。

输入参数

  1. {
  2. // SDK invoke 后接入平台返回的原始响应数据。根据每个平台而不同。
  3. // 以下只是常规示例
  4. "response" : {
  5. "success":true,
  6. "msg":"订单查询成功",
  7. "orderList": [
  8. {
  9. // 具体的数据
  10. }
  11. ]
  12. },
  13. // SDK 发送的请求数据
  14. "request":{
  15. "status": 4,
  16. "start_time": "2022-01-03 12:00:00",
  17. "end_time": "2022-01-03 13:00:00"
  18. },
  19. // 集成平台的配置元数据
  20. "metadata":{
  21. }
  22. }

输出参数

python适配器需要按照固定格式返回的 api response json 。

  1. {
  2. // 返回响应的具体状态,该状态为轻易云定义的逻辑枚举
  3. // 1=>重复的
  4. // 2=>成功的
  5. // 3=>错误的
  6. // 4=>负库存
  7. // 5=>队列中
  8. // 6=>基础资料错误
  9. "status": 2,
  10. // 非必要的
  11. "message": "返回的消息提示" ,
  12. // 如果是一个源平台查询响应,则必须要将查询出来的结果,以数组的方式放入 data
  13. "data": [
  14. ],
  15. // 如果是一个目标平台写入响应,并且该平台有返回写入的主键ID,以数组的方式放入 ids
  16. "ids":[
  17. ]
  18. }

示例

  1. #!/usr/bin/python3
  2. import json
  3. def handleResponse(params):
  4. # handle todo
  5. return params;
  6. # 此处为接收集成平台参数的入口位置,不要进行修改
  7. if __name__ == "__main__":
  8. # sys.argv[1]
  9. print(handleResponse(sys.argv[1]))

SDK-实现

自定义的Python 需要对外暴露两个方法,分别是connect与invoke。

  • connect 用于实现与平台的初始化连接,在该方法中可以处理类似 oauth2.0 认证
  • invoke 用于实现具体的接口调用通用方法,在此方法中实现调用并返回原始的响应数据

    示例

    ```python import hashlib import datetime import calendar import time import urllib import urllib.parse import requests

if name == “main“: func = sys.argv[1] if func == ‘connect’: print( connect(sys.argv[2]) ) else: print( invoke(sys.argv[2],sys.argv[3],sys.argv[4]) )

def connect(connectParams):

  1. # handle connect
  2. return true

def invoke(api,params,method):

# handle invoke 

return response
<a name="xEYEA"></a>
## Python 代码直连基础服务 
在python扩展开发时,经常需要访问一些基础服务,甚至要直接访问mongodb。以下提供了一些快捷方法可以帮助开发提升效率。
<a name="EVXo4"></a>
### 示例
```python
import commonds

status, output = commands.getstatusoutput('php artisan cache:get ????')

php artisan command

命令行 参数 说明
cache:get ? cacheKey 缓存key 从缓存中取出一个值
cache:set ? ? ? cacheKey 缓存key
data 需要缓存的数据
expire 过期时间(非必要,默认8400秒)
设置一个缓存
cache:increment
cache:decrement