毕设是一个游戏,后端用的 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 业内是怎么实现的。
1
MeteorCat 2018-04-18 01:01:47 +08:00 via Android
点击抽奖之后,你需要传递给服务端的是你做出了抽奖动作,之后服务端返回你中奖的道具 ID,你拿着道具 ID 去找你本地道具资源并且自行在你本地游戏端做扣除工作
|
2
MeteorCat 2018-04-18 01:04:15 +08:00 via Android
余额没必要放到数组里面,除非有那种折扣类型或者减免优惠的,否则你只需要拿到抽奖成功之后对应道具 ID 扣除自己本地游戏端余额
|
3
MeteorCat 2018-04-18 01:20:27 +08:00 via Android 1
如果你有实现外部发放道具机制(正式游戏都有运营管理后台给予道具弹出浮窗补发和邮件公告补发)的话,实际上你抽奖的流程其实是,你抽奖的行为发送给服务端,之后服务端来解决你抽出什么道具,并返回道具 ID (这个待定,因为有的游戏本地打包对应道具 ID+道具表信息,有的游戏确实是让服务端直接返回获取道具列表,我个人倾向打包本地资源,服务端只返回 ID 来节约发送字节数),服务器就是弹窗通知你获得什么道具,当到了这里就是有很多处理方法:1.如果是不变的,没有太大波动,直接游戏端扣除消耗的金额(参照手游很多 5、10、30 元固定额度充值加成); 2.包含变动因素的,客户端需要拿到服务端的最新金额数(首充 10 送 5 金币); 3.有抽奖获得角色信息变动的,成功之后自己请求自己的信息接口更新(抽奖获得头像立即使用更新自己头像)
|
4
MonoLogueChi 2018-04-18 01:22:57 +08:00 via Android
自己瞎扯了两种通信方式,以前我都是自己坐着玩的,所以不需要校验,我也不能保证我给的校验方式能不能实现
方案 1 客户端发出请求,询问商品种类和价格 后端给出商品名称和价格,客户端加载出来 客户端给出信息,并告诉后端买了什么东西,同时计算余额返回给后端 后端查询价格,计算当前余额,确定余额信息正确,返回给客户端购买成功的信息 客户端显示交易完成 方案 2 客户端发出请求,询问商品种类和价格 后端给出商品名称和价格,客户端加载出来 客户端根据购买产品计算余额,并将余额返回给后端 后端收到后返回给客户端信息,余额已储存 客户端显示交易完成 我不知道你具体实现方式,后端是没有数据库的吗,如果有数据库的话应该是很容易实现的吧。如果是使用 JSON 文件代替数据库的话,余额这类和角色属性相关的东西,应该不会和物品写在一起吧 |
5
EGOISTK21 OP @MeteorCat 听你的我放心在本地减了,原本担心数据不一致,现在想到如果有活动就返回非 200 状态码,要求请求活动优惠价格的 API 即可,如果是 200 那就直接本地扣除相应金额
|
6
EGOISTK21 OP @MonoLogueChi 后端用的 mysql 数据库,你这种应该算是电商平台的交易流程吧,我的游戏想做的是尽量减少 API 请求
|
7
ai277014717 2018-04-18 09:37:36 +08:00
放在 data 里正好啊。给数组起个名字而已 xxlist
|