本文共 1057 字,大约阅读时间需要 3 分钟。
先说一下事情的背景:
我们产品对外有两个接口,一个是基于 JSON 报文的 REST,另一个是基于 XML 报文的 CAI3G,现在要新加一个参数,yaml 文件里面的定义如下:
XXX: description: "XXX" type: string format: uuid
基于 Security 的原因,具体的参数名就不写了。
这里用到了一个很特殊的东西叫,format: uuid,而在这个 yaml 文件其他地方又找不到 uuid 的格式定义。
关于 UUID(Universally unique identifier)通用唯一识别码,简而言之,这是一个 128-bit 的数值,通过一定的算法来保证其唯一性。
具体的定义,推荐去看 Wiki 的介绍,或者 RFC4122 标准:
说回正题,yaml 的定义给了,转到 XML schema 的定义,为了限定其范围,我们需要给一个正则表达式,那么一个合规的 UUID 的格式应该是怎样的呢?
这就要说回生成 UUID 的算法了,至今为止,UUID 一共有 5 个 标准版本。
这里有个生成 UUID 的链接,和匹配正则表达式的网站,大家可以上去玩一下:
不同的版本/算法,生成的 UUID 的格式也不相同,但是总体的格式是一定的,是一个 8-4-4-4-12 的16进制数字:
[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}
但是当你确认版本后,这个范围有时候能够进一步缩小,例如 Version4 中,固定第13位是版本号4,第17位是 [8,9,a,b] 之一:
[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}
最后从通用性考虑,虽然在网上查到,这个参数根据 3GPP 规范,明确是 Version4 的 UUID 值,但还是用了第一种方式匹配。
转载地址:http://payyz.baihongyu.com/