У меня есть API на основе JSON
и XML
, который необходимо кэшировать на странице.Я настроил свои маршруты на API, чтобы включить формат как часть URL, так что URL похож на эту работу:
http://example.com/foo/1/bar/2/xml
http://example.com/foo/1/bar/2/json
Проблема, которую я вижу, состоит в том, что в папке public
сервера,файлы сохраняются как xml.xml
и json.json
, и это приводит к отсутствию кэша при следующем обращении к URL.
Есть ли способ:
- Отключитьавтоматическое создание расширений, чтобы они вообще сохранялись без расширения?(EX:
RAILS_ROOT/public/foo/1/bar/2/json
) - Принудительно установить для всех добавочных номеров значение
.html
для каждого вызова.(EX: RAILS_ROOT/public/foo/1/bar/2/json.html
)
Любое из этих действий приведет к тому, что мой сервер вернет кэшированный файл вместо промаха.Как я могу это сделать?
РЕДАКТИРОВАТЬ:
Кто-то спросил соответствующий маршрут:
scope '(foo/:foo_id)', :foo_id => /\d+/ do
get '/bar/:bar_id/:format' => 'bars#show', :bar_id => /\d+/, :format => /json|xml|html/
end
РЕШЕНИЕ :В то время как я искал официальный способ сделать это, используя встроенную поддержку кэширования страниц, я закончил тем, что использовал только фильтр после и мой собственный метод кэширования страниц, как предложил Антон
# 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 ]