Biz-SIP业务中台案例实战(19)——App服务的域级校验和服务级检验

2023-12-07 11:18

本文主要是介绍Biz-SIP业务中台案例实战(19)——App服务的域级校验和服务级检验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Biz-SIP金融级业务中台(http://bizsip.bizmda.com))是一套基于领域驱动设计(DDD)架构,能快速构建金融级云原生架构的服务整合中间件,整合了在金融场景里锤炼出来的最佳实践。

案例要求:
通过Biz-SIP的开放API接口发送请求,在App服务调用前,会根据配置进行域级校验和服务级校验,校验出错会返回出错信息,校验通过后,会调用App服务后直接返回。:
在这里插入图片描述

具体代码和配置可以查看Biz-SIP源代码中的Sample相关测试案例(https://gitee.com/szhengye/biz-sip)

一、App服务的开发和配置

首先,我们需要编写一个App服务类(Sample1AppService.java):

@Slf4j
@Service
public class Sample1AppService implements AppBeanInterface {@Overridepublic JSONObject process(JSONObject message) throws BizException {log.debug("收到请求数据:\n{}", BizUtils.buildJsonLog(message));return message;}
}

Sample1AppService类继承了AppBeanInterface接口,实现了process()方法,这个方法的输入输出参数,都是平台统一的JSONObject对象。
可以看到在process()方法中,对输入报文没有做任何修改,是直接把原报文返回的。
然后,在Biz-SIP统一配置目录中的app.yml中,配置对应的App服务:

- app-service-id: /bean/sample1-check-ruletype: app-bean-serviceclass-name: com.bizmda.bizsip.sample.app.service.Sample1AppService

二、App服务的域级检验和服务级检验配置

在Biz-SIP统一配置目录下创建“/check-rule/bean/sample1-check-rule.yml”:

field-check-rules:- field: emailrule: isEmailmessage: '不是邮箱地址:{}'- field: sexrule: notEmptymessage: '不能为空'- field: mobilerule: isMatchRegexargs:- '^[1][3,4,5,6,7,8,9][0-9]{9}$'message: '不是手机号{}'
field-check-mode: one
service-check-rules:- script: |if (data.age == null) {return;}if (data.sex == "1" && data.age >= 60) {return '男性年龄大于60岁';}if (data.sex == "0" && data.age >= 50) {return '女性年龄大于50!';}
service-check-mode: one

可以看到在sample1-chekc-rule.yml中配置了针对email、sex、mobile共三个域的域级检验规则,以及针对age年龄的服务级检验规则。

三、启动应用进行测试

启动SampleAppApplication应用,通过开放平台接口发起请求,进行一系列的测试:

$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","sex":"0","email":"123232@163.com","mobile":"18601872345"}' http://localhost:8888/api|jq{"code": 0,"message": "success","extMessage": null,"appServiceId": "/bean/sample1-check-rule","traceId": "ad6765833c2847a3912cf836e25c91d9","parentTraceId": null,"timestamp": 1647845790993,"data": {"sex": "0","mobile": "18601872345","accountNo": "62001818","email": "123232@163.com"}
}$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","sex":"0","email":"123232","mobile":"18601872345"}' http://localhost:8888/api|jq{"code": 307,"message": "域校验出错","extMessage": "[{\"message\":\"不是邮箱地址:123232\",\"field\":\"email\"}]","appServiceId": "/bean/sample1-check-rule","traceId": "b11f60ef602b475daea510bcfffea2ba","parentTraceId": null,"timestamp": 1647845791036,"data": null
}$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","sex":"0","email":"123232@163.com","mobile":"021-34554345"}' http://localhost:8888/api|jq{"code": 307,"message": "域校验出错","extMessage": "[{\"message\":\"不是手机号021-34554345\",\"field\":\"mobile\"}]","appServiceId": "/bean/sample1-check-rule","traceId": "41a2013c94f84339922891cbf65b8954","parentTraceId": null,"timestamp": 1647845791073,"data": null
}$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","email":"123232@163.com","mobile":"18601872345"}' http://localhost:8888/api|jq{"code": 307,"message": "域校验出错","extMessage": "[{\"message\":\"不能为空\",\"field\":\"sex\"}]","appServiceId": "/bean/sample1-check-rule","traceId": "83f21fd288c6474c953b2531a68737fb","parentTraceId": null,"timestamp": 1647845791105,"data": null
}$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","sex":"0","email":"123232@163.com","mobile":"18601872345","age":20}' http://localhost:8888/api|jq{"code": 0,"message": "success","extMessage": null,"appServiceId": "/bean/sample1-check-rule","traceId": "06bb9d1d714c4ee78cd309eecd216b20","parentTraceId": null,"timestamp": 1648699339934,"data": {"sex": "0","mobile": "18601872345","accountNo": "62001818","email": "123232@163.com","age": 20}
}$ curl -H "Content-Type:application/json" -H "Biz-Service-Id:/bean/sample1-check-rule" -X POST --data '{"accountNo":"62001818","sex":"0","email":"123232@163.com","mobile":"18601872345","age":55}' http://localhost:8888/api|jq{"code": 312,"message": "服务规则校验出错","extMessage": "[{\"message\":\"女性年龄大于50岁!\"}]","appServiceId": "/bean/sample1-check-rule","traceId": "67b19f640c3b4a6d962d97e55f95e368","parentTraceId": null,"timestamp": 1648699555359,"data": null
}

Biz-SIP网站:http://bizsip.bizmda.com
Gitee代码库:https://gitee.com/szhengye/biz-sip

这篇关于Biz-SIP业务中台案例实战(19)——App服务的域级校验和服务级检验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/465652

相关文章

Python实现Word转PDF全攻略(从入门到实战)

《Python实现Word转PDF全攻略(从入门到实战)》在数字化办公场景中,Word文档的跨平台兼容性始终是个难题,而PDF格式凭借所见即所得的特性,已成为文档分发和归档的标准格式,下面小编就来和大... 目录一、为什么需要python处理Word转PDF?二、主流转换方案对比三、五套实战方案详解方案1:

setsid 命令工作原理和使用案例介绍

《setsid命令工作原理和使用案例介绍》setsid命令在Linux中创建独立会话,使进程脱离终端运行,适用于守护进程和后台任务,通过重定向输出和确保权限,可有效管理长时间运行的进程,本文给大家介... 目录setsid 命令介绍和使用案例基本介绍基本语法主要特点命令参数使用案例1. 在后台运行命令2.

SpringBoot实现RSA+AES自动接口解密的实战指南

《SpringBoot实现RSA+AES自动接口解密的实战指南》在当今数据泄露频发的网络环境中,接口安全已成为开发者不可忽视的核心议题,RSA+AES混合加密方案因其安全性高、性能优越而被广泛采用,本... 目录一、项目依赖与环境准备1.1 Maven依赖配置1.2 密钥生成与配置二、加密工具类实现2.1

Nginx进行平滑升级的实战指南(不中断服务版本更新)

《Nginx进行平滑升级的实战指南(不中断服务版本更新)》Nginx的平滑升级(也称为热升级)是一种在不停止服务的情况下更新Nginx版本或添加模块的方法,这种升级方式确保了服务的高可用性,避免了因升... 目录一.下载并编译新版Nginx1.下载解压2.编译二.替换可执行文件,并平滑升级1.替换可执行文件

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

SQL Server跟踪自动统计信息更新实战指南

《SQLServer跟踪自动统计信息更新实战指南》本文详解SQLServer自动统计信息更新的跟踪方法,推荐使用扩展事件实时捕获更新操作及详细信息,同时结合系统视图快速检查统计信息状态,重点强调修... 目录SQL Server 如何跟踪自动统计信息更新:深入解析与实战指南 核心跟踪方法1️⃣ 利用系统目录

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束