服务器接口json格式的数据协议

今天给大家介绍一下我觉的比较好的CS架构数据通讯时数据格式,这里讲下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通用字段说明:

code:为服务器自定义的响应码
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
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:新增加载的条数
      成功:
      {"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进行压缩传输

两种请求方式get or post
GET(多数适用于查询请求)
参数拼接的方式请求
例如:http://www.alfox.com/api/v1/findFourmList?pageNum=1&&pageSize=10

POST(适用于提交数据到服务器请求)
推荐用json格式传输
{“author”:”晴天霹雳”,”content”:”今天晴天!”,”title”:”今天天气如何?”,”typeId”:”ea59ebee-b4d1-4cf9-a0d7-7be9a4f890c6”}

你可能感兴趣的:(android,网络)