2012-02-22 5 views
11

Hasta ahora he encontrado dos formas para que request.format.json? sea verdadero en Rails (es decir, donde la solicitud entrante se trata como JSON). Una es si solicita un recurso y termina en .json, el otro es si proporciona el encabezado Accept: application/json en su solicitud. Cada trabajo independiente.Rieles: cómo tratar la alternativa Aceptar: ¿tipos de contenido como JSON?

quiero registrar mi propia "acepta" tipo para este segundo caso:

Accept: application/vnd.myapp_v1+json y han tratado por esta rieles como una "solicitud JSON" como application/json, sin la necesidad de añadir .json.

Mi primer pensamiento fue registrar mi propio MimeType como :json (dentro de mi código de inicialización), pero esto realmente interrumpirá el soporte para la aplicación/json, no es lo que quiero hacer.

Mime::Type.register "application/vnd.myapp_v1+json", :json # my failed attempt 

Respuesta

8

nos movemos solicitudes iPhone a través de HTML en nuestra aplicación con un before_filter así:

before_filter :determine_format 

def determine_format 
    request.format = :iphone if (request.env["HTTP_USER_AGENT"] =~ /iPhone/ && request.format == :html) 
end 

me imagino que puede hacer algo similar con su formato específico, tal como esto:

def determine_format 
    request.format = :json if (request.format == 'application/vnd.myapp_v1+json') 
end 
+0

funciona a la perfección! Gracias por tu respuesta. –

8

Una alternativa a esto es:

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 

En initializers/mime_types.rb.

Cuestiones relacionadas