从bug看《全民英雄》的接口设计
最近玩全民英雄,然后遇到一个bug,导致我一个账号卡死,不得不重玩新号。bug如下:
-------------------------------------------------
在一个装备合成的引导,我点了合成,接着刚好断网,然后重连网络的时候发现合成的材料消失,可是依然处于合成的引导。这时候显然已经没法合成,而引导又是强制性的,因此没办法往下玩了。
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
-------------------------------------------------
这个问题其实我把它归类为“带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。这种接口的设计很容易出bug,服务端应该记录好每个接口的状态,甚至对一些请求的状态做持久化。举个极端点的例子,不过这个例子比较明显,一般没人这么做!
比如:以普通RPG中合成神器为例,假设合成需要选择2个材料, 然后点击合成。如果这么设计这个接口:
1、当玩家选择第一个材料的时候,请求后端, 后端扣除并记录当前材料
2、当玩家选择第二个材料的时候,请求后端,后端扣除并记录当前材料
3、当玩家点击合成时,后端根据前面记录的两个材料 生成一个新装备给玩家
因为这个错误实在太明显,导致大家不会那么做。而其实这个问题和前面《全名英雄》的处理本质是一样的。只要断网,而后端没做好第1、2步请求的状态持久化,那么材料必定丢失。(如果有记录玩家选过那两个材料,那玩家还能继续点击合成直接第三个接口,而不至于材料被扣除却没合成)
-------------------------------------------------
回到《全民英雄》那个例子,既然现在玩家是因为先请求和合成,成功合成装备并扣除了材料,然后断网才没请求到记录引导状态。那能不能换个顺序:玩家点击合成之后,先请求记录引导状态再请求合成。这样它如果中间出现断网,顶多就是下次连接的时候引导不见了,但不至于材料被扣除,也不会导致卡死在引导界面(因为更新引导状态已经请求过了,重新连接会获得下一步引导的状态)。这样确实是解决了BUG,但是这样玩家就缺少了一次引导,解决的也不是很彻底。
-------------------------------------------------
我们回想一下,刚刚说的 “带状态的接口调用”,即一个接口的请求需要依赖上一个请求的接口。那其实,如果只请求一个独立接口,就不会有这种问题。那请求的应该是合成接口呢,还是引导接口呢?
个人认为,请求合成接口更合适。因为后端本来就有合成接口,只需要后端在合成的时候派发一个事件出去,让引导模块捕获这个事件,然后重置自己的引导状态就可以。这样还省一个接口请求,还节省你流量,多贴心啊!
欢迎大家讨论!
从bug看《全民英雄》的接口设计相关推荐
- 优秀的API接口设计原则及方法
一旦API发生变化,就可能对相关的调用者带来巨大的代价,用户需要排查所有调用的代码,需要调整所有与之相关的部分,这些工作对他们来说都是额外的.如果辛辛苦苦完成这些以后,还发现了相关的bug,那对用户的 ...
- “淘宝” 开放平台接口设计思路
最近对接的开放平台有点多,像淘宝.京东.快手.抖音等电商平台的开放平台基本对接了个遍,什么是CRUD BODY也许就是这样的吧!!! 虽然对接各大开放平台没啥技术含量,但咱也得学点东西不是,不能白对接 ...
- 总结常见的违背Rest原则的接口设计做法
此文已由作者郑华斌授权网易云社区发布. REST这词我们常常挂在嘴边,比如"开发一个rest接口",又比如Spring项目的代码: @RestControllerpublic cl ...
- 腾讯技术分享:微服务接口设计原则
来源|腾讯技术工程(ID:Tencent_TEG) 本文结合自身后台开发经验,从高可用.高性能.易维护和低风险(安全)角度出发,尝试总结业界常见微服务接口设计原则,帮助大家设计出优秀的微服务. 1.前 ...
- php后台对接ios,安卓,API接口设计和实践完全攻略,涨薪必备技能
2016年12月29日13:45:27 关于接口设计要说的东西很多,可能写一个系列都可以,vsd图都得画很多张,但是由于个人时间和精力有限,所有有些东西后面再补充 说道接口设计第一反应就是restf ...
- 接口设计,这36个核心知识点一定要注意
目录 前言 设计好接口的 36 个锦囊 总结 前言 作为后端开发,不管是什么语言,Java.Go 还是 C++,其背后的后端思想都是类似的.我们做后端开发工程师,主要工作就是:如何把一个接口设计好.所 ...
- 聊聊接口设计的36个小技巧
前言 大家好,作为后端开发,不管是什么语言,Java.Go还是C++,其背后的后端思想都是类似的.后面打算出一个后端思想的技术专栏,主要包括后端的一些设计.或者后端规范相关的,希望对大家日常工作有帮助 ...
- 像科学家一样思考python答案_像计算机科学家一样思考python-第4章 案例研究:接口设计...
系统环境 ubuntu18 4.1turtle模块 模块一开始导入turtle模块就报错了 1 Python 3.6.5 (default, Apr 1 2018, 05:46:30)2 [GCC 7 ...
- 36 个接口设计,是真的好用
作为后端开发,不管是什么语言,Java.Go还是C++,其背后的后端思想都是类似的.后端开发工程师,主要工作就是:如何把一个接口设计好.所以,今天就给大家介绍,设计好接口的36个锦囊. 1. 接口参数 ...
最新文章
- gpu处理信号_在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
- TF之NN:利用神经网络系统自动学习散点(二次函数+noise+优化修正)输出结果可视化(matplotlib动态演示)
- java类似goto_原来java中也有类似goto语句的标签啊--java label标签
- 用计算机进行有理数计算时,鲁教版六上2.11《用计算器进行有理数的计算》word学案.doc...
- 201521123078 《Java程序设计》第6周学习总结
- opencv入门课程:彩色图像灰度化和二值化(采用skimage库和opencv库两种方法)
- python实现采样函数_python中resample函数实现重采样和降采样代码
- Maven学习总结(56)—— Maven、Gradle 、 Ant 哪一个构建工具最适合你?
- 中心对称又是轴对称的图形_【笔记-公务员amp;事业单位】行测:图形推理
- 第三节基础篇—SQL的约束
- Hive多用户模式搭建
- 【TSP】基于matlab模拟退火算法求解旅行商问题【含Matlab源码 1129期】
- PDF417数据容量
- 微信支付商户平台可以绑定多个不同主体的小程序或微信公众号
- 机器人读懂人心的九大模型
- FLASH连连看算法分析及源代码
- 游戏加加:科学的算法+公平的引擎=最真实的BenchMark
- Java实现Google的S2算法工具类
- 微信小程序开发—— tabbar 配置
- 随机地图生成--自己的一次尝试