基础数据类型及编码方式
UBSI要求微服务接口的请求参数以及返回结果必须采用“标准”的基础数据类型,不能采用“语言相关”的数据结构,这样可以保证在向不同微服务发起请求时,不必依赖服务端定义的数据类型,同时这种机制也为API网关的构造以及以后多语言扩展提供了方便。
UBSI支持的基础数据类型包括:
类型 | 说明 | 编码 | Java类型 | XML方式 | JSON方式 |
---|---|---|---|---|---|
null | 空 | 0x00 | null | <null/> | null |
bool | 布尔 | ...... | boolean | Boolean | <bool>true | false</bool> | true | false |
byte | 单字节 | ...... | byte | <byte>ff</byte> | {"$t":"byte", "$v":-1} |
int | 整数 | ...... | char | short | int | <int>12</int> | 12 |
long | 长整数 | ...... | long | <long>123</long> | {"$t":"long", "$v":123} |
bigint | 大整数 | ...... | BigInteger | <bigint>12345</bigint> | {"$t":"bigint", "$v":12345} |
double | 浮点数 | ...... | float | double | <double>123.45</double> | 123.45 或 {"$t":"double", "$v":123} |
bignum | 大浮点数 | ...... | BigNumber | <bignum>123.45</bignum> | {"$t":"bignum", "$v":"123.45"} |
string | 字符串 | ...... | String | <str>hello, wor</str> | "hello, world" |
map | 键值 | ...... | Map | <map><...><...></map> | {...} |
list | 列表 | ...... | List | <list><...></list> | [...] |
set | 集合 | ...... | Set | <set><...></set> | {"$t":"set", "$v":[...]} |
bytes | 多字节 | ...... | byte[] | <bytes>a0 b1</bytes> | {"$t":"bytes", "$v":"a0b1"} |
array | 数组 | ...... | T[] | <array><...></array> | {"$t":"array", "$v":[...]} |
在请求/应答过程中,UBSI框架负责将数据按照对应的数据类型编码成字节数据进行传输,同样,对接收到的字节数据也会进行解码,形成"标准"类型的数据再传递给微服务或应用进行处理。
通常情况下,UBSI对数据的编/解码过程是透明的,不需要开发者进行处理。但下面几种情况需要Java开发者注意:
- char和short都会转换成int,float会转换为double
- int[]或String[]等非byte[]型的数组,都会转换为Object[]
- 非"标准"数据类型的Object,会将其非static的public成员变量提取出来,转换成Map