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
defmoduleCoffeeShop.Integrations.MarvelComics.Clientdodefcomics(opts \\[]) do base_url =Keyword.get(opts,:base_url,base_url()) opts|>new_client()|>Tesla.get("#{base_url}/v1/public/comics")enddefpnew_client(_opts)do middlewares =[]Tesla.client(middlewares)enddefpbase_url()do"https://gateway.marvel.com"endend
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.