📦

【Elixir】connpassのAPI wrapperを作った

2022/02/08に公開

先日、connpassに掲載されているElixirの関連イベントを見れるサイトを作りました。

https://zenn.dev/koga1020/articles/6e67765cc53539

そこで作ったconnpass APIのwrapperを切り出して、ライブラリ化してみたので簡単に紹介します。

https://github.com/koga1020/ex_connpass

使い方

READMEに書いてある通りで、depsに追加して ExConnpass.run/1%{query: [keyword: "検索キーワード"]} のように渡せば検索が可能です。

※ 過度な検索の利用は注意してください。robots.txtを参照するに、5秒以上間隔を空けるのが望ましいです。

iex> ExConnpass.run(%{query: [keyword: "elixir"]})

keyword listに対してconnpass APIで指定可能な検索パラメータを設定して実行できます。

iex> ExConnpass.run(%{query: [series_id: 5294, order: 1, count: 2]})

テストの実装

このようなライブラリを実装するときには「外部APIのテストってどうするのさ?」という課題に当たると思います。

今回はこちらの記事を参考にして、実際のconnpass APIを模したMock Serverを立ててテストを書いてみました。

https://medium.com/flatiron-labs/rolling-your-own-mock-server-for-testing-in-elixir-2cdb5ccdd1a0

  • test環境のみCowboyサーバーを立てる
  • configでAPIのエンドポイントを制御
  • test環境では http://localhost:8081 にリクエストを投げる

という流れで、testの時に本家サイトの方にリクエストが飛ばないようにしています。

MockServerの実装が必要なものの、テストコードがすっきりするため、このやり方はアリだなと思った次第です。

まとめ

細かくライブラリを作ってdeps.getして使って、、というのがサクサクやれるのもElixirのありがたいところです。

test環境だけCowboyサーバーを立てる部分で、mix.exs & application.exの書き方がちょいと怪しいので、読み込んでみたいと思います。

Discussion