本文提出了一种解决方案体系结构,该体系结构解决了云服务及其使用者之间的交互需要验证和转换JavaScript对象表示法(JSON)有效负载时可能发生的问题。 该架构(我们称为JVAX(JSON验证和转换/转换))使用可配置的JSON模式进行验证和转换。
具有JSON有效负载的云应用程序的开发生命周期通常涉及持续的升级和集成。 每个用例的添加或修改都可能需要更改应用程序的JSON验证和转换逻辑。 结果,应用程序可能变得越来越脆弱且容易出错,并且维护起来很麻烦。
通常,提供代表性状态转移(REST)API的云服务会完成验证和转换JSON有效负载的大量工作。 JVAX体系结构旨在独立于云服务验证和转换JSON有效负载。 结果,JVAX系统减少了服务提供商必须执行的请求验证处理量。 同时,JVAX还有助于使使用它的应用程序更可靠和可维护。
JVAX使用复杂的机制来描述有效负载规则。 为了向您介绍JVAX构造,让我们从一个示例开始。
JVAX模式定义
清单1显示了一个简单的JSON有效负载: Person
对象。
清单1. Person
对象的样本输入数据
"Person": {
"FirstName" : "Krishna",
"LastName" : "Yadav"
"Age" : 25,
"PhoneNumber" : "91-012-3456789"
}
清单2显示了清单1的Person
对象的JSON模式的基本示例:
清单2. JVAX中Person
对象的模式定义
{
"Person" : {
"type" : "object",
"properties" : {
"FirstName" : {
"type" : "string",
"category" : "MANDATORY"
},
"LastName" : {
"type" : "string",
"category" : "MANDATORY"
},
"Age" : {
"type" : "number",
"category" : "MANDATORY"
},
"PhoneNumber" : {
"type" : "string",
"category" : "OPTIONAL"
}
}
}}
清单2中的JSON模式根据各种数据类型描述了Person
对象的字段。 表1列出了JVAX支持的类型:
表1.支持的JVAX字段类型
支持的类型 | 输入值 | 例 |
---|---|---|
string | java.lang.String 支持的双引号字符串值 |
|
boolean | true 还是false |
|
object | 键/值对的有序集合。 properties 说明符包含这些键/值对的描述。 |
|
array | 值的有序序列(可以是基本类型或其他对象类型)。 假定所有元素都是同一类型。 items 说明符包含数组的描述。 |
|
number | java.lang.number 支持的数字值 |
|
有效负载中的每个字段都需要一个值。 对于每个字段,架构都应用一个category
。 类别使用内部规则(在应用程序代码的业务逻辑中实现)确定JVAX如何处理字段的值。 规则支持一种覆盖值的方法,这对于防止调用方设置无效值特别重要。 表1显示了JVAX类别及其相关的处理规则:
表2. JVAX类别和相关的处理规则
类别 | 说明(针对API使用者) | 内部处理规则(是=输入中提供)(否=输入中未提供) |
---|---|---|
MANDATORY | API请求必须提供值。 |
|
OPTIONAL | API请求可以选择提供值。 如果未提供值,则使用默认值。 |
|
RESERVED | 这些字段仅用于内部目的。 任何API请求输入值都将被忽略,并用架构中的内部默认值替换。 |
|
SUPPRESSED | 如果提供,将忽略值。 |
|
该模式还支持使用枚举,正则表达式和自定义验证机制。 并且由于架构可以引用共享对象定义,因此JVAX促进了代码重用。
JVAX设计
JVAX设计中的关键概念是请求在服务提供商处理请求之前先通过JVAX系统。 图1显示了JVAX组件及其相互关系的概述:
图1. JVAX概述
![JVAX组件及其相互关系的概述](https://i-blog.csdnimg.cn/blog_migrate/6b67c3e5f684617f8b4c251393e311ef.png)
图1中反映的基本步骤是:
- 在JVAX系统上,服务提供者定义一个JSON模式,该模式用作API有效负载的模板。
- 使用者使用API将JSON有效负载发送到JVAX系统。
- JVAX根据模式验证并转换输入有效负载。
- 当出现错误情况时,JVAX代表提供者响应使用者。
- 验证成功后,JVAX会将请求重定向到服务提供商。
设计JSON模式
定义JSON模式的过程包括:
- 服务提供商定义API和关联的有效负载字段。
- 服务提供者定义了一个JSON模式,该模式反映了API有效负载的字段。
- 服务提供者使用以下规则定义字段的数据类型:
- 如果API需要一个字段,则服务提供商将其标记为
MANDATORY
。 - 如果不需要该字段,则将其标记为
OPTIONAL
。 - 应始终具有一组特定值的字段被标记为
RESERVED
。 - 如果不应将字段的值传递给API,则将该字段标记为
SUPPRESSED
。
- 如果API需要一个字段,则服务提供商将其标记为
图2显示了JSON模式设计涉及的总体步骤:
图2.设计JSON模式的步骤
![图2中的步骤是:1.创建一个JSON有效负载架构。 2.检查API调用和JSON负载。 3.标识字段类别(例如要求,选项,保留,禁止)。 4.标识字段的数据类型和自定义验证。 5.确定无法识别的JSON构造的策略](https://i-blog.csdnimg.cn/blog_migrate/7099944d111fe24f578671f2b3efe0f0.png)
JVAX入职流程
图3显示了JVAX系统的入门过程:
图3. JVAX的入职流程
![JVAX系统的入职过程图像](https://i-blog.csdnimg.cn/blog_migrate/24be931aaabc6a5c465d05301ded81fd.png)
在图3所示的过程中:
- JVAX系统读取服务使用者提供的JSON有效负载。
- JVAX读取服务提供者为特定API提供的JSON模式。
- JVAX尝试验证JSON模式。 如果遇到错误,它将返回错误条件并停止。
- 如果该模式有效,则JVAX会根据定义的JSON模式验证JSON有效负载。 如果有效负载与JSON模式的签名不匹配,它将返回错误条件并停止。
- 如果有效负载验证中没有发生错误,则JVAX(可选)根据API要求转换输入的JSON有效负载。
- 服务提供者基础框架调用API并将其用于将响应发送给服务使用者。
配置选项
整个JVAX系统可以配置为独立或嵌入式。 在独立配置中,JVAX与云服务分开安装,并作为单独的进程运行。 在嵌入式配置中,JVAX嵌入在现有应用程序中,因此共享相同的处理空间。 嵌入式配置使JVAX易于部署和配置。 它还避免了不必要的硬件配置成本。
JVAX的优势
JVAX解决方案体系结构的优点是:
- 易于配置:JVAX的基于规则的方法使实施可能经常更改的业务规则更加容易。
- 可插拔性和可扩展性:JVAX基于规则的方法可以嵌入到实际服务或任何其他现有代理中。 或者,可以将其添加为拦截和检查有效负载的独立代理。
- 易于维护:只需更改配置,而无需重新部署服务本身。
- 效率:除非请求有效,否则请求不会到达API,从而减少了服务提供商的不必要处理开销。
- 版本支持:即使服务提供商可以更改系统的内部结构,JVAX也提供了一种维护外部接口兼容性的简便方法。
- 文档支持:模式信息可以直接转换为API文档。
结论
JSON被广泛用于在客户端应用程序和Web服务器之间传输数据,这使得JSON验证和转换在云时代变得越来越重要。 JAVX系统可以为服务提供商和服务使用者带来福音。 它的可配置性可帮助服务提供商减少处理JSON格式的各种有效负载所涉及的维护工作。 服务使用者可以轻松地查看JVAX系统的响应,并相应地修改其JSON有效负载。
翻译自: https://www.ibm.com/developerworks/cloud/library/cl-json-verification/index.html