Rails 求客户端 API 开发经验

lytsingsun · October 30, 2013 · Last by zfjoy520 replied at October 31, 2013 · 4083 hits

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

客户端的 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 in 客户端 API 开发总结 mention this topic. 29 Jul 22:31
You need to Sign in before reply, if you don't have an account, please Sign up first.