API接口参数类型设计
郝伟 2021/03/02
在neo4j CQL支持以下数据类型。由于在解析时,不同的格式的组合有所区别,所以在传递时需要需要指明类型。在本设计中,类型使用缩写表示,比如 i32 表示32位整型,即 int。
| 编号 | CQL数据类型 | 缩写 | 用法 |
|---|---|---|---|
| 1 | boolean | b01 | 逻辑值 true/false。 |
| 2 | byte | i08 | 8位整数。 |
| 3 | short | i16 | 16位整数。 |
| 4 | int | i32 | 32位整数。 |
| 5 | long | i64 | 64位整数。 |
| 6 | float | f32 | 32位浮点数。 |
| 7 | double | f64 | 64位浮点数。 |
| 8 | char | c16 | 16位字符。 |
| 9 | string | c64 | Base64表示的字符串。 |
如果写上类型则会转换为对应的数据类型,如果不写或写错,则以字符串处理。
示例
name='tom'
需要转义的字符包括:
\ - ? . = &
因为URL本身就是字符串,所以当value的值也为字符串时,可能会包括非法的内容,比如/, & 或 = 等内容。为了避免此问题,故使用Base64编码保存。
标准的Base64并不适合直接放在URL里传输,因为URL编码器会把标准Base64中的“/”和“+”字符变为形如“%XX”的形式,而这些“%”号在存入数据库时还需要再进行转换,因为ANSI SQL中已将“%”号用作通配符。
为解决此问题,本设计采用一种用于URL的改进Base64编码,它在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“-”和“_”,这样就免去了在URL编解码和数据库存储时所要作的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。
import base64 def b64encode(s): ''' 将输入常规字符串转为base64字符串 ''' return base64.b64encode(s.encode(encoding='utf-8')).decode().replace('/', '_').replace('+', '-') def b64decode(s): ''' 将输入的base64字符串转为常规字符串 ''' return base64.b64decode(s.replace('_', '/').replace('-', '+').encode(encoding='utf-8')).decode() # 以下是测试代码,在测试字符串中包括换行符号、等号、问号、引号、斜杠以及中英文混排等非标准内容 text = '''Line001: 我是字符串, p j g'Hello', "Are you OK",这不是中文。 Line002: url/a=?backup-2021_01_28.zip''' encoded=b64encode(text) decoded=b64decode(encoded) # 打印输出 print(' 原始字符串 '.center(60, '*')) print(text) print(' 编码字符串 '.center(60, '*')) print(encoded) print(' 解码字符串 '.center(60, '*')) print(decoded) print('*'*65)
以下是执行结果。
************************** 原始字符串 *************************** Line001: 我是字符串, p j g'Hello', "Are you OK",这不是中文。 Line002: url/a=?backup-2021_01_28.zip ************************** 编码字符串 *************************** TGluZTAwMTog5oiR5piv5a2X56ym5LiyLCBwIGogZydIZWxsbycsICJBcmUgeW91IE9LIu-8jOi_meS4jeaYr-S4reaWh-OAggpMaW5lMDAyOiB1cmwvYT0_YmFja3VwLTIwMjFfMDFfMjguemlw ************************** 解码字符串 *************************** Line001: 我是字符串, p j g'Hello', "Are you OK",这不是中文。 Line002: url/a=?backup-2021_01_28.zip *****************************************************************