如何使用Her gem格式化collection_path并进行扩展



为了从我请求的API获取JSON,我需要将.json扩展添加到我的请求中。例如:

/test/api/people/2323 # returns XML
/test/api/people/2323.json # returns JSON

请求的应用程序使用Rails和Hergem。根据她的自述,您可以指定这样的收集路径。

collection_path "organizations/:organization_id/users"

似乎没有办法添加这种格式的扩展名。它与以下两者都不起作用:

collection_path "test/api/people/:id.json"

collection_path "test/api/people.json"

以下是我的Her初始值设定项的样子:

LOCAL = Her::API.new
LOCAL.setup url: "https://example.com", headers: { "Content-Type" => "application/json" } do |config|
  config.use Faraday::Request::UrlEncoded
  config.use Her::Middleware::DefaultParseJSON
  config.use Faraday::Adapter::NetHttp
end

我在设置Her/Faday时是否缺少了一个步骤,或者是否有某种方法可以在不指定扩展的情况下请求JSON?我想要访问的API也是用Rails编写的。

有没有办法在不指定扩展的情况下发出JSON请求?

是的,您需要添加中间件Her::Middleware::AcceptJSON。它所做的只是添加"Accept: application/json" HTTP标头。

非常简单:),这里是文档和源代码,只有17行代码。

所以现在你的文件config/initializers/her.rb看起来像这样:

Her::API.setup url: "https://example.com" do |config|
  config.use Faraday::Request::UrlEncoded
  config.use Her::Middleware::DefaultParseJSON
  config.use Faraday::Adapter::NetHttp
  # middleware to make a json request by default
  config.use Her::Middleware::AcceptJSON
end

最新更新