小程序 json 转换_为基于云的应用程序动态验证和转换JSON有效负载

本文提出了一种解决方案体系结构,该体系结构解决了云服务及其使用者之间的交互需要验证和转换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支持的双引号字符串值
"type" : "string"
boolean true还是false
"type" : "boolean"
object 键/值对的有序集合。
properties说明符包含这些键/值对的描述。
"type" : "object",
"properties" : {
// description of the collection
}
array 值的有序序列(可以是基本类型或其他对象类型)。
假定所有元素都是同一类型。
items说明符包含数组的描述。
"type" :"array","items" : {
// description of array elements
}
number java.lang.number支持的数字值
"type" : "number"

有效负载中的每个字段都需要一个值。 对于每个字段,架构都应用一个category 。 类别使用内部规则(在应用程序代码的业务逻辑中实现)确定JVAX如何处理字段的值。 规则支持一种覆盖值的方法,这对于防止调用方设置无效值特别重要。 表1显示了JVAX类别及其相关的处理规则:

表2. JVAX类别和相关的处理规则
类别 说明(针对API使用者) 内部处理规则(是=输入中提供)(否=输入中未提供)
MANDATORY API请求必须提供值。
  • 如果是,请使用该值。
  • 如果否,则发生错误。
OPTIONAL API请求可以选择提供值。 如果未提供值,则使用默认值。
  • 如果是,请使用该值。
  • 如果没有,则在架构中提供默认值,然后使用它。
  • 如果否,并且架构中未提供默认值,则不执行任何操作。
RESERVED 这些字段仅用于内部目的。 任何API请求输入值都将被忽略,并用架构中的内部默认值替换。
  • 如果是,请使用默认值覆盖。
  • 如果否,则创建并填充默认值。
(在两种情况下都不会发生错误。)
SUPPRESSED 如果提供,将忽略值。
  • 如果是,则删除。
  • 如果否,则不执行任何操作。

该模式还支持使用枚举,正则表达式和自定义验证机制。 并且由于架构可以引用共享对象定义,因此JVAX促进了代码重用。

JVAX设计

JVAX设计中的关键概念是请求在服务提供商处理请求之前先通过JVAX系统。 图1显示了JVAX组件及其相互关系的概述:

图1. JVAX概述
JVAX组件及其相互关系的概述

图1中反映的基本步骤是:

  1. 在JVAX系统上,服务提供者定义一个JSON模式,该模式用作API有效负载的模板。
  2. 使用者使用API​​将JSON有效负载发送到JVAX系统。
  3. JVAX根据模式验证并转换输入有效负载。
  4. 当出现错误情况时,JVAX代表提供者响应使用者。
  5. 验证成功后,JVAX会将请求重定向到服务提供商。

设计JSON模式

定义JSON模式的过程包括:

  1. 服务提供商定义API和关联的有效负载字段。
  2. 服务提供者定义了一个JSON模式,该模式反映了API有效负载的字段。
  3. 服务提供者使用以下规则定义字段的数据类型:
    • 如果API需要一个字段,则服务提供商将其标记为MANDATORY
    • 如果不需要该字段,则将其标记为OPTIONAL
    • 应始终具有一组特定值的字段被标记为RESERVED
    • 如果不应将字段的值传递给API,则将该字段标记为SUPPRESSED

图2显示了JSON模式设计涉及的总体步骤:

图2.设计JSON模式的步骤
图2中的步骤是:1.创建一个JSON有效负载架构。 2.检查API调用和JSON负载。 3.标识字段类别(例如要求,选项,保留,禁止)。 4.标识字段的数据类型和自定义验证。 5.确定无法识别的JSON构造的策略

JVAX入职流程

图3显示了JVAX系统的入门过程:

图3. JVAX的入职流程
JVAX系统的入职过程图像

在图3所示的过程中:

  1. JVAX系统读取服务使用者提供的JSON有效负载。
  2. JVAX读取服务提供者为特定API提供的JSON模式。
  3. JVAX尝试验证JSON模式。 如果遇到错误,它将返回错误条件并停止。
  4. 如果该模式有效,则JVAX会根据定义的JSON模式验证JSON有效负载。 如果有效负载与JSON模式的签名不匹配,它将返回错误条件并停止。
  5. 如果有效负载验证中没有发生错误,则JVAX(可选)根据API要求转换输入的JSON有效负载。
  6. 服务提供者基础框架调用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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
有人说,咖啡馆是一个叫人学会放慢步伐、享受生活的地方。这句话不无道理。港人常把饮咖啡称为“叹咖啡”,这个“叹”字就有欣赏、品味的含义,舒适的环境,自然是招徕顾客之道。香港虽然寸金尺土,但无论在闹市或是在风景区,都不难找到精巧雅致的咖啡馆,它们或具欧陆情怀,或富英式韵味,大都环境优美、摆设得体、席位舒适、气派不凡。   许多人想学习编程,但不知道从哪里开始。在这个连载中,我将为你介绍Java编程技术,以及Java程序的开发方法,从零开始,循序渐进,希望能够让你亲自品味Java这种咖啡的香醇与浓郁。 如果说看完这个连载你便能全面掌握Java技术,我绝不敢打这样的保票。喝再多咖啡,我也无法把Java的博大精深浓缩成一个连载。咖啡馆本来就是休闲的地方,所以,我将有选择地为你介绍Java技术的重要组成部分,涉猎面广,但不见得都非常深入。所以,如果想真正在Java技术上有所造诣,也需要你自己的努力和汗水。毕竟,咖啡闻起来香,但本身是苦的,只有不嫌弃这点苦,才能品尝到真味道。   不过你也不必把这个连载看作古板的教程。Java技术从问世到如今,已有近10年的历史。在Java技术成长过程中,涌现了数不尽的英雄人物,帮助Java技术创造了史诗般的辉煌。在这个Java咖啡馆中,我们还准备了许多有趣的传记或故事,称之为“黄糖故事”。本来嘛,编程即创造,本身就有无穷乐趣。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值