优特云
[ { "name": "首页", "url": "http://www.utyun.com/", "target": "0", "child": [] }, { "name": "活动", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/events", "target": "0", "child": [] }, { "name": "产品", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/products", "target": "0", "child": [] }, { "name": "关于优特云", "url": "https://pre-mobile.utyun.com/page-design/?__UT_TITLE__=%E4%BC%98%E7%89%B9%E4%BA%91%E7%A7%91%E6%8A%80-%E4%BA%91%E6%9C%8D%E5%8A%A1%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E5%AE%9A%E5%88%B6%E5%95%86#/8412299005246101317/about", "target": "0", "child": [] } ]
操作指南
附件

用户5594 最后一次编辑

8 个月前 25

 函数插件
对于云端函数,可以选择上传插件,插件本质即Js函数,在配置领域函数时通过关联相关的插件,可以实现对领域函数调用前,调用时,调用后的扩展。
Js函数的格式由平台定义,内容由用户自己实现。
平台目前约定了三种类型的插件,分别为鉴权插件、驱动插件、格式插件。
命名规则:。插件的命名规则为:{插件名称}-{插件类型}.{文件后缀},且“插件名称”中不能包含“-”。  
插件类型功能命名规则
鉴权插件http请求的前置处理,例如添加请求头xxx-鉴权插件.js
格式插件http请求的后置处理,流入修改返回值的数据结构xxx-格式插件.js
驱动插件用于自定义请求协议(默认为http协议)xxx-驱动插件.js  
编写规则:遵循JavaScript语法和JAVA脚本引擎规则,借助平台已提供的Js函数库和Java基础类/静态工具方法,详情请在下文查阅。
|- 鉴权插件
用户可通过编写鉴权插件的函数代码对原始请求的请求头和请求参数进行增强,比如添加、修改或删除请求头和请求参数
Js函数
function authPlugin(authRequest)
入参
属性类型说明例子
authRequestObject封装了请求所传的请求头和请求参数{"headers": [], "params": []}
authRequest的结构
属性类型说明例子
headersArray   authRequest属性,请求头本质:org.springframework.util.MultiValueMap类    [{"Content-Type":"application/json"},{"Content-Length":"1"},...]  
paramsArray   authRequest属性,请求参数本质:org.springframework.util.MultiValueMap类  [{"name1":"value1"},{"name2":"value2"},...]
方法入参返回值说明
getHeaders()headers属性获取请求头
getParams()params属性获取请求参数
返回值
例子
function authPlugin(authRequest){ var headers = authRequest.getHeaders(); headers.set("Authorization", "bearer XXX"); }
|- 驱动插件
可以替换领域函数,即当调用的领域函数存在驱动插件时,将转而执行驱动插件,而不会调用领域函数;同时比较灵活还可以囊括其它插件的功能
Js函数
function driverPlugin(request)
入参
属性类型说明例子
requestObject 驱动插件入参本质:javax.servlet.http.HttpServletRequest类 https://docs.oracle.com/javaee/7/api/javax/servlet/http/HttpServletRequest.html
返回值
可返回任意类型,由用户编写插件的函数代码决定。
例子
function driverPlugin(request) { // 调用java工具类从request中获取请求头 var headerMap = HttpUtil.buildHeader(request); // 请求头中写入token headerMap.set("Authorization", "Basic bW9iaWxlLWNsaWVudDptb2JpbGUtc2VjcmV0"); // 实例化java MultiValueMap类 var multiValueMap = new MultiValueMap(); multiValueMap.set("grant_type", "password"); multiValueMap.set("scope", "read"); multiValueMap.set("username", "rachel"); multiValueMap.set("password", "Ut123456"); multiValueMap.set("accountSystemKey", "defat"); // 调用平台提供的js函数库 http相关函数发起登录请求获取token var result = httpPost("https://dev.utyun.com/uaa/oauth/login", headerMap, multiValueMap, true); // 使用Java fastJson JSON类解析json var jsonObject = JSON.parseObject(result.body); var token = jsonObject.getString("access_token"); // 调用java工具类从request中获取请求头 var headerMap2 = HttpUtil.buildHeader(request); // 请求头中写入token headerMap2.set("Authorization", "bearer " + token); // 调用java工具类从request中获取请求体 var paramObj = HttpUtil.parseRequestBody(request); // 调用平台提供的js函数库 http相关函数发起硬件云iot相关请求 var result2 = httpPost("https://dev.utyun.com/api/iotapp/device/setDeviceProperty", headerMap2, null, paramObj, false): return JSON.parse(result2.body); }
|- 格式插件
对领域函数调用的结果重新进行封装后再返回
Js函数
function formatPlugin(inputData)
入参
属性类型说明例子
inputDataObject 封装了领域函数调用的结果:响应状态码和响应内容 { "statusCode": 200, "responseBody": "数据"}
inputData的结构
属性类型说明例子
statusCodenumber inputData属性,响应状态码 200、500
responseBodystringinputData属性,响应内容"XXX"
方法入参返回值                    说明
getStatusCode() statusCode属性 获取响应状态码
getResponseBody()responseBody属性获取响应内容
返回值
属性 类型  说明                   例子
statusCodenumber 响应状态码,由用户编写的函数代码决定最终将作为领域函数调用的请求响应码 200、500
utDataObject 数据,由用户编写的函数代码决定最终将作为领域函数调用的请求响应正常时的响应数据 {"utData": "", "utCode":200}
utErrorObject  错误信息,由用户编写的函数代码决定最终将作为领域函数调用的请求响应异常时的响应数据  {"utService":"","utCode":1,"utMsg":""}
例子
function formatPlugin(inputData) { // 实例化java的FormatPluginOutputVO类作为返回结果 var outputData = new FormatPluginOutputVO(); if (inputData.statusCode === 200) { print(inputData); outputData.setStatusCode(200); // 通过java BusinessResponseVO构建成功结果数据 outputData.setUtData(BusinessResponseVO.success(inputData.getResponseBody())); } else { var utData = JSON.parse(inputData.getResponseBody()); // 实例化java的UtErrorInfo类 var utError = new UtErrorInfo(); utError.setUtMsg(utData.message); utError.setUtCode(utData.status); utError.setUtService(utData.path); outputData.setUtError(utError); outputData.setStatusCode(500); } return outputData; }
优特云