10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2017

Day 14

ElixirのHTTPクライアントでお天気情報を取得したい(2022年)

Last updated at Posted at 2022-06-09

ElixirのHTTPクライアントについて検索してみるといろいろ出てきます。中には廃盤になったものもいくつかあります。先日Alex KoutmosさんのThe State of Elixir HTTP Clientsという記事を読んで、2022年現在で使えるHTTPクライアントがわかったので、それらを使用して簡単なGETリクエストでお天気情報を取得してみようと思います。

TL;DR

迷ったらreqを使うのが無難。

%Req.Response{status: 200, body: body} = Req.get!("https://wttr.in/?format=j1")

準備

IExを開く。

iex

IEx内でいくつかHexパッケージをインストール。

Mix.install [:req, :httpoison, :tesla, :jason]

Elixirで使えるHTTPクライアント

httpc

  • Erlangモジュールなので何もインストールしなくても使える。
  • シンプルなHTTPリクエストにはこれで十分。
  • HTTPレスポンスボディはCharlist
{:ok, {{_, 200, _}, _headers, body}} = :httpc.request("https://wttr.in/?format=j1")
body |> List.to_string() |> Jason.decode!()

httpoison

  • Erlangで書かれたhackneyというライブラリを使いやすくラップしたもの。
  • hackneyはトラフィック量の多いシナリオに対応できていないらしい。
  • HTTPレスポンスボディはString
%HTTPoison.Response{status_code: 200, body: body} = HTTPoison.get!("https://wttr.in/?format=j1")
body |> Jason.decode!()

tesla

  • Rubyのfaradayにインスパイアされたらしい。
  • plugに似た形でミドルウエアを追加できる。
  • HTTPクライアントをモジュールとして構成したい場合に便利。
  • テストのモックを用意できる。
  • HTTPレスポンスボディは解析済みのMap
defmodule Weather do
  use Tesla

  plug Tesla.Middleware.BaseUrl, "https://wttr.in"
  plug Tesla.Middleware.JSON

  def get!() do
    get!("/?format=j1")
  end
end

%Tesla.Env{status: 200, body: body} = Weather.get!()
body

mint

  • TCP/SSLソケットを操作するための低レベルでプロセスを使用しないツール。
  • 単純なreceive/1ブロックでデータを取り込む。

finch

  • mintを使いやすくラップしたもの。
  • 軽量で高性能。

req

  • mintを使いやすくラップしたfinchをさらにラップした便利な高性能ツール。
  • HTTPレスポンスボディは解析済みのMap

書き方A

%Req.Response{status: 200, body: body} = Req.get!("https://wttr.in/?format=j1")
body

書き方B

%Req.Response{status: 200, body: body} = (
  Req.build(:get, "https://wttr.in/?format=j1")
  |> Req.put_default_steps()
  |> Req.run!()
)

body

Elixirコミュニティに初めて接する方は下記がオススメです

Elixirコミュニティ の歩き方 -国内オンライン編-

https://speakerdeck.com/elijo/elixirkomiyunitei-falsebu-kifang-guo-nei-onrainbian
image.png
日本には28箇所のElixirコミュニティがあります

image.png

日程からイベントを探すならElixirイベントカレンダー:calendar:

** Elixirイベントカレンダー **

https://elixir-jp-calendar.fly.dev/
image.png

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?