Coinbase API: {\"errors\":[{\"id\":\"invalid_request\",\"message\":\"Invalid currency (USD)\"}]}

Coinbase API: {\"errors\":[{\"id\":\"invalid_request\",\"message\":\"Invalid currency (USD)\"}]}

defmodule APIConnection do
  def process_output({:ok, results}, _) do
    Print.done()
    results.body
  end

  def process_output({:error, results}, api_url) when results.reason == :timeout do
    Print.error("MODULE:#{__MODULE__} - Connection Timeout")
    Print.text("Redialing . . . ")
    fetch(api_url)
  end

  def process_output({:error, results}, _) do
    IO.inspect(results.reason)
  end

  def fetch(api_url) do
    HTTPoison.start()
    HTTPoison.get(api_url, [], ssl: [{:versions, [:"tlsv1.2"]}])
  end

  def go(api_url) do
    # api_url = "https://api.coinbase.com/v2/exchange-rates"
    fetch(api_url)
    |> process_output(api_url)
  end
end

错误信息:

"{\"errors\":[{\"id\":\"invalid_request\",\"message\":\"Invalid currency (USD)\"}]}"

根据 https://developers.coinbase.com/api/v2#get-currencies, https://api.coinbase.com/v2/exchange-rates 是交换数据的正确端点。也就是说,是什么导致了这个错误以及如何有效地解决它?

适合我:

iex(1)> APIConnection.go("https://api.coinbase.com/v2/exchange-rates")                                                 │ 18     HTTPoison.get(api_url, [], ssl: [{:versions, [:"tlsv1.2"]}])
done                                                                                                                   │ 19   end
"{\"data\":{\"currency\":\"USD\",\"rates\": ...

也许这是他们 API 的临时错误。我可以通过使用无效货币调用 API 来重现它,但不能 USD:

$ curl https://api.coinbase.com/v2/exchange-rates?currency=USD
{"data":{"currency":"USD","rates":{

$ curl https://api.coinbase.com/v2/exchange-rates?currency=XXX
{"errors":[{"id":"invalid_request","message":"Invalid currency (XXX)"}]}