はじめに
突然「rest apiおもろいスネ!興味ありますわ」というLINEを送ってきた同期氏、確かにRESTAPIってよく聞くけど何なのかイマイチ曖昧にしか分かってないわーちゃんと理解しないとなーなんて返してると、はてなで見つけたこの記事がきっかけだそうだ。
ダメなエンジニアには解けないパズル。なんのこっちゃと思うが、curlを1発叩いてみれば分かる、これはハマる。笑 そういう僕も1問目は数分で解けたものの、2問目は合計1時間以上かけて解くことができた。
以下が問題への直のリンク。
出題者のブログにも書いてあるが、問題のページへ飛ぶと、「Please call my APIs」と「RESTful」というヒントがあるだけ。どうしたもんかと思ったものの、APIっつーんだからcurl叩いてみるかー、といったところからはじまりますね。
curlとは
wikipediaをソース(参考文献)にするな、と言われた大学1年生の頃を思い出しながらwikipedia貼りますね。
curl(カール)って言うから何カールコマンドっておじさんかよって思ってたけど「command line url」なんですね気づいたとき感動したーと思ったら違うっぽい。
cURLとは|client for URL - 意味/解説/説明/定義 : IT用語辞典
client for URLだとさ。
これ、httpプロトコル用だと思ってたけど、そもそもはURLベースでコマンドやデータを送るコマンドで、http以外にftp、smtp、pop3、ldap、さらにそれらのセキュアなもの(SSL/TLS)までたくさんサポートしているようです。知らなかった。
まぁよく考えたらurl内のhttp://ってhttpプロトコル使うよーって意味なわけで、ftp://** もURLだしね。。。あはは。。。
使い方は簡単、curl URL と入力すると、このURLに対してhttpのGETが実行されます。ウェブブラウザのアドレスバーに打ち込んだときと同じですね。
実際に上記の問題のトップに対してcurlコマンドを実行してみます。
MacBook-Air:~ take$ curl http://challenge-your-limits.herokuapp.com/
以下のレスポンスが得られます。ページのhtmlタグですね。
<!DOCTYPE html> <html> <head> <title>Challenge</title> <link rel="stylesheet" media="all" href="/assets/application-edc767c4f0fcfa4ad8c2f7e8465c4ddf1f23e519e2b7dcf3f7befc780cddbd37.css" data-turbolinks-track="true" /> <script src="/assets/application-6b71b9943dadf9c965554f94a9c5053dc16e4b270c87fc19cc6cfe234ec313a6.js" data-turbolinks-track="true"></script> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="IoyHLSgIr56AZ35UyA6lDccmrhsoe41hnwNG8wy4yPx5CH73ETNb5hbJQpzqd38CVyEvYzUmzXwyQXcgwGcnkw==" /> (省略)
-X でhttpメソッドを指定できるので、GET以外も使えるし、-dでパラメータをのせることもできます。
詳細はmanページへどうぞ。
cURL - How To Use (マニュアルページ日本語訳)
RESTfulとは
以上2つのサイトが非常に参考になった。
REST(Representational State Transfer)とはプロトコルでもなく、設計思想のようですね。そしてそれがHTTPに則って設計されているから、webで使われている。
大きな特徴としては
- リソースがURLで一意にアクセスできること
- ステートレスであること(サーバがクライアントの状態を保持しない)
でしょうね。そしてリソースに対しての操作はhttpメソッドのGET、PUT、POST、DELETEを用いる。シンプルで分かりやすいですね。
仕事でOpenStackのAPI(OpenStack API Documentation)をよく叩いているのでweb api自体は馴染みがありました。
上の2つで参考書籍にあがってたこの本は読みます。
Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)
- 作者: 山本陽平
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/08
- メディア: 単行本(ソフトカバー)
- 購入: 143人 クリック: 4,320回
- この商品を含むブログ (180件) を見る
まとめ
ネタバレになるから書けないんだけど、2問目で出てきた技術についてまとめたい。(笑)忘れた頃に別記事でしれーっと振り返ろうと思います。
こういう問題を作れるのはすごいし、やっぱりウィットが効いててクスっとなってしまう言い回しにはニヤニヤしてしまいますね。そんなエンジニアになりたい。
おそらくしばらくはWebサービス、もしくはWebAPIについて関わっていくことになるのでこれを機にしっかり勉強して、今後はRESTfulなAPIを自分で設計したいと思います。
追記:コメントが紹介されました
問題が公開されたのは12/28、実際に問題を解いたのは12/29。そして12/31にチャレンジした人が300に超えたということで作者がコメントバックしています。
あああめっちゃ時間かかったけど出来た!1回目に比べて凝ってて解きごたえありました。 - takeshe12
時間をかけてお付き合いいただいて、ありがとうございます。これからもたとえ時間がかかっても解きごたえがあるパズルを目指します。
300件あるうち、運良く選ばれたみたいでコメントバックいただけました。嬉しい。次回もあるみたいなので楽しみにして待ってます。