I just ran into this myself, and it looks like it breakwill solve our problems. I just checked this locally against memory_store and dalli_store and it avoids block caching. So, for your example, try something like this:
Rails.cache.fetch("key") do
api.get "/api/data"
break if api.body.meta.status == 500
api.body
end
, dalli_store, nil, nil .