最近写了个指令模块,在这:OrangeRedSeaweed/sdk/instructs
这个是用于规定API的格式和简化API请求,减少API数量用的
它可以使开发者通过一个请求就可以执行多条指令,并且进行指令合理性检查还有指令之间依赖关系的规定
从而可以减少请求API使用的SDK的数量,减少代码的臃肿程度,是OrangeRedSeaweedAPI的第二个标准
建立在第一个标准之上的更高效的方式,更有利于减少请求的数量,保证程序运行的效率
因为执行指令通常用来操作数据,所以执行指令大部分都需要登录,但是也不排除使用指令查看数据的情况
建立 instructs_API
可以参考mod:free_other main.py 里面的做法
import sdk.instructs.api_func as instructs_api_func
import mod.mods.free_other.instructs_func as instructs_func
def instruct(get_or_post, enable_session, rep, **para):
instruction_name_list = ['Pulling','SubmitToDatabase','AdministratorVerification','get_data','change']
instruction_func_list = instructs_func
dependency_table = {
'get_data':['Pulling'],
'SubmitToDatabase':['change'],
'AdministratorVerification':['Pulling']
}
return instructs_api_func.func(get_or_post, enable_session, rep,instruction_name_list,instruction_func_list,dependency_table
使用方法
>>> return func(get_or_post, enable_session, rep,instruction_name_list,instruction_func_list,dependency_table)
instruction_name_list: 指令名列表(支持的指令的列表)
instruction_func_list: 指令函数列表,需要与指令名列表对应,如果传入的是类或者模块,将从里面挑选和指令名一致的函数来执行
dependency_table: 指令的依赖关系表{'<指令名>':['依赖项指令1','依赖项指令2']}
logged :是否需要登录(bool)
指令集形式:
第一种,列表形式
["Pulling","change","change"] # ["指令名称"]
优点:节俭
确定:不能传递指令参数
第二种,列表+键值对
[{"instruction_name":"指令名","instruction_parameters":...}]
调用API
手动调用:
在已经构建了 instructs_API 的mod API上进行调用
例子:
url = ‘/api/mod?ModName=free_other&ApiName=instruct’
参数:
instruction_set = ‘[“Pulling”,”change”,”change”]’(json) # 这个是指令集
SessionID = ‘<你的会话 ID>’ # 如果没有则无法登录,就不能执行登录才能执行的指令
在这里我没有提供参数 free_other_s_id (这个是列表的指令集形式,无法提供参数),但是已经登录
返回结果:
["Error executing instruction: No parameters used, parameters not found:'free_other_s_id'", "Error executing instruction: No parameters used, parameters not found:'free_other_s_id'", "Error executing instruction: No parameters used, parameters not found:'free_other_s_id'"]
不登录的情况
["You are not logged in"]
使用SDK
可以利用这两个SDK进行调用:OrangeRedSeaweed/sdk/instructs/requests_instructs.js at main · hengshizhi/OrangeRedSeaweed · GitHub
OrangeRedSeaweed/sdk/instructs/requests_instructs.py at main · hengshizhi/OrangeRedSeaweed · GitHub