Rails 求客户端 API 开发经验

lytsingsun · 发布于 2013年10月30日 · 最后由 zfjoy520 回复于 2013年10月31日 · 2433 次阅读

第一次用ruby开发客户端的api,总感觉复用性不高,性能也不好。如何能达到比较好的效果?求经验!

共收到 11 条回复

客户端的api????????????和服务器端的api有什么关系???

多跟客户端开发人员沟通,写出他们用着比较舒服的接口。

客户端用Faraday,服务端用Grape

#1楼 @liwei78 手机端调用服务器的接口,返回一些json数据

#2楼 @xiaogui 呵呵,收到。能不能对代码的复用性和性能给点意见?

#5楼 @lytsingsun 复用性不太明白,要看你代码。性能不好8成是没做缓存

#5楼 @lytsingsun 先说几点个人建议吧: 1、返回 json 数据,最好外面包一层校验,能让客户端快速知道,这数据合不合法、是否有错; 2、代码复用方面,主要看你项目的实际情况; 3、最好是能给客户端进行充分的沟通,怎么让双方都正规还方便; 4、性能方面,不外乎负载均衡、上缓存、数据库读写分离、代码优化; 。。。

#7楼 @xiaogui :thumbsup:

不过请教一下JSON需要校验吗?您是指数据有可能被篡改或者由于网络原因丢失了一部分?

#7楼 @xiaogui 了解!谢了哈。。。。。。

#9楼 @lytsingsun http://ruby-china.org/topics/15173 这才是标准写法,哈哈,求点精华

以下是个人的一点IOS GAME SERVER开发经验,欢迎指正(以下客户端简称为C端,服务端简称为S端):

1、controller级参数validate。参数是否不可缺失,合法性,合理性,结合自己维护的一套错误信息编号,返回给C端。这里之所以没有采用model层的validate,个人的看法是,在model层的操作之前会有很多逻辑需要处理,关联较多,validate越早越好,一层层过滤不合法的请求。

2、C端大多是导步的,就是发了这个请求之后,他就一边玩儿去了,并没有守在这里等这个请求返回结果。所以你返回给C端的JSON里面,有必要指出这个JSON对应的是哪个请求。 这里我采用的是

render :json => { action_name => ... }

这种方式,当然,如果有更好的方式,可以@我。

如果用这种方式,那就需要注意

(1)、所有action_name保持唯一 (2)、routes里 post、get后面的'xxx'需要与action_name保持一致。

3、所有敏感数据自己维护一套常量,特别是可变数字,尽量不要通过参数的形式传递。我做server端的过程中,从来不信任C端发过来的可变数字。可能这是病吧,总担心如果有人模拟请求,会带来意外的灾难。另外如果实在逼不得已,需要采用参数里面的可变数字,那做减法之前,别忘了事先.abs一下,许多无聊的人,会试探你的请求,然后模拟,如果你减法不做abs,so,那个被减的对象遇到一个负数的参数的时候,他就变成加法了,越减越多。

4、如果有许多C端和S端都会用到许多常量,那请认真构思一下你的常量系统。以哪种类型作为常量的载体,常量如何载入S端,C端如何动态增量更新S端已有常量数据。

5、如果你的C端是游戏产品,那么你还有必要考虑一下S端数据的虚拟化、实体化的问题。 如:一个角色可能会有许许多多,几十上百件装备,如果这些装备都处于未使用也未被强化提升的等级,如:1级,那么我认为,这几十上百件装备对于S端来讲,都是不存在的。我们只需要给这个角色的装备库里存上几十上百个装备类型,如:101001,201001等,用来代表这个角色拥有这些装备类型的最低等级的装备。

其他就暂时没有想到了。欢迎指正,补充。

i5ting 客户端 API 开发总结 中提及了此贴 07月29日 22:31
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册