仕事の引継ぎで会社の後輩のために作った資料なんですが、参考になるかなと思って載せます。
特にプログラマーでもないんだけど、開発関係者相手にメールでやり取りするなら概要だけでも頭に入れておいて損はないと思います。
唐突ですが、そもそもプログラムって何かという話
ある処理をコンピュータに対して命令する命令文の集まりをプログラムと呼びます。
人間が人間の言葉(自然言語と言います)でしゃべってお互いを理解し合うように、コンピュータはコンピュータ同士でしか通じない機械語を話して情報をやり取りしています。
つまり人間からコンピュータに仕事をお願いするときは、コンピュータが解釈できる言葉でお願い(命令)を書いて渡してあげる必要があります。
この言語のことをプログラミング言語と言います。
プログラミング言語いろいろ
コンピュータへの命令を書くための言語がプログラミング言語ということになりますが、プログラミング言語ごとに得意な分野が分かれています。
人間で言えば「あの人は文系(理系)だ」とか「あの人は絵を描くのが得意だ」とか、そういう感じで人それぞれ得意分野があるように、それぞれのプログラミング言語(またはプログラミング環境)で得意なことが違います。
例えばブラウザに何かしらWebページを表示させようとしているシチュエーションを考えてみましょう。
この場合、大きく分けて3つのプログラムが動いています。
- マークアップ言語
- クライアントサイドのプログラム
- サーバサイドのプログラム
急に専門用語が出てきましたね。ご安心ください、説明します。
マークアップ言語
例えば上の専門用語リストをブラウザに表示させようとするとき、「裏」では次のように書きます。
<ul> <li>マークアップ言語</li> <li>クライアントサイドのプログラム</li> <li>サーバサイドのプログラム</li> </ul>
普通に日本語として読める言葉の前後が<ul>や<li>のような「タグ」と呼ばれるもので囲まれています。
これは囲んだ文字列を「リスト表示させなさい」というコンピュータに対する命令になります。
つまり表示をコントロールしている一種のプログラムです。
このようなものを一般にマークアップ言語と言い、代表的なものが上の例で示したHTMLです。
その他CSS(スタイルシート)というのも、見た目をコントロールするマークアップ言語です。
あとXMLというのがあって、こちらは見た目ではなく、タグで囲んだ文字列の「意味合い」や「役割」をコントロールするマークアップ言語です。
このようにマークアップ言語は文字、写真、URLなどの見た目や意味を制御する仕事をしています。
クライアントサイドのプログラム
普段見ているブラウザの正にその真裏、そのパソコンやスマートフォンの中でせっせか仕事をしているのがクライアントサイドのプログラムです。
有名なところではJavaScriptというのがあります。
クライアントサイドのプログラムというのは何をしているかと言うと、HTMLやCSSができない(または苦手としている)ことを担当します。
例えば複雑なアニメーションを表示させたり、ユーザからの入力をその場で処理したりなんかする仕事です。
サーバサイドのプログラム
クライアントサイドのプログラムは、今見ているユーザにだけ関係することや、その場限りの処理は得意ですが、もっと大掛かりなことは苦手です(というか現状できないと思ったほうがいいです)。
そこでサーバサイドプログラムの登場です。
例えば掲示板を考えてみましょう。
あるユーザが「こんにちは」と投稿します。
このユーザが誰で、いつ、何を投稿したのか、それをどのWebページでどんな順番で表示されるのか、といった諸々のことを管理しているのがサーバサイドのプログラムです。
サーバサイドのプログラムには大きく分けて2つあります。
- 情報を貯めこんでおく倉庫の役を担ってるデータベース
- データベースと情報をやり取りして処理する役割のプログラム
データベースにはものすごい数の「レコード」が収められています。
仕事でよくエクセルを開くと思いますが、エクセルのシートには列と行があります。
列にはその項目が何を表しているのかが1行目に書いてあります(掲示板で言えばID、名前、投稿時間、投稿内容・・・などの項目名)。
そして実際のデータは横並びに行に分かれて載っていると思います。これがレコードです。
このレコードが無数に集まったものがデータベースです。
さてデータベースにはものすごい数のレコードが収まっているわけですから、必要なレコードを1行目からいちいち探していたのでは埒が明きません。
そこでプログラムを使って必要なデータを取り出します。
例えばあるユーザが「掲示板にアクセスして友達の最近の投稿を見に行った」という状況を思い浮かべて下さい。
ここで「(特定の)友達の」「最近の投稿」という条件が決まります。
この条件を元にデータベースを検索して一致するレコードの情報をクライアント(ブラウザ)まで届ける仕事をしているのがサーバサイドのプログラムです。
SNSとAPI
ここまででだいたいWebの流れは理解していただけたでしょうか。
SNS(ソーシャルネットワークサービス)には、前述のユーザ情報や掲示板への投稿内容をはじめとして様々なデータがぐっちゃりごっそり集結しているわけです。
そのSNSを運営している会社にエンジニアとして勤めていれば、そのぐっちゃりごっそりしたデータのジャングルをサバイブしながら必要なデータを集めて新しい機能を追加することもできるでしょう。
しかし、その会社の外にいる3p(サードパーティ)の開発者がそのSNSの中で新しいサービスを始めたいと思った時にはあまりにも不親切です。
不親切というか、そんな生のデータ仕様をぽいっと渡されても到底理解できないと思います。
それに、データ仕様を公開する方も、公開しちゃまずい部分まで外に出してしまったらセキュリティ的に問題ありありです。
そこで考案されたのがAPIという手法です。アプリケーション・プログラミング・インターフェースの頭文字でAPIです。
SNSのAPIとは、安全にデータにアクセスして、開発する人みんなが共通の理解とルールの下でサービスを展開する(実際にはプログラムを動かす)ためにあるのです。
APIにアクセス
APIにアクセスするというのを回りくどい言い方に言い換えると「決められたやり方でデータベースにあるデータにアクセスする」ということになります。
APIに対して行うリクエストは基本的に次の4つです(方法、方式という意味で「メソッド」と言ったりします)。
- POST(Create)・・・新規でデータを突っ込む
- GET・・・特定のデータを取ってくる
- PUT(Update)・・・特定のデータを上書きする
- DELETE・・・特定のデータを削除する
ここでも掲示板を例に取りましょう。
朝起きてSNS内の掲示板を開いて「こんにちは」と投稿(POST)しました。
投稿が完了すると画面上に今しがた投稿した「こんにちは」という文字が表示されました(GET)。
勢いで「こんにちは」と投稿してしまったけど考えたら今朝じゃん、ということで掲示板の編集ボタンを押して「おはようございます」という投稿で上書き(PUT)しました。
ここで気付きます。寝ぼけていたせいで全然自分と関係のない掲示板に投稿してしまいました。
そこで急いで「おはようございます」という投稿を削除(DELETE)しました。
このようにそれぞれのシチュエーションでそれそれのリクエストがAPIに対して走っているわけです。
最後にRESTful APIについて、簡単に
REST APIやRESTful APIでググるとものすごく小難しい解説がいっぱいヒットしますが、要はSNSみたいな環境に適しているAPIの設定方法のことだと覚えればいいと思います。
あるパラメータ(ユーザIDとか)を指定して特定のURLにアクセスすると、最初の方で書いたXML形式なんかでリクエストした結果が返ってくる・・・という方式のAPIをRESTful APIと呼んでいます。
細かいところは省きまくった雑な説明でしたが、少しでも参考になったなら幸いです。