Criando o cliente da Marvel
Vamos lá mais uma vez. Para termos a conexão com um serviço, precisamos criar essa conexão. Aqui estamos chamando ele de Client e vivera no contexto de integrações. Criaremos o arquivo lib/coffee_shop/integrations/marvel_comics/client.ex utilizando o mesmo padrão do cliente do café já criado.
Iremos decompor essa chamada do tesla para dentro de nosso novo modulo utilizando os padrões estabelecidos nos capitulos anteriores
Tesla.get("https://gateway.marvel.com/v1/public/comics?apikey=12345&hash=7EE341DFFE88E697114117AA51E1A210&ts=1")Utilizaremos uma função privada para configurar nosso cliente Tesla de forma práticas para os testes.
Colocaremos a url base em um função isolada, decidindo chamar ela de
https://gateway.marvel.com/v1/publicuma vez que utilizaremos sempre essa base.Criaremos uma função publica que fara a requisição
defmodule CoffeeShop.Integrations.MarvelComics.Client do
def comics(opts \\ []) do
base_url = Keyword.get(opts, :base_url, base_url())
opts
|> new_client()
|> Tesla.get("#{base_url}/v1/public/comics")
end
defp new_client(_opts) do
middlewares = []
Tesla.client(middlewares)
end
defp base_url() do
"https://gateway.marvel.com"
end
end
Essa é a cara base. Precisamos de uma teste para ele.
Nesse teste, queremos garantir que a requisição chamada é do recurso que queremos. Também queremos garantir que os parâmetros hash, api_key e ts estão sendo enviados juntos.
Como vimos na leitura do endpoint, precisamos enviar os três parâmetros para conseguir realizar a chamada. Vamos adiciona-los.
Para adicionar query_params, Tesla possui um middleware que facilita o trabalho para nós. Vamos usa-lo.
Decidimos seguir o mesmo padrão adotado no cliente do café e tiramos proveito disso. Basta adicionar o middleware direto na criação do Tesla.client. Com isso, podemos rodar os teses novamente.
Com isso garantimos que estamos passando todos os dados que precisamos para realizar a requisição.
Atualizado
Isto foi útil?