json 返回多种对象

2018-04-18 00:53:48 +08:00
 EGOISTK21

毕设是一个游戏,后端用的 flask,前端是安卓。前端用 rxjava、retrofit 和 gson adapter 处理 json。

目前遇到一个问题:有的 API 是消费金币的,比如点击之后会获得多种不同的商品(类似王者荣耀水晶抽奖),那么后端返回的 json 里的数据中怎么既包含商品数组又包含消费后的金币余额。不考虑余额的 json 大概是这样的

json<br>{<br> “ code ” : 200<br> “ data ” : {<br> [{序列化后英雄对象}, {序列化后英雄碎片}, {序列化后体验卡}]<br> }<br> “ msg ” : null<br>}<br><br>

现在的问题就是如何把余额也放到 data 这个数组里面,并且安卓前端能够顺利的按类型反序列化,我的初步想法是 data 里用键值对存对象类型和对象内容,但总觉得不优雅,苦于 Google 不到相关问题,遂来 v 站问一下各位在职的前辈们,这种 API 业内是怎么实现的。

9998 次点击
所在节点    Android
7 条回复
MeteorCat
2018-04-18 01:01:47 +08:00
点击抽奖之后,你需要传递给服务端的是你做出了抽奖动作,之后服务端返回你中奖的道具 ID,你拿着道具 ID 去找你本地道具资源并且自行在你本地游戏端做扣除工作
MeteorCat
2018-04-18 01:04:15 +08:00
余额没必要放到数组里面,除非有那种折扣类型或者减免优惠的,否则你只需要拿到抽奖成功之后对应道具 ID 扣除自己本地游戏端余额
MeteorCat
2018-04-18 01:20:27 +08:00
如果你有实现外部发放道具机制(正式游戏都有运营管理后台给予道具弹出浮窗补发和邮件公告补发)的话,实际上你抽奖的流程其实是,你抽奖的行为发送给服务端,之后服务端来解决你抽出什么道具,并返回道具 ID (这个待定,因为有的游戏本地打包对应道具 ID+道具表信息,有的游戏确实是让服务端直接返回获取道具列表,我个人倾向打包本地资源,服务端只返回 ID 来节约发送字节数),服务器就是弹窗通知你获得什么道具,当到了这里就是有很多处理方法:1.如果是不变的,没有太大波动,直接游戏端扣除消耗的金额(参照手游很多 5、10、30 元固定额度充值加成); 2.包含变动因素的,客户端需要拿到服务端的最新金额数(首充 10 送 5 金币); 3.有抽奖获得角色信息变动的,成功之后自己请求自己的信息接口更新(抽奖获得头像立即使用更新自己头像)
MonoLogueChi
2018-04-18 01:22:57 +08:00
自己瞎扯了两种通信方式,以前我都是自己坐着玩的,所以不需要校验,我也不能保证我给的校验方式能不能实现
方案 1
客户端发出请求,询问商品种类和价格
后端给出商品名称和价格,客户端加载出来
客户端给出信息,并告诉后端买了什么东西,同时计算余额返回给后端
后端查询价格,计算当前余额,确定余额信息正确,返回给客户端购买成功的信息
客户端显示交易完成

方案 2
客户端发出请求,询问商品种类和价格
后端给出商品名称和价格,客户端加载出来
客户端根据购买产品计算余额,并将余额返回给后端
后端收到后返回给客户端信息,余额已储存
客户端显示交易完成

我不知道你具体实现方式,后端是没有数据库的吗,如果有数据库的话应该是很容易实现的吧。如果是使用 JSON 文件代替数据库的话,余额这类和角色属性相关的东西,应该不会和物品写在一起吧
EGOISTK21
2018-04-18 08:19:37 +08:00
@MeteorCat 听你的我放心在本地减了,原本担心数据不一致,现在想到如果有活动就返回非 200 状态码,要求请求活动优惠价格的 API 即可,如果是 200 那就直接本地扣除相应金额
EGOISTK21
2018-04-18 08:21:26 +08:00
@MonoLogueChi 后端用的 mysql 数据库,你这种应该算是电商平台的交易流程吧,我的游戏想做的是尽量减少 API 请求
ai277014717
2018-04-18 09:37:36 +08:00
放在 data 里正好啊。给数组起个名字而已 xxlist

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/447642

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX