前言
在NCCloud之前的版本中,并没有规范接口开发方式,开发接口的形式也是多种多样。OpenAPI的出现使得接口的开发变得规范、安全。但是在OpenAPI中预置的接口,无法满足客户的需要的时候,我们就要对OpenAPI进行扩展开发,将我们开发的接口加入到OpenAPI中,此篇博客将详细讲解如何对OpenAPI进行扩展开发。
一、编写接口入口类
在public端新建接口入口类,示例如下:
package nccloud.api.xuerong.pu;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.apache.commons.lang3.exception.ExceptionUtils;
import org.json.JSONString;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.vo.pub.lang.UFBoolean;
import nccloud.api.rest.utils.ResultMessageUtil;
import nccloud.itf.xuerong.IOAMaintain;
import nccloud.pub.xuerong.LogUtil;
import nccloud.vo.xuerong.constant.XRConstant;
import nccloud.ws.rest.resource.AbstractNCCRestResource;
/**
* 采购管理模块 OpenAPI 扩展接口
*
* @author 王晓旭
* @date 2021年9月14日
*/
@Path("/pu")
public class PuManageResources extends AbstractNCCRestResource {
/**
* 请购单审批
*/
@POST
@Path("/praybill/approve")
@Consumes({"application/json"})
@Produces({"application/json"})
public JSONString praybillApprove(JSONString json) {
// 创建日志参数集合
Map<XRConstant.LogParam, Object> logParmMap = LogUtil.createEmptyLogParmMap();
// 接口执行结果
UFBoolean flag = UFBoolean.TRUE;
// 入参
logParmMap.put(XRConstant.LogParam.INPUTMSG, json.toJSONString());
// 返回值
JSONString returnmsg = null;
try {
// 调用接口
returnmsg = NCLocator.getInstance().lookup(IOAMaintain.class).praybillApprove(json.toJSONString());
} catch (Exception e) {
// 组装异常返回值
returnmsg = ResultMessageUtil.exceptionToJSON(e);
// 接口执行结果记录为失败
flag = UFBoolean.FALSE;
// 记录异常日志
logParmMap.put(XRConstant.LogParam.ERRORMSG, ExceptionUtils.getStackTrace(e));
} finally {
// 日志参数赋值
logParmMap.put(XRConstant.LogParam.PK_GROUP, InvocationInfoProxy.getInstance().getGroupId());
logParmMap.put(XRConstant.LogParam.ITFTYPE, XRConstant.ItfType.PRAYBILLAPPROVE);
logParmMap.put(XRConstant.LogParam.ISSUCCESS, flag);
logParmMap.put(XRConstant.LogParam.CALLER, XRConstant.ItfSystem.OA);
logParmMap.put(XRConstant.LogParam.RECEIVER, XRConstant.ItfSystem.NC);
logParmMap.put(XRConstant.LogParam.RETURNMSG, returnmsg.toJSONString());
// 记录日志
LogUtil.save(logParmMap);
}
return returnmsg;
}
@Override
public String getModule() {
// 模块名
return "xuerong";
}
}
备注:
1.1、接口类名及接口方法名可以自定义,接口方法中代码可以自行编写;
1.2、类及方法上的注解必须存在,不可更改;
1.3、@Path标签中字符串为接口URL地址,类注解@Path不可去除,否则无法扫描到该接口;
1.4、接口URL组成规则:http://ip:port/nccloud/api/ + 类注解@Path值 + 方法注解@Path值,示例代码中接口URL地址为:http://ip:port/nccloud/api/pu/praybill/approve。
二、编写接口配置文件
在META-INF文件夹下编写 .rest 文件格式的配置文件,示例如下:
<?xml version="1.0" encoding='gb2312'?>
<module>
<!-- 采购管理模块 OpenAPI 扩展接口 -->
<rest>
<resource classname="nccloud.api.xuerong.pu.PuManageResources" exinfo="" />
</rest>
</module>
三、注册接口信息
3.1、浏览器中打开NCCloud开发管理平台,URL地址为http://ip:port/nccloud/resources/opm/index.html
3.2、管理员登录
3.3、在API维护页签中注册接口信息
备注:在第一次注册保存后,会发现填写的URL字段值变为了空白,这个时候我们到数据库中找到刚才注册的记录,手动在数据库中将URL字段的值刷一下,表名为OPM_APIMANAGER
四、第三方应用管理
4.1、在第三方应用管理页签中注册接口的调用方信息,注册后会随机生成公钥和秘钥;
4.2、点击【关联API】按钮分配接口权限。
五、NCCloud OpenAPI使用文档
百度网盘链接:https://pan.baidu.com/s/1JhTgwhwliiwXKiFCgSHQrg?pwd=p4zu
文档中有OpenAPI具体的调用方式及示例项目,可直接导入开发工具中进行接口测试,也可直接发给第三方系统作为接口调用参考。