Rails: как лечить альтернативу Accept: content-types as JSON?
До сих пор я нашел два способа для request.format.json?
быть истинным в Rails (т.е. когда входящий запрос обрабатывается как JSON). Один из них заключается в том, что если вы запрашиваете ресурс и заканчиваете на .json
, то другой - если вы указываете заголовок Accept: application/json
в своем запросе. Каждая работа автономна.
Я хочу зарегистрировать свой собственный тип "accepts" для этого второго случая:
Accept: application/vnd.myapp_v1+json
, и это обработано рельсами как "запрос json", например application/json
, без необходимости добавления .json
.
Моя первая мысль заключалась в регистрации моего MimeType как :json
(в моем инициализационном коде), но это фактически нарушит поддержку приложения /json, а не то, что я хочу сделать.
Mime::Type.register "application/vnd.myapp_v1+json", :json # my failed attempt
Ответы
Ответ 1
Мы пересылаем запросы iPhone на HTML в нашем приложении с помощью before_filter:
before_filter :determine_format
def determine_format
request.format = :iphone if (request.env["HTTP_USER_AGENT"] =~ /iPhone/ && request.format == :html)
end
Я предполагаю, что вы можете сделать что-то подобное в своем конкретном формате, может быть, вот так:
def determine_format
request.format = :json if (request.format == 'application/vnd.myapp_v1+json')
end
Ответ 2
Альтернативой этому является:
api_mime_types = %W(
application/vnd.api+json
text/x-json
application/json
)
Mime::Type.unregister :json
Mime::Type.register 'application/json', :json, api_mime_types
В initializers/mime_types.rb
.