# 【Elixir】HTTPoison を使って API などの通信を行ってみる
> Elixir で HTTP通信ができる HTTPoison を使って API などの通信を行ってみる
- Canonical: https://c-a-p-engineer.github.io/elixir-httpoison/
- Published: 2023-03-18T08:40:00.000Z
- Modified: 2023-03-18T08:40:00.000Z
- Categories: Elixir, Web
- Tags: Elixir, Web

Elixir で HTTP通信ができる HTTPoison を使って API などの通信を行ってみる

## 環境
* Elixir 1.14.2

## HTTPoisonのインストール
`mix.exs` ファイルのdeps関数にHTTPoisonを追加し、アプリケーションの依存関係を更新します。

```mix.exs
defp deps do
  [
      {:httpoison, "~> 1.8"},
  ]
end
```

`mix deps.get` を実行してインストールします。


## 基本的な使い方
HTTPoisonを使ってGETリクエストを送信し、レスポンスを受け取ります。

### Get
GETでデータを取得してみます。

```ex
{:ok, response} = HTTPoison.get("https://c-a-p-engineer.github.io/index.json")
```

### Post
```ex
{:ok, response} =
  HTTPoison.post(
    "https://c-a-p-engineer.github.io/index.json", # URL
    "{\"key\":\"value\"}", # JSON
    [{"Content-Type", "application/json"}] # Header
  )
```

### レスポンスの扱い方
レスポンスは `%HTTPoison.Response{}` 構造体で返されます。
ステータスコード、ヘッダー、ボディを取得する方法は以下の通りです。

```ex
# StatusCode
status_code = response.status_code
# Header
headers = response.headers
# Body
body = response.body

IO.inspect("status")
IO.inspect(status_code)
IO.inspect("headers")
IO.inspect(headers)
IO.inspect("body")
IO.inspect(body)
```

### エラーハンドリング
`HTTPoison` はエラーを `{:error, reason}` タプルで返します。
エラーハンドリングは以下のように行います。

```exs
case HTTPoison.get("https://c-a-p-engineer.github.io/index.json") do
  {:ok, response} ->
    # 成功時の処理
  {:error, %HTTPoison.Error{reason: reason}} ->
    # エラー時の処理
end
```

## 参考
* <a href="https://hexdocs.pm/httpoison/2.1.0/readme.html" target="_blank" rel="nofollow noopener">HTTPoison v2.1.0 - HexDocs</a>
