Rails中api命名空间下的默认客户端内容类型



如何在给定的命名空间下为所有传入Rails应用程序的请求设置默认的内容类型?

在我的例子中,我有一个/api命名空间,它总是期望JSON,但我不想强迫客户端总是设置它(如果他们愿意,当然欢迎他们这样做,在这种情况下,Rails应用程序应该遵守设置的Content-Type)。所以它应该默认为application/json

这将使curl等的测试更加容易。

我该怎么做?

一种方法是在API控制器中指定before操作并设置JSON格式:

before_filter :default_request_format
private
def default_request_format
  request.format = :json
end

也可以在routes.rb中指定JSON格式。

让所有API-Controller从API::Controller类继承,该类只响应:json

示例:

class Api::Controller < ActionController::Base
  respond_to :json
  before_filter :default_request_format
  private
  def default_request_format
    request.format = :json
  end
end

现在,您的其他Api控制器可以从中继承,并将自动使用JSON进行响应。

例如,您有一个名为"FooBar"的模型:

class Api::FooBarsController < Api::Controller
  def index
    @foobars = FooBar.all
    respond_with(@foobars)
  end
end

最新更新