前言

在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://nccdev.yonyou.com/datadict/bipbook/docs/chapter19/part1/part1.html

文档中3.2.2中有OpenAPI具体调用方式及示例代码,可以在开发工具中进行接口测试,也可以发给第三方系统作为接口调用参考。

六、附言

以上讲解使用的是NCC2005版本进行举例说明,NCC2015及以后版本、BIP高级版(2207版本)及以后版本,OpenAPI发布接口无变化,BIP开始NCCloud开发管理平台集成至系统中,使用系统管理员登录即可看到相关节点,OpenAPI调用模式发生改变,分为2015前后两个版本,社区文档中也有相应的jar包进行区分。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐