我有一个基于JSON
和XML
的API需要页面缓存。我对API设置我的路线,包括格式作为URL的一部分,这样的URL像这样的工作:Rails页面缓存和自动扩展的问题
http://example.com/foo/1/bar/2/xml
http://example.com/foo/1/bar/2/json
我看到的问题是,在服务器的public
文件夹,该文件被保存如xml.xml
和json.json
,这会在下次访问URL时导致缓存未命中。
有没有办法要么:
- 关闭自动扩展产生,因此它们被保存没有扩展名呢? (例如:
RAILS_ROOT/public/foo/1/bar/2/json
) - 为每个呼叫强制所有分机为
.html
。 (例如: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
SOLUTION:
虽然我一直在寻找一个正式的方式来做到这一点使用内置的网页缓存支持,我最终只使用后过滤器和我自己的页面缓存方法,正如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 ]
您是否尝试过API中的“正常”惯例,例如..bar/2.xml和../bar/2.json? – oma 2011-05-18 12:36:46
这不是API设计,我需要使它向后兼容,所以我不能更改为.ext方法。恕我直言,但它使丑陋的网址。 – coneybeare 2011-05-18 16:22:47
你可以发布你的路线样本吗? – 2011-05-20 03:27:18