Извлечение JSON из внешнего веб-сервиса - попытка рефакторинга / очистки моего кода - PullRequest
1 голос
/ 10 июля 2011

У меня есть модель подкаста с одним атрибутом, который называется : url .

Типичный : url принимает следующую форму: http://api.mixcloud.com/alivefrommaryhill/jazzcast/ и возвращаетфайл JSON

Используя hashie и httparty, мы можем написать метод (называемый get_json ), который использует этот URL для создания хеша из JSON, на который он ссылается:

class Podcast < ActiveRecord::Base
  attr_accessible :url  

  def get_json
    Hashie::Mash.new HTTParty.get("#{self.url}")
  end   
end

Затем мы можем использовать get_json в наших представлениях для стилизации и отображения JSON:

#/views/podcasts/index.html.haml
- for podcast in @podcasts  
  = link_to podcast.get_json.name, podcast_path(podcast)
  = podcast.get_json.description
  = image_tag podcast.get_json.pictures.medium

Как видите, каждый подкаст вызывает get_json threeраз.У меня есть 21 подкаст, и я не хочу вызывать этот метод более одного раза за посещение, поскольку он подключается к внешнему веб-сервису, который занимает очень много времени.Как я могу минимизировать количество вызовов этого метода и ускорить процесс?

Возможно, я должен делать больше в моем контроллере вместо вызова метода с моей точки зрения?

def index
  @podcasts = Podcast.all
end

Любая помощь приветствуется

1 Ответ

2 голосов
/ 10 июля 2011

Что ж, самое простое решение на данный момент - сохранить результат podcast.get_json в локальной переменной.Это сократит его до одного раза за подкаст.

Если вы хотите еще больше сократить количество вызовов, вам нужно найти способ пакетировать все ваши запросы.Я не знаю, позволит ли API этого сайта сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...