例如一个接口,能够收到登录、更改密码两种请求,收到的 json 结构如下:
{
"t":"l", //登录
"username":"name1",
"password":"pass1"
}
或
{
"t":"cp", // 更改密码
"username":"name1",
"oldpass":"oldpass",
"newpass":"newpass"
}
在未反序列化之前后端无法知道数据属于哪个结构,只能直接反序列化到通用 map 或者先反序列化一次获得类型 t 的值,然后再次解析到具体结构。
但是这两个方案都有些小问题,静态语言下,map 通用结构使用不方便;两次反序列化方案浪费 cpu 资源。
原来是尽可能的使用不同的接口处理不同结构的数据,tcp 连接等二进制协议则自定义包头来区分,一直没什么大问题。
但是最近在处理 websocket 大量消息,就不太好用了。不可能每个结构使用一个独立的 websocket 连接,而常用的二进制协议包头方案也因为 web 前端不太方便不能使用(我不是专业前端,可能会有误解)。
那么对于这种情况,静态类型语言后端怎么处理比较好?
目前我这里的方案是,固定成为类似这样的结构:
{
"t":"?",
"login":{
"username":"user1",
"password":"pass1",
},
"changepassword":{
"username":"name1",
"oldpass":"oldpass",
"newpass":"newpass"
}
}
login 时 login 字段有值,changepassword 为 null 的方式工作。请教下,还有其他更好的方案吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.