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

相关文章

Java中使用注解校验手机号格式的详细指南

《Java中使用注解校验手机号格式的详细指南》在现代的Web应用开发中,数据校验是一个非常重要的环节,本文将详细介绍如何在Java中使用注解对手机号格式进行校验,感兴趣的小伙伴可以了解下... 目录1. 引言2. 数据校验的重要性3. Java中的数据校验框架4. 使用注解校验手机号格式4.1 @NotBl

基于Canvas的Html5多时区动态时钟实战代码

《基于Canvas的Html5多时区动态时钟实战代码》:本文主要介绍了如何使用Canvas在HTML5上实现一个多时区动态时钟的web展示,通过Canvas的API,可以绘制出6个不同城市的时钟,并且这些时钟可以动态转动,每个时钟上都会标注出对应的24小时制时间,详细内容请阅读本文,希望能对你有所帮助...

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

Python与DeepSeek的深度融合实战

《Python与DeepSeek的深度融合实战》Python作为最受欢迎的编程语言之一,以其简洁易读的语法、丰富的库和广泛的应用场景,成为了无数开发者的首选,而DeepSeek,作为人工智能领域的新星... 目录一、python与DeepSeek的结合优势二、模型训练1. 数据准备2. 模型架构与参数设置3

Java实战之利用POI生成Excel图表

《Java实战之利用POI生成Excel图表》ApachePOI是Java生态中处理Office文档的核心工具,这篇文章主要为大家详细介绍了如何在Excel中创建折线图,柱状图,饼图等常见图表,需要的... 目录一、环境配置与依赖管理二、数据源准备与工作表构建三、图表生成核心步骤1. 折线图(Line Ch

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Java使用Tesseract-OCR实战教程

《Java使用Tesseract-OCR实战教程》本文介绍了如何在Java中使用Tesseract-OCR进行文本提取,包括Tesseract-OCR的安装、中文训练库的配置、依赖库的引入以及具体的代... 目录Java使用Tesseract-OCRTesseract-OCR安装配置中文训练库引入依赖代码实

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后