Rails 如何实现一个给客户端调用的入口,可以同时请求多个 API

lytsingsun · 2013年11月13日 · 最后由 lytsingsun 回复于 2013年11月15日 · 3570 次阅读

将客户端的一个页面分成不同的模块,每一个模块对应一个 API。服务端提供一个统一的入口给客户端,客户端可以通过这个入口同时请求到整个页面的所需的所有 API。这个入口该如何实现和处理?

什么叫统一的入口?一个 controller、一个 action 吗?

你说的这种一般是内部调用对应的多个函数,然后将处理以后的数据以一个整体返回给客户端。

我猜楼主是这样的意思吧: 1,页面需要多组数据,每组数据对应后台的一个 API 2,现在只想在后台暴露一个借口,但是需要可以返回多组数据

如果是这样的画就简单了,根据参数判断请求,然后返回相应的数据,或者像 @xiaogui 说的,一起返回

我猜楼主是这样的意思吧: 1,页面需要多组数据,每组数据对应后台的一个 API 2,现在只想在后台暴露一个借口,但是需要可以返回多组数据

如果是这样的画就简单了,根据参数判断请求,然后返回相应的数据,或者像 @xiaogui 说的,一起返回

#3 楼 @xiaogui 公司的客户端产品迭代比较频繁,一些旧的 api 已经不能满足新版本的需求,但是为了兼容旧的版本暂时又不能删除。为了避免出现因为出现因为某个局部的变化导致一个信息量很大的接口不能使用,所以规定一个具体的模块就对应一个 api。客户端的一个页面需要哪些 api 就调用哪些,即使下次某个模块需要改变,只要新写一个模块的 api 就行了。比较容易维护。所以不是函数组合,是一次请求多个 api,减少客户端请求的次数

版本问题可以通过 API 版本号来解决,比如/api/v2/pages/1

#6 楼 @lytsingsun 你说的这个问题,只要在做客户端就无法从根本上解决问题。所以推荐还是利用 类似 #7 楼 @kgen 的版本号来解决。另外要记录好每个客户端版本对应的 api 版本,在通过统计等信息发现某版本客户端基本无使用用户的时候,可以逐渐去掉对原版本的 api 直接。要合理的提醒用户升级至比较新的版本。

#7 楼 @kgen通过版本号来区分 api,这样会不会造成可重复使用的 api 也需要重复的定义呢?还是说有什么好的办法来控制?

#9 楼 @lytsingsun 重复定义的解决也很容易,你可以搜下 Railscasts 上,关于版本区分 API 的视频

根据参数不同来区分 def api_all #params 附带参数 count,表明访问的是那个 api eval("redirect api_#{params["count"]}") end

def api_1 ... end

def api_2 ... end 只需要把 api_all 提供给客户端就行了

#11 楼 @kgen Thank you,按照你的建议这两天找了下这方面的一些资料,思路变的清晰了……

需要 登录 后方可回复, 如果你还没有账号请 注册新账号