Current section
Files
Jump to
Current section
Files
lib/http_client.ex
defmodule ShipitApi.HttpClient do
use HTTPoison.Base
@base_url "http://api.shipit.cl/v"
@content_type "application/json"
@accept "application/vnd.shipit.v4"
@moduledoc """
Documentation for `ShipitApi.HttpClient`.
"""
def headers(email, token) when is_binary(email) and is_binary(token) do
["Accept": @accept,
"X-Shipit-Email": email,
"X-Shipit-Access-Token": token,
"Content-Type": @content_type]
end
def make_get_request(path, email, token) do
case HTTPoison.get("#{@base_url}/#{path}", headers(email, token)) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:ok, %HTTPoison.Response{status_code: 400, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:ok, %HTTPoison.Response{status_code: 404, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:error, %HTTPoison.Error{reason: reason}} ->
{:ok, response: reason}
end
end
@spec make_post_request(any, any, binary, binary) :: {:ok, [{:response, any}, ...]}
def make_post_request(path, body, email, token) do
case HTTPoison.post("#{@base_url}/#{path}", Jason.encode!(body), headers(email, token), [recv_timeout: (20 * 1000)]) do
{:ok, %HTTPoison.Response{status_code: 200, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:ok, %HTTPoison.Response{status_code: 400, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:ok, %HTTPoison.Response{status_code: 404, body: body}} ->
{:ok, response: Jason.decode!(body)}
{:error, %HTTPoison.Error{reason: reason}} ->
{:ok, response: reason}
end
end
end