Rails Routes 里面 API 加版本号的问题

phaibin · 2014年12月26日 · 最后由 shawnqi 回复于 2016年11月02日 · 2795 次阅读

用 Rails 做接口,给接口加版本会这么做:

namespace :api do
    namespace :v1 do
      resources :users
    end
end

对应的文件是 api/v1/users_controller.rb,类是 Api::V1::UsersController。

如果是小版本怎么办呢:

namespace :api do
    namespace :'v1.1' do
      resources :users
    end
end

这样要怎么设置对应的文件和 Controller 名?

可以用scope

namespace :api do
    scope '/v1.1' do
      resources :users
    end
end
2 楼 已删除

#1 楼 @allenwei 现在很头疼的是 controller 的命名,类名不是带 dot 或者 underscore,就是不能写成:Api::V1.1::UsersController 或 Api::V1_1::UsersController。不知道大家都是怎么处理的

#3 楼 @phaibin 很少见给 API 加小版本,会折腾烦开发者。

#4 楼 @Rei 不是,就是见到别人基本都有小版本,所以我才这么纠结。 刚看了 tweet 的 api,比如:https://api.twitter.com/1.1/search/tweets.json?q=from%3ACmdr_Hadfield%20%23nasa&result_type=popular facebook 的也是带小版本的。

#5 楼 @phaibin 我参考的是 github,直接 v1 v2 v3。

要小版本那就起个 V1D1 这样的模块名了,scopemodule path as 之类的参数,看组合一下哪个符合你的要求。

http://api.rubyonrails.org/classes/ActionDispatch/Routing/Mapper/Scoping.html#method-i-scope

#3 楼 @phaibin 用 scope 不用加命名空间 生成的 route 类似

api_users GET    /api/v1.1/users(.:format)                               api/users#index

#7 楼 @allenwei 如果分版本,命令空间还是有必要加的

这个真的有必要吗?而且还要上小版本号?每个版本号不单只是路由,还有相应的代码、测试,成本非常高。我觉得你的 API 如果不是预期有大量重要的外部用户,不需要弄得那么麻烦。比较实际一点的是先不用版本号,等真正成熟了,外部依赖很多,而且需要大改的时候再上 V2 也不迟。

@phaibin 您好,不知道最后你的命名空间是怎么写的,我这里也遇到类似的小版本问题,希望可以得到解答!谢谢

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