前后端分离开发1-(请求和响应)

1 为什么要用JSON格式

WebServoce xml格式除了根据WSDL自动化外,实在想不出来有什么好处,同等数据较json大了至少1/3.自动化解析效率太差,手动解析比json麻烦.
json可以显著提升服务端和客户端程序性能,节约网络流量,同时json相对字符串来说格式更规范.json标准规定的数据值类型共以下几种:

  • string
  • number
  • object
  • array
  • true
  • false
  • null

1.1 string

  • int64类型字符串[当int64值比较大时,会导致javascript parseInt解析的值错误(gson,qt等均不能正确转换),因此int64使用字符串输入输出]
  • double类型字符串[小数修约后需要保持小数位数,因此需要转换为字符串类型]
  • ISO 8601格式的dateTime值
  • base64编码
  • 普通文本

1.2 number

  • int32:在接口输出时为int类型.值范围-2147483648至+2147483647.
  • int64:输出为json时会丢失精度(IEEE754,number值范围为-2(53)+1~2(53)-1,-9,007,199,254,740,991-9,007,199,254,740,991,符合IEEE754的程序包如gson,qt等均不能正确转换).因此int64使用字符串输出.除javascript外如需使用时注意转换类型.javascript使用时不要解析直接使用此数字字符串,当再次传递给服务器时由服务器端解析.
  • double:对于json来说,不区分float4/float8,全部为float8.如果修约则转换为double类型字符串.

数据规范后,解析也方便,可减少开发过程中失误,容易发现一下隐藏的bug,因此选择用json做为请求应答格式.

2 Response应答格式

应答数据分为四种格式,其中状态码(status)和执行时长(elapsed)每种应答格式都包含.

status 值为下列值之一

  • 200 表示服务器执行请求成功,输出结果为记录集
  • 302 表示服务器要求客户端重新登录
  • 500 表示服务器执行请求发生异常,此时应该打印异常消息结构"error"
  • 511 表示权限不足,此时应该打印异常消息结构"error"
  • 512 表示验证码过期结构体,此时应该打印异常消息结构"error"
  • 513 表示验证码Token过期结构体,此时应该打印异常消息结构"error"
  • 514 手机号还未注册结构体,此时应该打印异常消息结构"error"

elapsed

  • 表示服务器处理这个请求一共花了多少毫秒,单位为毫秒

记录集结构体 详细模式和精简模式在开发前根据自己的需求选择一个即可.

2.1 异常结构体

2.1.1 服务器异常信息

{
  "status":500,
  "error":"服务器具体的异常信息",
  "elapsed":0.001
}

2.1.2 没有权限

{
  "status":511,
  "error":"服务器具体的异常信息",
  "elapsed":0.001
}

2.1.3 验证码过期结构体

{
  "status":512,
  "error":" 服务器具体的异常信息",
  "elapsed":0.001
}

2.1.4 验证码Token过期结构体

{
  "status":513,
  "error":" 服务器具体的异常信息",
  "elapsed":0.001
}

2.1.5 手机号还未注册

{
  "status":514,
  "error":"服务器具体的异常信息",
  "elapsed":0.001
}

2.2 服务器要求重新登录

{
  "status":302,
  "message":"服务器发送的消息内容",
  "url":"重新登录的url"
  "elapsed":0.001
}

2.3 记录集结构体-详细模式

只有200==status时此部分内容才有效

{
  "status":200,
  "recordset":[[{"idc":"xxx","name":"采xxxx","pre1h":0.0}]],
  "elapsed":0.001
}

recordset 表示结果集

  • recordset[0] 表示获取第一个结果
  • recordset[0][0] 表示获取第一个结果中的第一行

    在实际使用中,应先获取某一个查询结果,然后检查是否为null,然后再使用下一级,获取行和列同理.

2.4 记录集结构体-精简模式

只有200==status时此部分内容才有效

{
  "status":200,
  "recordset":[[[]]],
  "token":"",
  "elapsed":0.001
}

recordset 表示结果集

  • recordset[0] 表示获取第一个结果
  • recordset[0][0] 表示获取第一个结果中的第一行
  • recordset[0][0][0] 表示获取第一个结果中的第一行中的第一列
  • recordset[[],[[f1,f2,f3]]] 表示获取第一个没有返回的数据
  • recordset[[[null,f2,f3]]] 表示第一个结果中的第一行第一列的值为null
  • recordset[[[null,[f1,null],f3]]] 表示获取第一个结果中的第一行第二列为数组类型,数组的第二个值为null

在实际使用中,应先获取某一个查询结果,然后检查是否为null,然后再使用下一级,获取行和列同理.

2.5 输出示例

输出只包含一个查询结果的json,共x行,每行5列.

2.5.1 详细模式

{"status":200,"recordset":[[{"objectid":2571,"parentid":2570,"name":"昆明市","code":"530100","isparent":true},{"objectid":2586,"parentid":2570,"name":"曲靖市","code":"530300","isparent":true},{"objectid":2596,"parentid":2570,"name":"玉溪市","code":"530400","isparent":true},{"objectid":2606,"parentid":2570,"name":"保山市","code":"530500","isparent":true},{"objectid":2612,"parentid":2570,"name":"昭通市","code":"530600","isparent":true},{"objectid":2624,"parentid":2570,"name":"丽江市","code":"530700","isparent":true},{"objectid":2630,"parentid":2570,"name":"普洱市","code":"530800","isparent":true},{"objectid":2641,"parentid":2570,"name":"临沧市","code":"530900","isparent":true},{"objectid":2650,"parentid":2570,"name":"楚雄彝族自治州","code":"532300","isparent":true},{"objectid":2661,"parentid":2570,"name":"红河哈尼族彝族自治州","code":"532500","isparent":true},{"objectid":2675,"parentid":2570,"name":"文山壮族苗族自治州","code":"532600","isparent":true},{"objectid":2684,"parentid":2570,"name":"西双版纳傣族自治州","code":"532800","isparent":true},{"objectid":2688,"parentid":2570,"name":"大理白族自治州","code":"532900","isparent":true},{"objectid":2701,"parentid":2570,"name":"德宏傣族景颇族自治州","code":"533100","isparent":true},{"objectid":2707,"parentid":2570,"name":"怒江傈僳族自治州","code":"533300","isparent":true},{"objectid":2712,"parentid":2570,"name":"迪庆藏族自治州","code":"533400","isparent":true}]],"elapsed":31.164}

2.5.2 精简模式

{"status":200,"recordset":[[[2571,2570,"昆明市",530100,true],[2572,2571,"五华区",530102,false],[2573,2571,"盘龙区",530103,false],[2574,2571,"官渡区",530111,false],[2575,2571,"西山区",530112,false],[2576,2571,"东川区",530113,false],[2577,2571,"呈贡区",530114,false],[2578,2571,"晋宁区",530115,false],[2579,2571,"富民县",530124,false],[2580,2571,"宜良县",530125,false],[2581,2571,"石林彝族自治县",530126,false],[2582,2571,"嵩明县",530127,false],[2583,2571,"禄劝彝族苗族自治县",530128,false],[2584,2571,"寻甸回族彝族自治县",530129,false],[2585,2571,"安宁市",530181,false],[2586,2570,"曲靖市",530300,true],[2587,2586,"麒麟区",530302,false],[2588,2586,"沾益区",530303,false],[2589,2586,"马龙县",530321,false],[2590,2586,"陆良县",530322,false],[2591,2586,"师宗县",530323,false],[2592,2586,"罗平县",530324,false],[2593,2586,"富源县",530325,false],[2594,2586,"会泽县",530326,false],[2595,2586,"宣威市",530381,false],[2596,2570,"玉溪市",530400,true],[2597,2596,"红塔区",530402,false],[2598,2596,"江川区",530403,false],[2599,2596,"澄江县",530422,false],[2600,2596,"通海县",530423,false],[2601,2596,"华宁县",530424,false],[2602,2596,"易门县",530425,false],[2603,2596,"峨山彝族自治县",530426,false],[2604,2596," 新平彝族傣族自治县",530427,false],[2605,2596,"元江哈尼族彝族傣族自治县",530428,false],[2606,2570,"保山市",530500,true],[2607,2606,"隆阳区",530502,false],[2608,2606,"施甸县",530521,false],[2609,2606,"龙陵县",530523,false],[2610,2606,"昌宁县",530524,false],[2611,2606,"腾冲市",530581,false],[2612,2570,"昭通市",530600,true],[2613,2612,"昭阳区",530602,false],[2614,2612,"鲁甸县",530621,false],[2615,2612,"巧家县",530622,false],[2616,2612,"盐津县",530623,false],[2617,2612,"大关县",530624,false],[2618,2612,"永善县",530625,false],[2619,2612,"绥江县",530626,false],[2620,2612,"镇雄县",530627,false],[2621,2612,"彝良县",530628,false],[2622,2612,"威信县",530629,false],[2623,2612,"水富县",530630,false],[2624,2570,"丽江市",530700,true],[2625,2624,"古城区",530702,false],[2626,2624,"玉龙纳西族自治县",530721,false],[2627,2624,"永胜县",530722,false],[2628,2624,"华坪县",530723,false],[2629,2624,"宁蒗彝族自治县",530724,false],[2630,2570,"普洱市",530800,true],[2631,2630,"思茅区",530802,false],[2632,2630,"宁洱哈尼族彝族自治县",530821,false],[2633,2630,"墨江哈尼族自治县",530822,false],[2634,2630,"景东彝族自治县",530823,false],[2635,2630,"景谷傣族彝族自治县",530824,false],[2636,2630,"镇沅彝族哈尼族拉祜族自治县",530825,false],[2637,2630,"江城哈尼族彝族自治县",530826,false],[2638,2630,"孟连傣族拉祜族佤族自治县",530827,false],[2639,2630,"澜沧拉祜族自治县",530828,false],[2640,2630,"西盟佤族自治县",530829,false],[2641,2570,"临沧市",530900,true],[2642,2641,"临翔区",530902,false],[2643,2641,"凤庆县",530921,false],[2644,2641,"云县",530922,false],[2645,2641,"永德县",530923,false],[2646,2641,"镇康县",530924,false],[2647,2641,"双江拉祜族佤族布朗族傣族自治县",530925,false],[2648,2641,"耿马 傣族佤族自治县",530926,false],[2649,2641,"沧源佤族自治县",530927,false],[2650,2570,"楚雄彝族自治州",532300,true],[2651,2650,"楚雄市",532301,false],[2652,2650,"双柏县",532322,false],[2653,2650,"牟定县",532323,false],[2654,2650,"南华县",532324,false],[2655,2650,"姚安县",532325,false],[2656,2650,"大姚县",532326,false],[2657,2650,"永仁县",532327,false],[2658,2650,"元谋县",532328,false],[2659,2650,"武定县",532329,false],[2660,2650,"禄丰县",532331,false],[2661,2570,"红河哈尼族彝族 自治州",532500,true],[2662,2661,"个旧市",532501,false],[2663,2661,"开远市",532502,false],[2664,2661,"蒙自市",532503,false],[2665,2661,"弥勒市",532504,false],[2666,2661,"屏边苗族自治县",532523,false],[2667,2661,"建水县",532524,false],[2668,2661,"石屏县",532525,false],[2669,2661,"泸西县",532527,false],[2670,2661,"元阳县",532528,false],[2671,2661,"红河县",532529,false],[2672,2661,"金平苗族瑶族傣族自治县",532530,false],[2673,2661,"绿春县",532531,false],[2674,2661,"河口瑶族自治县",532532,false],[2675,2570,"文山壮族苗族自治州",532600,true],[2676,2675,"文山市",532601,false],[2677,2675,"砚山县",532622,false],[2678,2675,"西畴县",532623,false],[2679,2675,"麻栗坡县",532624,false],[2680,2675,"马关县",532625,false],[2681,2675,"丘北县",532626,false],[2682,2675,"广南县",532627,false],[2683,2675,"富宁县",532628,false],[2684,2570,"西双版纳傣族自治州",532800,true],[2685,2684,"景洪市",532801,false],[2686,2684,"勐海县",532822,false],[2687,2684,"勐腊县",532823,false],[2688,2570,"大理白族自治州",532900,true],[2689,2688,"大理市",532901,false],[2690,2688,"漾濞彝族自治县",532922,false],[2691,2688,"祥云县",532923,false],[2692,2688,"宾川县",532924,false],[2693,2688,"弥渡县",532925,false],[2694,2688,"南涧彝族自治县",532926,false],[2695,2688,"巍山彝族回族自治县",532927,false],[2696,2688,"永平县",532928,false],[2697,2688,"云龙县",532929,false],[2698,2688,"洱源县",532930,false],[2699,2688,"剑川县",532931,false],[2700,2688,"鹤庆县",532932,false],[2701,2570,"德宏傣族景颇族自治州",533100,true],[2702,2701,"瑞丽市",533102,false],[2703,2701,"芒市",533103,false],[2704,2701,"梁河县",533122,false],[2705,2701,"盈江县",533123,false],[2706,2701,"陇川县",533124,false],[2707,2570,"怒江傈僳族自治 州",533300,true],[2708,2707,"泸水市",533301,false],[2709,2707,"福贡县",533323,false],[2710,2707,"贡山独龙族怒族自治县",533324,false],[2711,2707,"兰坪白族普米族自治县",533325,false],[2712,2570,"迪庆藏族自治州",533400,true],[2713,2712,"香格里拉市",533401,false],[2714,2712,"德钦县",533422,false],[2715,2712,"维西傈僳族自治县",533423,false]],[[2571,2570,"昆明市",530100,true],[2572,2571,"五华区",530102,false],[2573,2571,"盘龙区",530103,false],[2574,2571,"官渡区",530111,false],[2575,2571,"西山区",530112,false],[2576,2571,"东川区",530113,false],[2577,2571,"呈贡区",530114,false],[2578,2571,"晋宁区",530115,false],[2579,2571,"富民县",530124,false],[2580,2571,"宜良县",530125,false],[2581,2571,"石林彝族自治县",530126,false],[2582,2571,"嵩明县",530127,false],[2583,2571,"禄劝彝族苗族自治县",530128,false],[2584,2571,"寻甸回族彝族自治县",530129,false],[2585,2571,"安宁市",530181,false],[2586,2570,"曲靖市",530300,true],[2587,2586,"麒麟区",530302,false],[2588,2586,"沾益区",530303,false],[2589,2586,"马龙县",530321,false],[2590,2586,"陆良县",530322,false],[2591,2586,"师宗县",530323,false],[2592,2586,"罗平县",530324,false],[2593,2586,"富源县",530325,false],[2594,2586,"会泽县",530326,false],[2595,2586,"宣威市",530381,false],[2596,2570,"玉溪市",530400,true],[2597,2596,"红塔区",530402,false],[2598,2596,"江川区",530403,false],[2599,2596,"澄江县",530422,false],[2600,2596,"通海县",530423,false],[2601,2596,"华宁县",530424,false],[2602,2596,"易门 县",530425,false],[2603,2596,"峨山彝族自治县",530426,false],[2604,2596,"新平彝族傣族自治县",530427,false],[2605,2596,"元江哈尼族彝族傣族自治县",530428,false],[2606,2570,"保山市",530500,true],[2607,2606,"隆阳区",530502,false],[2608,2606,"施 甸县",530521,false],[2609,2606,"龙陵县",530523,false],[2610,2606,"昌宁县",530524,false],[2611,2606,"腾冲市",530581,false],[2612,2570,"昭通市",530600,true],[2613,2612,"昭阳区",530602,false],[2614,2612,"鲁甸县",530621,false],[2615,2612,"巧家 县",530622,false],[2616,2612,"盐津县",530623,false],[2617,2612,"大关县",530624,false],[2618,2612,"永善县",530625,false],[2619,2612,"绥江县",530626,false],[2620,2612,"镇雄县",530627,false],[2621,2612,"彝良县",530628,false],[2622,2612,"威信县",530629,false],[2623,2612,"水富县",530630,false],[2624,2570,"丽江市",530700,true],[2625,2624,"古城区",530702,false],[2626,2624,"玉龙纳西族自治县",530721,false],[2627,2624,"永胜县",530722,false],[2628,2624,"华坪县",530723,false],[2629,2624,"宁蒗彝族自治县",530724,false],[2630,2570,"普洱市",530800,true],[2631,2630,"思茅区",530802,false],[2632,2630,"宁洱哈尼族彝族自治县",530821,false],[2633,2630,"墨江哈尼族自治县",530822,false],[2634,2630,"景东彝族自治县",530823,false],[2635,2630,"景谷傣族彝族自治县",530824,false],[2636,2630,"镇沅彝族哈尼族拉祜族自治县",530825,false],[2637,2630,"江城哈尼族彝族自治县",530826,false],[2638,2630,"孟连傣族拉祜族佤族自治县",530827,false],[2639,2630,"澜沧拉祜族自治县",530828,false],[2640,2630,"西盟佤族自治县",530829,false],[2641,2570,"临沧市",530900,true],[2642,2641,"临翔区",530902,false],[2643,2641,"凤 庆县",530921,false],[2644,2641,"云县",530922,false],[2645,2641,"永德县",530923,false],[2646,2641,"镇康县",530924,false],[2647,2641,"双江拉祜族佤族布朗族傣族自治县",530925,false],[2648,2641,"耿马傣族佤族自治县",530926,false],[2649,2641,"沧源佤族自治县",530927,false],[2650,2570,"楚雄彝族自治州",532300,true],[2651,2650,"楚雄市",532301,false],[2652,2650,"双柏县",532322,false],[2653,2650,"牟定县",532323,false],[2654,2650,"南华县",532324,false],[2655,2650,"姚安县",532325,false],[2656,2650,"大姚县",532326,false],[2657,2650,"永仁县",532327,false],[2658,2650,"元谋县",532328,false],[2659,2650,"武定县",532329,false],[2660,2650,"禄丰县",532331,false],[2661,2570,"红河哈尼族彝族自治州",532500,true],[2662,2661,"个旧市",532501,false],[2663,2661,"开远市",532502,false],[2664,2661,"蒙自市",532503,false],[2665,2661,"弥勒市",532504,false],[2666,2661,"屏边苗族自治县",532523,false],[2667,2661,"建水县",532524,false],[2668,2661,"石屏县",532525,false],[2669,2661,"泸西县",532527,false],[2670,2661,"元阳县",532528,false],[2671,2661,"红河县",532529,false],[2672,2661,"金平苗族瑶族傣族自治县",532530,false],[2673,2661,"绿春县",532531,false],[2674,2661,"河口瑶族自治县",532532,false],[2675,2570,"文山壮族苗族自治州",532600,true],[2676,2675,"文山市",532601,false],[2677,2675,"砚山县",532622,false],[2678,2675,"西畴县",532623,false],[2679,2675,"麻栗坡县",532624,false],[2680,2675,"马关县",532625,false],[2681,2675,"丘北县",532626,false],[2682,2675,"广南县",532627,false],[2683,2675,"富宁县",532628,false],[2684,2570,"西双版纳傣族自治州",532800,true],[2685,2684,"景洪市",532801,false],[2686,2684,"勐海县",532822,false],[2687,2684,"勐腊县",532823,false],[2688,2570,"大理白族自治州",532900,true],[2689,2688,"大理市",532901,false],[2690,2688,"漾濞彝族自治县",532922,false],[2691,2688,"祥云县",532923,false],[2692,2688,"宾 川县",532924,false],[2693,2688,"弥渡县",532925,false],[2694,2688,"南涧彝族自治县",532926,false],[2695,2688,"巍山彝族回族自治县",532927,false],[2696,2688,"永平县",532928,false],[2697,2688,"云龙县",532929,false],[2698,2688,"洱源县",532930,false],[2699,2688,"剑川县",532931,false],[2700,2688,"鹤庆县",532932,false],[2701,2570,"德宏傣族景颇族自治州",533100,true],[2702,2701,"瑞丽市",533102,false],[2703,2701,"芒市",533103,false],[2704,2701,"梁河县",533122,false],[2705,2701,"盈江县",533123,false],[2706,2701,"陇川县",533124,false],[2707,2570,"怒江傈僳族自治州",533300,true],[2708,2707,"泸水市",533301,false],[2709,2707,"福贡县",533323,false],[2710,2707,"贡山独龙族怒族自治县",533324,false],[2711,2707,"兰坪白族普米族自治县",533325,false],[2712,2570,"迪庆藏族自治州",533400,true],[2713,2712,"香格里拉市",533401,false],[2714,2712,"德钦县",533422,false],[2715,2712,"维西傈僳族自治县",533423,false]]],"elapsed":16.914000000000001}

好了,现在我们已经明确Request和Resopnse后,以后所有的工作都围绕这个开展.不管你的后端是由什么语言开发(C/Java/C#/Python等等),只要遵循上述定义前端就能正常工作.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值