Uma técnica simples para envolver clientes de API de terceiros

Parabéns ao meu colega Kunal ( @techthumb ) por me mostrar isso hoje.

Eu queria que uma única instância (singleton) de um objeto cliente de terceiros estivesse disponível em meu aplicativo. Idealmente, eu deveria ser capaz de fazer a este wrapper as mesmas perguntas que faria ao próprio cliente (delegação).

Aqui está um exemplo de como essa combinação de padrões singleton e delegador pode ser alcançada em Ruby. O exemplo usa a gema google_places de @marceldegraaf :

class GooglePlacesClient < SimpleDelegator

include
Singleton

def initialize
client
= GooglePlaces::Client.new("[my_api_key]")
super(client)
end

end

Os dois componentes de rubi usados ​​aqui são:

  • A superclasse SimpleDelegator – que delega todas as chamadas de método suportadas ao objeto passado para o construtor (neste caso, cliente ). Em outras palavras, meu GooglePlacesClient.instance agora responde a todas as mensagens que o GooglePlaces :: Client do gem responde.

  • O mixin Singleton – que garante que apenas uma instância do meu GooglePlacesClient possa ser criada.

Para completar, aqui está um exemplo de como você consumiria esta classe singleton:

GooglePlacesClient.instance.spots(1, 1)

Isso delega a mensagem de ‘pontos’ para a variável de instância que, por sua vez, responde com uma matriz do tipo GooglePlaces :: Spot para a latitude, longitude fornecida.

Muito arrumado.

Stu