> > **支持版本：10.0.2407.01、10.0.2501.01及后续版本**
> 
> 仅针对EB后台发布的自定义接口(具体发布方式见 [发布自定义接口](https://weapp.eteams.cn/build/techdoc/wdoc/index.html#/public/doc/4b48a50f-eaec-4829-a4b1-9a2c92f60731))  。 增加接口标识维度注册事件，判断对应接口有注册事件在标准逻辑执行结束后进行回调。 满足标准接口已经提供给第三方后原有调用接口不调整的前提先增加其他业务逻辑， 如自定义处理返回格式复写标准返回 等业务逻辑场景

具体实现思路:

1. 先针对具体接口标识注册回调配置

2. 根据注册的配置和标准提供的接口做对应实现并暴露相应RPC接口

3. 标准逻辑判断对应接口标识存在注册钩子则调用对应实现

### 实现步骤：

#### **一、注册接口**

##### ** 1.1 更新接口标识**

```json
POST: /api/bs/ebuilder/form/formdata/updateExtendGroup?apid={apid}
{
    "extendGroup": "{extendGroup}",
    "interfacePK": "{interfacepk}"
}
注意: 需要当前操作人有后台权限; apid需要替换成当前具体应用id; 具体接口标识和扩展分组需要根据业务决定

请求示例:
POST: /api/bs/ebuilder/form/formdata/updateExtendGroup?apid=899352068589248512
{
    "extendGroup": "demoGroup",
    "interfacePK": "w269d8"
}

返回示例: 
  成功示例: 
{
    "code": 200,
    "msg": "接口返回成功",
    "status": true,
    "data": {
        "status": true
    },
    "fail": false
}

  失败示例:
{
    "code": 200,
    "msg": "接口返回成功",
    "status": true,
    "data": {
        "message": "extendGroup or interfacePK is empty",
        "status": false
    },
    "fail": false
}
```

##### ** 1.2. 获取接口分组标识**

```json
GET: /api/bs/ebuilder/form/formdata/getExtendGroup?apid={apid}&&interfacePK={interfacepk}

请求示例:
GET: /api/bs/ebuilder/form/formdata/getExtendGroup?apid=899352068589248512&interfacePK=w269d8

返回示例: 
  成功示例: 
{
    "code": 200,
    "msg": "接口返回成功",
    "status": true,
    "data": {
        "extendGroup": "demoGroup",
        "status": true
    },
    "fail": false
}

  失败示例:
{
    "code": 200,
    "msg": "接口返回成功",
    "status": true,
    "data": {
        "message": "interfacePK is empty",
        "status": false
    },
    "fail": false
}
```

#### **二、二开服务实现接口**

##### **2.1. 引入ebuilder-form-client 表单对外api包**

```
<dependency>
    <groupId>com.weaver</groupId>
    <artifactId>weaver-ebuilder-form-client</artifactId>
</dependency>
```

##### **2.2. 复写实现说明**

```
1. 实现接口com.weaver.ebuilder.form.client.service.data.advice.EBRestApiAdvice并暴露rpc接口, 
    暴露格式要求:  EBRestApiAdvice::extendGroup
2. 调用标准自定义接口判断存在当前接口存在extendGroup则会泛化调用到对应接口暴露服务执行相应业务逻辑并获取返回值, 若返回resultData不为空则会拼接到标准返回结构上
```

##### **2.3. 实现DEMO**

###### ** 2.3.1. 相应开发代码实现**

```java
package com.weaver.ebuilder.form.remote.demo;

import com.google.common.collect.Maps;
import com.weaver.ebuilder.form.client.entity.data.advice.RestApiAdviceDto;
import com.weaver.ebuilder.form.client.entity.data.advice.RestApiAdviceRes;
import com.weaver.ebuilder.form.client.service.data.advice.EBRestApiAdvice;
import com.weaver.ebuilder.form.common.utils.MapUtil;
import com.weaver.ebuilder.form.common.utils.Util;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service("demoGroup_ebRestApiAdvice")
public class RestApiAdviceDemoImpl implements EBRestApiAdvice {

    @Override
    public RestApiAdviceRes afterExec(RestApiAdviceDto restApiAdviceDto) {
        String interfacePk = restApiAdviceDto.getInterfacePk();
        if (Util.isEmpty(interfacePk) || !"w269d8".equals(interfacePk)) {
            return new RestApiAdviceRes();
        }
        RestApiAdviceRes restApiAdviceRes = new RestApiAdviceRes();
        Map<String, Object> demo1 = Maps.newHashMapWithExpectedSize(2);
        demo1.put("aa", "11");
        demo1.put("bb", "22");
        demo1.put("cc", "33");
        demo1.put("abc", MapUtil.constructMap("aaa", "111"));
        restApiAdviceRes.setResultData(demo1);
        restApiAdviceRes.setStatus(true);
        return restApiAdviceRes;
    }
}
```

###### **  2.3.2. 接口暴露说明**

```xml
 二开服务对应暴露对应接口, 注意: ref需要和暴露的bean名称一致, group需要和注册接口时接口的分组标识一致
<dubbo:service ref="demoGroup_ebRestApiAdvice"
                   interface="com.weaver.ebuilder.form.client.service.data.advice.EBRestApiAdvice"
                   group="demoGroup"/>
```

###### **2.3.3. 效果示例(如在标准接口中返回2.3.1补充的扩展值)**

```json
{
    "datajson": {
        "extendData": {
            "aa": "11",
            "bb": "22",
            "cc": "33",
            "abc": {
                "aaa": "111"
            }
        },
        "message": "DataError:dataKey:dxwb_uw3o,该字段不存在",
        "status": true
    }
}
```
