2013-11-06 5 views
4

Приложение rails (4) вызывает внешний API с использованием HTTParty. API доступен только для чтения. Кэширование требуется, поскольку данные не изменяются часто (24 часа), и API разрешает только ограниченное количество вызовов в час.Кэширование вызовов внешнему API в приложении rails

Я думаю, мне нужен какой-то хэш-кеш, где я буду использовать «params/sent/to/the/api» в качестве ключа. Инструменты Rails для кэширования, по-видимому, предназначены только для страниц, фрагментов или SQL.

Что нужно сделать для кэширования вызовов внешним API?

ответ

9

Это будет что-то вроде этого. В принципе, вызов Rails.cache.fetch будет завершать ваш вызов API. Это не повлияет на API, если срок действия кеша истек.

class Results 

    def get(url, params) 
    Rails.cache.fetch([url, params], :expires => 1.hour) do 
     HTTParty.get('url/to/api') 
    end 
    end 

end 

Убедитесь, что у вас установлен кэш в вашей среде. Memcache отлично подходит для такого рода вещей.

+0

Не стоит ли устанавливать сервер для кеша, который должен иметь не более 5000 записей? – Syl

+0

Достаточно легко работать с memcache, но чтобы это было просто, вы можете кэшировать несколько разных способов: файловый сервер может быть тем, что вы хотите. Я не очень много работал с файловыми кэшами, не знаю, как работает срок действия. – Swards

+0

@Syl As Swards указывает, что отдельный сервер кеша не нужен, но даже если кто-то предпочитает использовать memcached, это не сложно. Это очень простой сервис для установки и запуска. –

Смежные вопросы