关于restful接口返回值设计有一些疑问,目前我采用的是
Result { status,msg,data}
当status 为 0 时 代表请求成功 data里有返回的数据 为Json格式 msg里没有数据
当status 为 1 时 代表请求失败 data里没有数据 msg里有错误提示语
使用了一段时间发现了几个问题
请求成功的时候 data里的数据格式 定义 需要人为的告诉对方 这个数据的定义的类名,所以想增加一个参数 传入类名 例如: type:OrderDTO 这样对方就可以直接反序列化(我已把数据格式定义DTO的jar包挂在nexus上面),但是感觉作为一个接口提供方,平台性质的,感觉这样太调皮了,特别是Ios也没办法用你这样的数据格式,andorid就很方便可以直接用。
请求失败的时候 ,我的msg里统一是英文处理格式,是把国际化放在客户端上面,还是放在后台,这样后台每次都要去改文案提示语,以及多国语言,纠结。
重新看了淘宝,微信,开放平台的设计,都感觉返回值不是很友好,不好统一处理。
例如:
正常返回:
{
"trade_snapshot_get_response":{
"trade":{
}
}
}
异常返回:
{
"error_response":{
"code":50,
"msg":"Remote service error",
"sub_code":"isv.invalid-parameter",
"sub_msg":"非法参数"
}
}
但是他们都会设置全局的状态码,感觉也没太大的好处,不如直接返回错误信息,干嘛还要状态码。
各位走过路过的朋友,麻烦给点建议。
===========================
更新:
感觉全局状态码很麻烦,要公布一份全局状态码给别人,例如html形式,而且还要维护。不如直接在代码里返回给对方错误信息提示,例如:msg:errorId 代表Id错误 对面根据errorId 提示对应的文案术语。。
感觉比 返回 状态码 40001 代表 Id错误要好一点。。
=================================================
更新:
总感觉用状态码的话,简单是定义接口简单,烦躁的地方是 维护这个状态码 另外 一个接口的可能情况 别人不知道 难道要所有状态码里的异常情况都判断一遍么?微信公众平台,淘宝公众平台就是这样干的,这也太不科学了
推荐你学习 REST 层级划分模型,如下图:

英文版 Richardson Maturity Model
中文版 RMM Level -- 对于REST的层级划分模型