服务器接⼝json格式的数据协议
今天给⼤家介绍⼀下我觉的⽐较好的CS架构数据通讯时数据格式,这⾥讲下json格式的定义
python请求并解析json数据json格式的优点(摘⾃⽹络)
A.数据格式⽐较简单,易于读写,格式都是压缩的,占⽤带宽⼩;
B.易于解析,客户端JavaScript可以简单的通过eval()进⾏JSON数据的读取;
C.⽀持多种语⾔,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语⾔,便于
服务器端的解析;
D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调⽤,PHP服务器端的对象、数组等能
直接⽣成JSON格式,便于客户端的访问提取;
E.因为JSON格式能直接为服务器端代码使⽤,⼤⼤简化了服务器端和客户端的代码开发量,且完成任
务不变,并且易于维护。⽬的是为了满⾜app展⽰和交互的业务,下边我来说下我之前的⽅案
json通⽤字段说明:
sorry:server is too busycode:为服务器⾃定义的响应码
mes:对code的描述,⼀般对错误的响应码进⾏描述,⽅便调⽤者处理不同种错误情况
data:数据体
⼀、json格式
1)⼀条数据:
{“code”:200,”mes”:”“,”data”:{}}
例如:login接⼝
成功:
{"code":200,"mes":"","data":{"user":{"id":"111111","name":"张三"...},"access_token":"token"}}
失败:
{"code":200,"mes":"server error","data":{}}
2)多条数据:
{"code":200,"mes":"","data":[{},{}]}
例如:新闻列表接⼝
{"code":200,"mes":"","data":
[{"id":"000000","title":"国庆节","content":"今天国庆节!","time":"2015-10-1 18:00:00"},
{"id":"000001","title":"春节","content":"今天春节!","time":"2015-1-1 00:00:00"]}}
失败:
{"code":200,"mes":"server error","data":{}}
⼆、数据列表分页策略
1)按照时间排序:new -> old
例如新闻列表接⼝
⼊参为timeStamp(时间戳,1970年到⽬前的毫秒数),pageSize(⼀页显⽰条数)
重定向和转发的区别英语第⼀页数据:timeStamp=0编程语言排行2022年1月份
other数据:timeStamp=(此处传⼊最后⼀条新闻的时间戳)
字段说明:"page":{"pageCount":50,"pageNum":2,"pageSize":10,"newCount":5}
pageNum:当前第⼏页
pageSize:⼀页显⽰条数
newCount:新增加载的条数
成功:
{"code":200,"mes":"","page":{"pageCount":50,"pageNum":2,"pageSize":10,"newCount":5},"data":
[{"id":"000000","title":"国庆节","content":"今天国庆节!","time":"2015-10-1 18:00:00"},
{"id":"000001","title":"春节","content":"今天春节!","time":"2015-1-1 00:00:00"}]}
2)传统的web页⾯分页⽅式
例如新闻列表接⼝
⼊参:pageNum(当前页数),pageSize(⼀页显⽰条数),id(新闻id)
注意:只所以传id,因为pageCount是⼀直变的(对于后台新增新闻记录的场景)
第⼀页数据:pageNum=1,pageSize=10
第⼆页数据:pageNum=2,pageSize=10,id="000000"
字段说明:"page":{"pageCount":50,"pageNum":2,"pageSize":10,"newCount":5}
pageNum:当前第⼏页
pageSize:⼀页显⽰条数
newCount:新增加载的条数
js简单加密成功:
{"code":200,"mes":"","page":{"pageCount":50,"pageNum":2,"pageSize":10,"newCount":5},"data":
[{"id":"000000","title":"国庆节","content":"今天国庆节!","time":"2015-10-1 18:00:00"},
{"id":"000001","title":"春节","content":"今天春节!","time":"2015-1-1 00:00:00"}]}
三、数据⾯向对象化json(可以重⽤javabean)
新闻详情
Bean:
NewsDetailBean:
private String id;
private String author;
private String title;
private String content;
private long timeStamp;
private NewsTypeBean type;
NewsTypeBean:
private String id;
private String name;
{"code":200,"mes":"","data":
{"id":"dfd3a1f78944","author":"晴天霹雳","title":"今天天⽓如何?","content":"今天晴天!","timeStamp":1446445053350,
"type":{"id":"ae6df4bc329b","name":"⽣活"}}}
四、错误统⼀处理
1)server 内部异常
code=500 mes=”…….”
2)token过期或者被T下线
token过期:code=403 mes=”登录超时,请重新登录验证”
被T下线 :code=402 mes=”您的账号在别处登录,为了您账号安全,请尽快修改密码” (两种通知⽅式:⽤户主动请求或者push下线消息)
五、优化传输
可通过gzip进⾏压缩传输
POST(适⽤于提交数据到服务器请求)
名词加en推荐⽤json格式传输
{“author”:”晴天霹雳”,”content”:”今天晴天!”,”title”:”今天天⽓如何?”,”typeId”:”ea59ebee-b4d1-4cf9-a0d7-
7be9a4f890c6”}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论