Qiita API v2 用の Elixir クライアント QiitaEx を公開したので、簡単な使い方、悩んだこと、ハマったことなどについて書きます。
作った理由
Qiita API v2 Hackathon が明日開催されます。参加したかったのですが都合がつかない。でも遠くからでも、雰囲気だけでも参加したい。ということで一人で一週間くらいチマチマと Qiita Hackathon して作りました。
それと去年も Elixir で Qiita API 作ろうとしたけど、途中で断念しちゃってたのでリベンジという意味もあります。
Output
ということで Qiita Hackathon で作ったものは以下に公開してあります。
How To Install
2つ紹介します。一つはプロジェクトへの追加方法、もう一つは iex で手軽に試す方法です。
プロジェクトへの追加方法
適当なプロジェクトを作り、mix.exs の application
関数と、deps
関数に :qiita_ex
を追加します。
def application do
[applications: [:logger, :qiita_ex]] # <= ここと
end
defp deps do
[
{:qiita_ex, "~> 0.0.1"} # <= ここね
]
end
それができたら mix deps.get
して、qiita_ex をインストールします。
iex で試す方法
以下の通り。
$ git clone https://github.com/ma2gedev/qiita_ex.git
$ cd qiita_ex
$ mix deps.get
$ iex -S mix
# コンソールが立ち上がり QiitaEx を使える状態になります。
How To Use
まずは Qiita API v2 用の access token が必要なので、https://qiita.com/settings/tokens/new から取得してください。
iex 上では以下のように実行できます。
iex> response = QiitaEx.API.Users.get_user("<YOUR_ACCESS_TOKEN>", "ma2ge")
%QiitaEx.Response{ ...省略
QiitaEx.Response
が返ってくるので、status_code
, headers
, body
はそれぞれ以下のように取得できます。
iex> response.status_code
200
iex> response.headers
%{"Cache-Control" => "max-age=0, private, must-revalidate", ...省略
iex> response.body
%{"description" => "Programmer", "facebook_id" => "", "followees_count" => 33, ...省略
body は json を Elixir の map に変換して返します。headers は HTTPoison から返ってくるものそのままですが、こちらも map です。
その他の API については、lib/qiita_ex/api/ を見ていただけると分かりやすいかと思います。公式 document 側も合わせてみるとよいです(document 書いていない言い訳。。。)。
制限
Qiita Team を使っていないので、Qiita Team 関係の API は作ってないです。
その他、色々荒削りな感じになってます。
参考にしたもの
- API の命名周りはほぼ qiita-rb です。
- Elixir での API デザインについては extwitter, exlingr, elixir-dropbox などチェックしました
悩んだこと
access token の渡し方で悩む
config 形式と引数形式で悩んで、結局引数渡しにしました。
config 形式で extwitter のやり方だと、API 使う場合に config が共有されてしまう。結果他の access token と同時に使うことができなそうと思った(未調査)。
引数渡しで elixir-dropbox のように Client の struct 作るのも考えましたが、access token 渡すだけだし、そこまで作らなくていいかー。となり access token だけ渡す形にしました。
色々迷っているところもあるので、API の IF は後々変更するかもしれないです。ベストプラクティス的なものがあれば、そっちに移りたいですし。
ハマったこと
"Content-Type: application/json"
パラメータも全部渡しているし、qiita-rb でも同じパラメータでできるし何が違うの?意味分からない。ってときは大体 typo ですよねー。application が applicatoin になってました
必須パラメータ tags
上の問題が解決しても、投稿だけは上手くいかない。しかも qiita-rb でも上手くいかない。必須パラメータは全部渡しているはずなのに。。。
思い込みでした。必須パラメータ tags が足りていなかった。普段 Qiita 上で投稿するときは、基本的にタグつけてたから分からなかったけど、タグは必須要素だったんですね。ちゃんとドキュメント見とけという話でした。。。
最後に
一人でしたが、Qiita Hackathon 楽しかったです。無事ものを公開することまでできてよかった。後は GitHub の方へ をつけていただければ私から言うことは特にないです
Resources
- Qiita API v2 Document
- 設計の参考にした API とか
明日は @mururu さんです。