服务端开发的一些小问题
问题
Q:接口一般规则
A:参照:
http://nudui.github.io/2015/05/16/api%E6%8E%A5%E5%8F%A3%E8%A7%84%E5%88%99/
Q:如何保持会话,登录时到底发生了神马
A:不建议使用httpsession,如果用httpsession,则须做好session共享策略。我的方案:http://nudui.github.io/2015/05/16/app%E4%BC%9A%E8%AF%9D%E6%96%B9%E6%A1%88/
标注一下:这个方案不是我原创,是跟一老大哥学的,消化了好一阵时间。(不过,当我消化了这个方案,这应该就算是我的了吧)
Q:如果有人刷我的接口肿么办
A:最近我刚刷了一个场子不小的app的短信验证码接口,详情 及 解决办法 请看如下:http://blog.csdn.net/z744760295/article/details/53345113
Q:选用云存储还是自存储
A:前期建议选用云存储,云存储平台都会有免费额度。七牛云提供10G空间,100万次GET请求;阿里云提供5G,请求次数也不会太低,团队初期足够了。
Q:那如果有一天leader要求存储必须自有化,那已在db中存储的云资源uri怎么办
A:使用云存储之前,就必须得考虑好这个问题,七牛和ali都提供自定义域名服务,在自己的域名下做配置,这样图片uri就是通过自有域名进行资源定位。此时,将云中有用的图片下载,根据路径进行文件服务器配置即可。这样,原存储云的文件就可以转入自有服务器,且uri不会改变。
Q:如果我想一直使用云,某天10G空间不够了怎么办
A:我这有个投机取巧的办法:如果某天在七牛上的空间已经使用85%,这时就着手再申请一个账号好了,在服务端代码中改一下七牛的配置,切换到第二个账号,这不就ok了吗,原uri不必去管,反正七牛也不会删掉(七牛也不知道这两个账号有啥关联),不过在第二个账号绑定域名时,还是再开一个子域名比较好,不要对第一个账号的资源进行侵扰。
Q:如果某天七牛发现我的小聪明,把我封掉怎么办
A:无论是哪个云,在封号前必定多方联络你,这时可把那些云图片资源取出,再放入其他的云,执行同样的策略。
Q:如果其他的云也封怎么办,不能一直这样下去啊
A:上述策略,都是为了省!省!省!省,则必定有一些荆棘。不过,就算是这个云把你封掉,也不见得就没办法。【微博】或者其他大sns,它肯定不会删图片,它还开放了各种接口,咱们可以把微博变成我们的图片服务器,这样不就好了吗。微博的水印问题,网上能找到设置方法。不过,把微博改成自己的文件服务器,是不是挺cool的。
Q:短信接口都有验证码条数限制,这个也能有对策吧
A:没错,这个策略与云存储方案类似。单个短信平台对于验证码会有单独的限制,从3条/h ~ 7条/h 不等,我在做app的时候,也会遇到这个问题,产品要求必须每小时能发8条,打电话给短信客服,确实是可以增加。但是,总觉着不舒服,于是有了以下的方案:在阿里大鱼上申请两个(或多个)账号,短信签名全部一致(不要质疑短信平台是否会允许,亲测有效,反馈给阿里大鱼,人家说没遇到过这种情况,也就默许了)。之后再代码中,只要第一个账号发送失败,就走第二个账号。
当然,如果不嫌麻烦,也可以使用多个不同平台的方式,只是每个平台的接口都不一样。使用单平台多账号,好处是扩展方便,不用改多少代码。
Q:app版本控制怎么玩
A:看到网上好多人说单独开一个接口,判断是否需要更新app。这个方案还可以吧,只是需要移动端每次打开app时请求服务端,略有些麻烦。其实大可不必,服务端完全不需要开辟单独接口:移动每次与服务端交互,服务端在header中能获取这个请求的具体版本号,缓存必须更新的版本号的value,在拦截器中计算这个版本号的value,看看是否需要强制更新,如果需要,则在拦截器阶段就返回错误码给app,app根据错误码进行提示、下载。这个方案的好处是,无须移动开发人员做太多,覆盖面广,网上的方案只有在特定某个动作触发校验,我的方案是全局校验。
Q:有的app(回家吃饭app),换了个账号登录,竟然收到了原账号的消息,这咋回事
A:‘回家吃饭’这个app,业务真的不错,不过它确实有那个问题(八月份的时候)。
先来说说这是怎么发生的:app登录后,会将devicetoken发送给服务端,服务端将devicetoken与用户id进行绑定(允许一个账号多点登录),这样每次需要push的时候,就可以根据devicetoken进行定向push。那为什么会收到原账号的push呢,因为只 做了bind,没做unbind ,‘回家吃饭’没考虑 app不重新下载而换号登录 的问题(重新下载app时,devicetoken会发生变化)!
怎么解决:退出登录时服务端必须解绑相应的devicetoken。