为了从我请求的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