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并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

六个案例搞懂mysql间隙锁

《六个案例搞懂mysql间隙锁》MySQL中的间隙是指索引中两个索引键之间的空间,间隙锁用于防止范围查询期间的幻读,本文主要介绍了六个案例搞懂mysql间隙锁,具有一定的参考价值,感兴趣的可以了解一下... 目录概念解释间隙锁详解间隙锁触发条件间隙锁加锁规则案例演示案例一:唯一索引等值锁定存在的数据案例二:

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

MySQL 表的内外连接案例详解

《MySQL表的内外连接案例详解》本文给大家介绍MySQL表的内外连接,结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录表的内外连接(重点)内连接外连接表的内外连接(重点)内连接内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我

Java Spring 中的监听器Listener详解与实战教程

《JavaSpring中的监听器Listener详解与实战教程》Spring提供了多种监听器机制,可以用于监听应用生命周期、会话生命周期和请求处理过程中的事件,:本文主要介绍JavaSprin... 目录一、监听器的作用1.1 应用生命周期管理1.2 会话管理1.3 请求处理监控二、创建监听器2.1 Ser

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

MQTT SpringBoot整合实战教程

《MQTTSpringBoot整合实战教程》:本文主要介绍MQTTSpringBoot整合实战教程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录MQTT-SpringBoot创建简单 SpringBoot 项目导入必须依赖增加MQTT相关配置编写

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

Python FastAPI实现JWT校验的完整指南

《PythonFastAPI实现JWT校验的完整指南》在现代Web开发中,构建安全的API接口是开发者必须面对的核心挑战之一,本文将深入探讨如何基于FastAPI实现JWT(JSONWebToken... 目录一、JWT认证的核心原理二、项目初始化与环境配置三、安全密码处理机制四、JWT令牌的生成与验证五、