昔より 主を内海の 野間なれば 報いを待てや 羽柴筑前
Advent Calendar 2022 13日目1の記事です。
I'm ready for 12/25,2022
I'm looking forward to 12/25,2022
私のAdvent Calendar 2022 一覧。
はじめに
Elixirを楽しんでいますか
$\huge{Enjoy\ Elixir🚀🚀🚀}$
今回は、Reqを使ってみます。
Req is an HTTP client with a focus on ease of use and composability, built on top of Finch.
What is Req ?
ElixirでHTTP通信するHexと言えば何をおもいうかべますか?
私は、HTTPoisonです。
それで昨日、Nerves LivebookにデフォルトでHTTPoisonを入れてみない? というプルリクを出してみました。
そうしたら、Reqはどうだい? という返事をいただきました。
Reqって何だい? ということで調べてみました。
Req is an HTTP client with a focus on ease of use and composability, built on top of Finch.
Youngです!
をみると、初登場はJul 15, 2021です。
Jasonが依存ライブラリに入っていて、JSONをいい感じに扱ってくれます。
HTTP Get!
Mix.install [{:req, "~> 0.2.1"}]
"https://qiita.com/api/v2/items?query=tag:Elixir"
|> URI.encode()
|> Req.get!()
|> Map.get(:body)
|> Enum.map(& Map.take(&1, ["title", "url"]))
@mnishiguchi さんの実装例が参考になりますのでご紹介しておきます。
HTTPoisonをReqに置き換えられています
def fetch_current_weather!() do
- %HTTPoison.Response{status_code: 200, body: body} = HTTPoison.get!(@weather_url)
- [current_weather] = body |> Jason.decode!() |> Access.fetch!("current_condition")
+ %Req.Response{status: 200, body: body} = Req.get!(@weather_url)
+ [current_weather] = body |> Access.fetch!("current_condition")
HTTP POST!
LINEのAPIでの使用例を書いてみました。
Mix.install [{:req, "~> 0.2.1"}]
reply_token = "reply_token"
text = "text"
channel_access_token = "channel_access_token"
json =
%{
replyToken: reply_token,
messages: [
%{
type: "text",
text: text
}
]
}
|> Jason.encode!()
url = "https://api.line.me/v2/bot/message/reply"
headers = [
"Content-type": "application/json",
Authorization: "Bearer #{channel_access_token}"
]
%Req.Response{status: 200} = Req.post!(url, json, headers: headers)
こんな感じです。
楽しんでください
こういうときにHTTP POSTの例を書くのにいいやつ知りませんか〜
あー 思い出した。
がよさそうですね!!!
Mix.install [{:req, "~> 0.2.1"}]
json = %{ enjoy: "Elixir" } |> Jason.encode!()
%Req.Response{body: %{"json" => something}, status: 200}
= Req.post!("https://httpbin.org/post", json)
something["enjoy"] == "Elixir" # true
また、こんな使い方もできます!
iex> Req.post!("https://httpbin.org/post", {:json, %{ enjoy: %{Elixir: "awesome"} }})
コメント欄をご覧ください。
@mnishiguchi さんのコメントから調べました。
コメントありがとうございます。
Wrapping up
Enjoy Elixir
$\huge{I\ like\ Req\ 👍}$
2022年に流行る技術予想 ーー それは、Nerves Livebookです
I organize autoracex.
And I belong to NervesJP.
I hope someday you'll join us.
We Are The Alchemists, my friends!