优特云
[ { "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": [] } ]
应用开发工具
应用管理工具

照喵画符 最后一次编辑

3 年多前 695

        应用管理工具是面向应用开发者,进行应用创建、应用开发、上下架管理的工具。应用开发者创建应用后,需要由优特云后台应用管理者审核,并且根据应用信息配置编译版本。审核通过后,会通知应用开发者可以依赖引用的领域模型数据进行应用开发。应用的发布和下架同样要经过审核。
       如何成为应用开发者?
       应用开发者是开通了应用管理功能使用权限的用户的统称,通常由实际项目中的项目经理或者开发工程师担任。用户在登录U创平台成功后可以通过邮件utyun_console@ut.cn或电话0756-2552473联系U创平台管理员,申请开通应用开发者角色。
       应用管理的操作流程如下:

一、新建应用

应用开发者可以使用开发中台提供的通用开发工具,也可以使用优特云提供的API自主开发编缉工具,Web/App/PC版。 两种方式都需要在”应用管理”中新建应用。
步骤一:点击“新建应用”按钮
步骤二:输入应用详细信息
包括“所属领域”、”中文名”、”英文名”、”应用类型”、”描述”和”执行方式“。应用英文名也是AppKey,在第四章“函数调用”中用到。
“应用类型”分为四种,应用开发者可以根据实际情况配置应用类型:
  1. 通用IDE:U创平台提供的默认开发工具,选择此项内容后开发者可以通过工程编辑开发后台服务。
  2. web:应用开发者自定义开发的web端开发工具,选择此项内容需要在”描述”填写web的URL,U创平台暂不提供Web前端开发,可以通过创建“通用IDE”类型的应用并选择“云端执行”模式来完成后台服务开发。
  3. PC:应用开发者自定义开发的PC端开发工具,选择此项内容需要在”描述”填写应用本地地址,U创平台暂不提供本地化开发,可以通过创建“通用IDE”类型的应用并选择“本地执行”模式来完成本地服务开发。
  4. App:应用开发者自定义开发的App端开发工具,选择此项内容需要在”描述”填写App的下载URL,U创平台暂不提供App前端开发,可以通过创建“通用IDE”类型的应用并选择“云端执行”模式来完成后台服务开发。
“描述”针对不同应用类型,存储不同的内容。
 
步骤三:引用模型数据
 
步骤四:输入应用发布描述
点击”提交“按钮后,会自动申请发布应用,此时应用会处于“应用审核中”状态,等到平台管理员审核通过后,应用会变成“已发布”状态,这个时候,就完成了创建应用的步骤。

二、审核与发布

当应用开发者首次创建应用并提交后,默认跳过“申请发布”状态,直接到达“上架审核中”状态。应用的状态流转如下:

1.应用审核

应用审核由优特云应用审核者来完成,后台会收到一条待审核记录,审核者进行应用审核并且配置编译信息后,确认审核结果。
应用审核员需要“设置”应用,为应用添加一个或多个编译版本,例如“云端执行”和“本地执行”。
详细编译配置规则如下,应用审核员可以根据应用开发者提交的应用信息提供合理的应用编译配置。
应用审核者“查看”和“设置”完成后,选择“同意”或“拒绝”,后续也可以根据需求变更“设置”。

2.应用下架

       如果应用开发者想对已经上架的应用进行版本升级或者内容维护,需要先对已经上架的应用申请“下架”,应用状态会更新为“下架审核中”,同时应用审核者会进行审核,审核通过后,应用状态会更新为“未发布”状态。
        已经下架的应用,会同步在工程管理的可见应用列表中下架。工程调试员无法继续进行工程编辑和发布。在应用下架前已经发布的云端工程仍然有效,可以供应用开发者或工程调试员继续调用。已经编译并下载的本地工程文件(*.ulc)仍然可以在本地环境中运行,不会受到应用下架的影响。

3.申请发布

应用开发者可以对“未发布”状态的应用,再次配置,并且重新“申请发布”按钮。同样应用审核者在接收到发布申请后会审核,审核结果邮件通知申请人。

三、查看应用

1. 应用列表

进入应用管理工具后,即可查看应用列表
点击右侧的切换视角图标,可进行视角切换
 

2. 搜索应用

在左侧的搜索框中,可进行对应用的检索
3. 查看应用详情:
点击应用“查看”按钮,即可进入详情页面
进入详情页面后,可以看到有四个导航菜单,分别是“应用信息”“引用领域模型”“编译版本”“高级配置”
 
(1)应用信息菜单
在“应用信息”的菜单里,可以查看应用的基本信息和发布历史,若相对应用的基本信息进行修改,需要应用状态处于 ·未发布 状态才能修改。
如下图,在应用状态处于 ·未发布 时,点击编辑基本信息即可修改。
 
(2)引用领域模型
在领域模型菜单中,可对领域模型进行查看
领域模型由“领域函数”“领域数据表”“领域语言”和“领域模板”组成
  
点击操作栏”查看”按钮,可以详细内容
 
若想要引用某个领域模板,在列表中点击左侧的按钮即可引用
勾选引用生效,取消勾选则取消引用。
 
(3)编译版本
在此菜单,可以查看应用的编译版本信息,但无法编辑。
编译版本一般由平台管理员统一管理,若有特殊需求,请联系平台管理员
 
(4)高级配置
在高级配置菜单中,可以看到应用的高级配置,包括“请求来源”,“函数调用地址”,“环境变量”,“AppSecret”,“下载SDK”。
请求来源
Web前端调用应用服务函数时,需将域名加入白名单内,否则无法调用
在白名单的输入框中,输入开发者的前端地址,点击确定即可添加成功。
支持独立域名和非独立域名,非独立域名只支持固定的格式:域名/path/
函数调用地址
函数调用地址是采用HTTPs请求的方式来调用函数需要用到的U创平台服务地址。详细用法请参照:函数调用方式 方式一:HTTPs请求调用
环境变量
U创平台中的领域函数如为第三方平台提供,需要通过鉴权插件或格式插件来解决跨服务访问和数据格式转换的问题。插件需要用到的参数变量因应用开发方需求而异,故需要应用开发者在创建每个应用后,通过环境变量来设置当前应用所引用的领域函数所需的插件变量值。
支持添加删除多条变量值,并且针对敏感数据支持隐藏功能,一次设置隐藏不可更改。
AppSecret
AppSecret:是应用的秘钥,应用创建后由U创平台颁发给应用开发者。供应用开发者在通过应用调用函数时使用,支持查看和重置。
下载SDK
SDK是提供给应用开发者在应用开发阶段,通过后台调用服务函数时需要用到的SDK包。详细用法请参照:函数调用方式 方式二:SDK请求调用。

四、函数调用

1.函数调用步骤

步骤1:创建应用
首先进入应用管理工具,点击新建按钮,根据引导流程创建一个应用。应用创建后,会自动申请发布应用,此时应用会处于“应用审核中”状态,等到平台管理员审核通过后,应用会变成“已发布”状态,这个时候,就完成了创建应用的步骤。
具体操作流程可查看上文。
 
步骤2:了解函数
了解函数是开发者调用函数的前提,开发者需清楚了解被调用函数的特性与效果。在应用详情-引用领域模型中的领域函数列表中,开发者可以查看应用相关领域的函数。
 您需要了解的函数特性包括但不限于:函数key(apiKey)、函数类型(目前只支持调用“应用服务函数“)、请求参数及返回参数。
注:这里展现的函数列表,只会展示应用所在领域的函数(创建应用时选择了领域),若想查看其他领域的函数,请将应用关联其他领域后即可查看。
 
步骤3:引用函数
在查看完函数后,若看到该函数就是你想使用的函数,即可在相同页面进行引用。点击列表左边的单选框,即可引用。
引用代表开通函数的使用权限,只有在应用里引用后,后续才能通过appkey调用相关函数。

2.函数调用方式

通过上述步骤,您已经创建了应用、了解了被调用函数的特性和效果、引用了函数。现在,您可以进行调用函数这步骤了。
在调用函数前,还需了解AppKey与AppSecret:
AppKey与AppSecret的作用:
开发者调用 函数 的时候需要将 AppKey 做参数传入,AppSecret 用于签名计算,请求时会携带签名信息,网关会通过签名信息对您进行身份验证。
如何查看AppKey与AppSecret:
在应用的高级设置里,查看AppKey与AppSecret,为了安全性考虑,需要验收手机号才能进行查看。
现在,您可以自行编辑 HTTPs 请求来调用函数,也可以使用U创平台为您提供的SDK来进行调用。函数的请求方式说明如下:
方式1:HTTPs请求调用
HTTPs的函数调用支持2种接入方式:WEB网页直接接入,及签名验证接入。两者的区别在于请求头部所需内容不同。
注意,WEB网页直接接入存在安全风险,推荐在后台服务通过签名验证接入的方式进行函数调用。
第一部分:请求
请求地址
1.  https://mobile2.utyun.com/api-gw/default
请求方法
1.  POST
请求体
{ "QueryParam1": "QueryParamValue1", "QueryParam2": "QueryParamValue2", "BodyParam1": "BodyParamValue1", "BodyParam2": BodyParamValue2, "BodyParam3": {} } //HTTP Request Body //请求体需将Query参数和Body参数合并为一个Body
请求头部(WEB)
Content-Type: application/json; charset=UTF-8 //请求体类型,当前版本只支持application/json类型。 appKey: keyofanapp //请求的AppKey,请到应用管理工具查看,只有为App引用对应API后才可以调用该API。 apiKey: L3VzZXIvY3VyVXNlcg==  //请求的 API 的唯一标识,值为函数KEY的BASE64编码的字符串。函数KEY请到API授权页面查看。 accessMethod: web //接入方式,WEB网页接入时值固定为web。 referer: https://console.utyun.com   //请求来源,浏览器生成的当前WEB请求的请求来源。 authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1... //请求者Token,值为App为请求者在优特云登录后获得的accessToken。
请求头部(签名验证)
Content-Type: application/json; charset=UTF-8 //请求体类型,当前版本只支持application/json类型。 appKey: keyofanapp //请求的AppKey,请到应用管理工具查看,只有为App引用对应API后才可以调用该API。 apiKey: L3VzZXIvY3VyVXNlcg==  //请求的 API 的唯一标识,值为函数KEY的BASE64编码的字符串。函数KEY请到API授权页面查看。 accessMethod: HMAC-SHA1 //接入方式,签名验证接入时值固定为HMAC-SHA1。 timestamp: 1600840304000   //请求时间戳,值为请求发生时间的UNIX格式13位时间戳。 authorization: bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1... //请求者Token,值为App为请求者在优特云登录后获得的accessToken。 signature: krencEZsmpLSqhcb5Y0JUqFlflg=   //请求签名,值为对appKey:apiKey:timestamp:authorization字符串组合基于AppSecrect进行HMAC-SHA1签名后,再进行BASE64编码得到的字符串。
跨域访问资源共享(CORS)
函数调用不支持使用CORS机制,WEB网页直接接入需通过在WEB资源所在同源服务器上运行代理转发程序解决浏览器跨域问题。
第二部分:响应
状态码
200   //响应状态码,等于200表示成功;大于等于400小于500为客户端错误;大于500为服务端错误。
响应格式
{ "utCode": 0, //等于0表示成功,大于0表示存在业务异常,具体异常消息可查看utMsg "utData": {}, //utCode等于0时保存服务返回的业务数据 "utService": "user-service", //utCode大于0时保存业务异常所在服务 "utMsg": "BodyParamValue1" //utCode大于0时保存业务异常具体异常消息 }
  
方式2:SDK请求调用
第一部分:获取和使用
1、下载使用:
需要在开发中台相关页面下载SDK,并在maven中引入
<dependency>     <groupId>cn.ut</groupId>     <artifactId>standard-sdk</artifactId>     <version>0.1.4-SNAPSHOT</version>     <scope>system</scope> <systemPath>${project.basedir}/lib/standard-sdk.jar</systemPath> </dependency>
如果缺少依赖,请参考jar包中的\META-INF\maven\cn.ut\standard-sdk\pom.xml 解决依赖问题
 
2、maven:
<dependency>     <groupId>cn.ut</groupId>     <artifactId>standard-sdk</artifactId> <version>0.1.4-SNAPSHOT</version> </dependency>
 
第二部分:安全认证
访问优特云接口必须使用访问密钥(包括appKey和appSercret)进行签名。这两个密钥通常称为应用安全凭证。有关如何获取应用安全凭证的详细信息,请参阅上文
 
第三部分:操作步骤
步骤1:生成请求配置
RequestConfig requestConfig = new RequestConfig().                 sercret("<youAppKey>","<youAppSercret>");
 
步骤2:创建UTClient
生成UTClient的对象utClient
utClient 可以维持一个单例(建议通过sping)发送多次请求。
UTClient utClient = new UTClient(requestConfig);
   
步骤3:创建一个Request
AppFuncRequest appFuncRequest = new AppFuncRequest();
 
步骤4:在Request中设置通用参数
参数说明
ApiKeyAPIKey,在开发中台获取
Authorization用户的Token
appFuncRequest.     setApiKey("/approval/flow/instance/flow/data").     setAuthorization("bearer XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
 
步骤5:在Request中设置请求参数
增加单个参数
appFuncRequest.                  addParam("aboolean",true)                 .addParam("bean",new Bean("tom"))                 .addParam("params",Arrays.asList(0,1))                 .addParam("functionId","string");
 
增加多个参数
Map<String,Object> map = new HashMap<>(); map.("bean",new Bean("tom")); map.("params",Arrays.asList(0,1)); map.("functionId","string");; appFuncRequest.addParams(Collections.emptyMap());
 
通过Bean设置参数
以自定义类Bean为例:
public class Bean {     private String name;     public String getName()     {         return name;     }     public void setName(String name)     {         this.name = name;     } } Bean bean = new Bean(); bean.setName("tom"); appFuncRequest.addParamsByBean(bean);
  
步骤6:发送请求并获取返回
以自定义类Bean为例:
public   class Bean{         private String name;         public String getName() {             return name;         }         public void setName(String name) {             this.name = name;         } }
 
为方便使用,SDK提供多种通用类型的结果解析
获取类型结果
API返回结果:
{     "utData":{         "name":"tom"     },     "utCode":0 }
执行并返回
Bean bean = utClient.response(appFuncRequest).exec(Bean.class);
 
获取List结果
API返回结果:
{     "utData":[         {             "name":"tom"         }     ],     "utCode":0 }
执行并返回
List<Bean> beanList = utClient.response(appFuncRequest).execForList(Bean.class);
 
获取Page结果
API返回结果:
{     "utData":{         "content":[             {                 "name":"tom"             }         ],         "pageable":{             "pageSize":20,             "pageNumber":0,             "offset":0,             "paged":true         },         "totalPages":1,         "totalElements":1,            "size":20     },     "utCode":0 }
执行并返回
Page<Bean> beanPage = utClient.response(appFuncRequest).execForPage(Bean.class);
 
获取Map结果
API返回结果:
{     "utData":{         "1":{             "name":"tom"         },         "2":{             "name":"jack"         }     },     "utCode":0 }
执行并返回
Map<String,Bean> beanMap =utClient.response(appFuncRequest).execForMap(String.class,Bean.class);
 
获取JSON字符串结果
如果以上返回结果处理无法满足需求,可以返回Json字符串自行处理
String json = utClient.response(appFuncRequest).execForJsonStr();
 
步骤7:错误处理
需要使用catch()处理服务器报错和客户端报错
客户端报错 客户端报错代表错误发生在客户端本地 具体错误信息请参考:cn.ut.standard.sdk.error.ClientError
catch (ClientException e) {     System.out.println(e.getErrCode()); //错误码     System.out.println( e.getClientError());//错误枚举     System.out.println( e.getMessage());//错误信息 }    
 
服务器报错 客户端报错代表错误发生在服务端 错误信息请参考具体调用服务的状态
注意:当HTTP码 不等于200时,ErrCode = -1,ErrMsg 为HTTP message,Service为空
catch (ServerException e) {     System.out.println(e.getHttpStatus());//HTTP码     System.out.println(e.getErrCode());//错误码     System.out.println(e.getErrMsg());//错误信息     System.out.println(e.getService());//抛错的业务 }
 
第四部分:HTTP日志
SDK默认不提供HTTP日志打印,如需要,请在设置中开启
 
1、选择日志打印类型和级别
日志打印类型
参数说明
DETAIL详细日志
BASIC基础日志
NONE不打印日志
requestConfig.logConfig(               new LogConfig().setLogType(LogType.DETAIL). // 日志打印类型                       setLogLevel(LogLevel.DEBUG));       // 日志打印级别
   
2、日志打印组件
SDK使用slf4j作为日志组件的外观,你可以选择需要的实现或适配器完成日志的打印(例如 NLOG4J、SimpleLogger、java.util.logging、logback和log4j)。
示例,logback
maven引入logback
<dependency>     <groupId>ch.qos.logback</groupId>     <artifactId>logback-classic</artifactId> <version>1.0.7</version> </dependency>
日志示例
 
3、调用其他环境
默认的调用环境为生产环境。如需切换其他环境。需要在RequestConfig中设置调用的URL。
如dev环境
RequestConfig requestConfig = new RequestConfig().                 sercret("hello","1f03ffe6-cbcb-4755-b372-1e274017bd52").                 url("https://mobiledev2.utcook.com");
优特云