Rails: как относиться к альтернативному Accept: content-types как JSON? - PullRequest
11 голосов
/ 22 февраля 2012

До сих пор я нашел два способа для request.format.json? быть верным в Rails (т.е. когда входящий запрос обрабатывается как JSON).Первый - если вы запрашиваете ресурс и заканчивается на .json, другой - если вы указали заголовок Accept: application/json в своем запросе.Каждая работа автономна.

Я хочу зарегистрировать свой собственный тип «принимает» для этого второго случая:

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

Ответы [ 2 ]

9 голосов
/ 15 июля 2015

Альтернатива этому:

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.

8 голосов
/ 22 февраля 2012

Мы перемещаем запросы 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
...