curlコマンドを使ってAOJから自分の情報を取得してみた


目的

思ったよりも手間取ったので調べたことの備忘録。API初心者です。
AOJのAPIリファレンス

実際に使ったコマンド

$ curl -X POST -H "Content-Type: application/json" -d '{"id":"my_name", "password":"my_password"}' https://judgeapi.u-aizu.ac.jp/session

わからなかったこと

AOJのAPIリファレンスを読んで、
自分のidとpasswordをJSONの形でパラメータにするらしい。

POSTってなに?

HTTP リクエストメソッドによると、

POST は指定したリソースに実体を送信するために使用するメソッドであり、サーバー上の状態を変更したり、副作用が発生したりすることがよくあります。

だから今回使うのはPOSTじゃなくてGETなんじゃないの? と思ったのですが、今回は自分のidとpasswordをjson形式でパラメータ付与してリクエストするので、POSTらしい。

エンドポイントってなに?

RESTful APIのURI設計(エンドポイント設計)によると、

エンドポイントとはAPIにアクセスするためのURIのこと。

らしい。ARIはUniform Resource Identifier つまりリソースを識別するためのもの。また、

似たような言葉に「エントリポイント」というものがある。エントリポイントとはプログラムやサブルーチンの実行を開始する場所のこと。
つまり、エンドポイントはAPIにアクセスする側からの、エントリポイントはアクセスされる側からの違いということになる。

今回のコマンドで言うところの、APIの末尾、/session のところ。これをReferenceを見て任意のURIに変更すれば任意のデータが取得できる。

コマンドライン上のオプションがわからない

curl option 覚え書きより、今回使ったオプションについてまとめておく。

$ curl -X POST -H "Content-Type: application/json" -d '{"id":"my_name", "password":"my_password"}' https://judgeapi.u-aizu.ac.jp/session

-X

curl は何も指定しないと GET のリクエストを発行するけど、それを変えたい時に使う。

らしい。今回はPOSTリクエストなので-X必須。

-H

OAuth のトークンとか渡すときに使うオプション。
HTTP の Request Header に情報を追加できる。

最初必要ないかなと思ったけど必要だった。また、JSONのMIMEタイプには今回はapplication/jsonを使用した。

-d

このオプションを指定すると curl は POST メソッドでリクエストを送る。
ほんでもってここで指定されたデータが Request Body に入る。
key=value の形式で書く必要がある。

なので今回はidとpasswordをJSONの形で記述。

まとめ

AOJってAPI叩く練習にいいのかもしれない…

次はデータをjavascriptとかで取得できるようにしたい。