与python后端进行联调,后端协议为jsonrpc ,这里简单记录下jsonrpc的通用请求函数,并附带几个栗子。
JSON-RPC是一个无状态且轻量级的RPC协议,其传输内容以JSON方式,相对于一般的HTTP请求通过URI调用远程服务器,JSON-RPC直接在内容中定义了要调用的函数名称(如 {“method”: “getUser”}),对于开发者来说非常的方便。Bitcoin和Ethereum都支持JSON-RPC通过客户端直接调用节点上的函数或方法。
JSON-RPC 2.0和1.0之间一些差异,我们这里介绍2.0的使用,一个JSON-RPC的请求必须包含以下4个字段。
/**
* 封装通用请求,jsonrpc
* @param {String} url server请求地址
* @param {Object} params jsonrpc 附带params数据
*/
request : function(url,params,cookie){
let _util = this;
return new Promise((r,j)=>{
let header = {
'content-type': 'application/json',
'Cookie' :cookie,
'x-requested-with': 'XMLHttpRequest'
}
wx.request({
url: config.serverHost+url,
method: 'POST',
data: {
jsonrpc: "2.0",
method: "call",
params: params,
},
header: header,
success: function (res) {
//判断正常返回数据,如果不符合,则直接提示报错即可。
res = res.data;
if(res.error && res.error.data && res.error.data.message){
_util.msg(res.error.data.message);
}
r(res);
},
fail : function(err){
console.log(`请求失败:[${url}] : ${err.message}`)
//如果请求失败后,需要将当前的数据进行记录日志,然后发送至server
_util.msg('当前请求失败,请退出后重试')
r(null);
}
})
})
},
/web/dataset/call_kw/see.happy.lead/submit
let requestContext = {
lang : 'zh_CN',tz : false,uid : 2,allowed_company_ids:[1],bin_size:true
};
...
/**
* 保存加梯表单
*/
saveForm: async function(formData){
let cookie = await util._getCookie();//获取之前保存的cookie
let params = {
//按照顺序写入参数
args : [formData.name,formData.phone,formData.address,formData.community,formData.location],
kwargs : {context : requestContext},
method : 'submit',
model : 'see.happy.lead'
}
let res = await util.request(config.url,params,cookie);
return res && res.result ? true : false;
},
一直没接触python,对于jsonrpc 也没怎么用过,都是跟java nodejs 做对接。 个人感觉这种方式对于后端来说会减少不少工作。
转载请注明出处: https://chrunlee.cn/article/mini-program-jsonrpc-python.html