我正在为一个rails项目开发一个简单的API,它也应该能够进行版本控制。 我正在使用rabl-rails gem。
为了防止代码重复,我希望能够使用我的ControllerActions(例如UserController #search)两次。一次是普通的WebUsers,一次是API。
我只看到人们写这样的控制器:
class Api::v1::UsersController
def list
@user = User.all
end
end
我是否需要RABL的命名空间控制器? 或者是否可以“路由或委托”#34;我对现有控制器的JSON请求?
例如我的常规UsersController
行动"列表"实际上是这样的:
def list
respond_to do |format|
format.html
format.json { render @user }
end
end
views/users/list.json.rabl
也存在并在这种情况下运作良好。
现在我尝试将rabl文件移动到
/api/v1/users/list.json.rabl
我提供了一条路线:
namespace :api, :defaults => {:format => :json} do
namespace :v1 do
match 'users/list', to: 'Users#list', as: 'users', via: [:get, :post]
end
end
目前我没有提供Api :: V1 :: UsersController。
的最佳方法是什么?
我希望不要复杂解释...
答案 0 :(得分:1)
我最终认为API应该有自己的逻辑。有些动作可以查看特定内容(面包屑,下拉值等)。
凭借我的知识和搜索逻辑"可以被提取到一个模块中,该模块被混合到您的ApplicationController类(inlcude)中。然后,您可以在两个地方使用此逻辑:Api和常规Web视图。
我的第一次尝试就在这里:
# Base Controller for all Api requests
class Api::V1::BaseController < ApplicationController
respond_to :json
acts_as_token_authentication_handler_for User
end
class Api::V1::UsersController < Api::V1::BaseController
# Inherit from BaseController -------^^^^^^^^^^^^^^^^^^^^^^^
# your personal extracted logic
include SearchLogic
def list
@user = User.all
end
end
所以