Tengo una API basada en JSON
y XML
que debe almacenarse en la página. He fijado mis rutas en el API para incluir el formato como parte de la URL, de manera que la dirección URL de esta manera el trabajo:Problema con el almacenamiento en caché de la página Rails y extensiones automáticas
http://example.com/foo/1/bar/2/xml
http://example.com/foo/1/bar/2/json
El problema que veo es que en la carpeta del servidor de public
, los archivos se guardan como xml.xml
y json.json
, y esto causa que el caché omita la próxima vez que se accede a la URL.
¿Hay una manera de cualquiera:
- Apague la generación automática de extensión para que se guardan sin una extensión en absoluto? (EX:
RAILS_ROOT/public/foo/1/bar/2/json
) - Fuerce todas las extensiones para que sean
.html
para cada llamada. (EX:RAILS_ROOT/public/foo/1/bar/2/json.html
)
Cualquiera de estos haría que mi servidor devuelva el archivo en caché en lugar de perderse. ¿Cómo puedo hacer esto?
EDIT:
Alguien le preguntó por la ruta relevante:
scope '(foo/:foo_id)', :foo_id => /\d+/ do
get '/bar/:bar_id/:format' => 'bars#show', :bar_id => /\d+/, :format => /json|xml|html/
end
SOLUCIÓN:
Mientras yo estaba buscando una manera oficial para que esto suceda utilizando el construido en la página apoyo para el almacenamiento en caché, terminé simplemente usando un filtro posterior y mi propio método de caché de página, según lo sugerido por Anton
# application_controller.rb
def cache_api_page
if REDACTEDServer::Application.config.action_controller.perform_caching
self.class.cache_page(response.body, request.path, '')
puts "CACHED PATH: #{request.path}"
end
end
# bar_controller.rb
after_filter :cache_api_page, :only => [ :show, :index ]
¿Has probado la convención "normal" en la API, a partir de ..bar/2.xml y ../bar/2.json? – oma
Este no es el diseño de la API y necesito que sea compatible con versiones anteriores, por lo que no puedo cambiar al método .ext. En mi humilde opinión, hace urls feos. – coneybeare
¿Puedes publicar una muestra de tus rutas? –