ビールサーバも、Web サーバも、OAuth (おーおーす)サーバも似たようなものだ! 大切な事は、「リクエスト」(依頼)と「レスポンス」(返答)で通信されている、と言う事実!
0. 進化する Web 技術
時代の流れは非情だ。
『HTTPS』、『OpenID』、『OAuth』。。。一般ユーザも「きちんと理解しておいた方が良い基礎技術」が、日々、高度化・複雑化しているのだ。
情報通信技術の進化の早さの中にあっては、俗に「ITベンチャー」と呼ばれる会社に勤めているプロ達(?)ですら、理解する時間を取れずに居る人も少なくない。例えば、今や非常に多くのサイト/アプリで活用されている「パスワード不要の連携技術」(OAuth)も、その概要が深く理解されていないのが実情だ。
今回は、「最新の Web 技術」の概要を、一般のビジネスユーザにも何となく理解してもらえるように、平易に解説してみようと思う。「サーバとは何か?」から始めて「OAuth とは何か?」まで。。。

「ナンデ?」 動機は若干不純だが、我が社(クエステトラ社)のワークフロー製品『Questetra BPM Suite』の「他システム連携機能」がパワーアップし、ますます最先端の技術用語を説明する機会が増えたからだ。。。(??!)
※ クエステトラ: クラウド型ワークフロー、マッシュアップ機能を強化
~Force.com 等の OAuth 2.0 リソースにもアクセス可能に~ (2014-01-20)
https://questetra.com/ja/info/oauth-connection-20140120/
1. OAuth 理解に重要な2つの用語
サーバとは何か? API とは何か?
1-1. 「サービス」するから『サーバ』!
サーバとは何か?
『Web サーバ』と聞けば、どうしてもメマイがするが、『ビールサーバ』と聞けば、ニコヤカになる。。。(まーそんなモンだ)
しかし良く考えれば、サービスする機械だから「サーバ」なのだ。この両者に大した違いはない。確かに『Web サーバ』(実物)を目にする機会はほとんど無いが、恐れることはない(?)。「インターネットの中で、何かサービスをしてくれる機械」と言うだけの話だ。
ここで大切な事は、インターネット(≒HTTP/HTTPS)の世界では「リクエスト」(依頼)と「レスポンス」(返答)で成り立っている、と言う事実だ。意外とココを忘れてしまっている人が多い。しかしコレを認識していないと、Web 技術(Web の仕組み)の理解は進まない。当然だが「依頼に応える側」が『サーバ』だ。(そして依頼する側は『クライアント』と呼ばれる)

1-2. 誰かに向いてるから『インターフェース』?
一度は聞いた事がある「ゆーあい」(UI)と言う言葉。。。『USER インターフェース』の略だ。
ゲームに代表される「スマホアプリ」(「ネイティブアプリ」とも)の場合は、サーバから情報を受け取った「スマホアプリ」自身が「インターフェース」を表示する。また「汎用ソフト」(ブラウザ)の活用を前提とするシステムの場合は、『Web サーバ』自身が情報のレイアウトを配慮した上でデータを送信している。いずれにせよ UI とは、USER (人間)に対する情報提供の仕組みであり、人間と近い機械が「情報のレイアウト」を行ってくれている。
#「ウチのシステムは UI にコダワッテまして、是非この洗練された UI を…」などと、ユーザが見える部分だけを説明されると、個人的には「中の仕組みは洗練されてないのん?」とか「システム全体の仕組みを説明してよん?」とか思ってしまう。が、そんな話はどうでもイイ。
一方、ちまたでウワサ(?)の「えーぴーあい」(API)は、『PROGRAM インターフェース』だ。
ナンてことは無い、「ゆーあい」(UI)の相手は『USER』だったが、「えーぴーあい」(API)の相手は『PROGRAM』だ。つまりプログラム(ソフト)に対する情報提供機構を指している。この場合、人間にとって理解しやすい情報レイアウトにする必要が無い。むしろ「人間にとって心地よいデザイン要素」なんて無用だ。(※ Application Programming Interface )
さて、、、ここで大切な事は、
- コンピュータは「人に対して情報を提供する」以外にも
- コンピュータは「機械同士で情報を提供しあっている」
と言う現実だ。実際、「(1)スマホ (2)サーバ (3)他のサーバ」と言った連鎖的な通信はガンガン行われているし、人間(USER)が寝ている時間帯ですら、サーバ同士で様々な通信が行われている。意外と忘れがちなのだがこの「機械同士で情報を提供しあっている」と言う事実を認識していないと、Web 技術(Web の仕組み)の理解が進まない。

2. 『リクエスト』と『レスポンス』
目を閉じる。。。
インターネット上に無数の『リクエスト』が飛んでいる。。。
「サーバの存在」(1-1)と「サーバのインターフェース」(1-2)について認識すると、その様子がイメージできる。。。(ん? デキルか? デキルのか??)
2-1. 『リクエスト』(依頼)の種類
まずはその発信、つまり『リクエスト』について、掘り下げてみたい。。。
- A. リクエストの際に、何も渡さない
- B. リクエストの際に、何かを一緒に渡す
まずもって『リクエスト』には2種類ある。(ホントはもっとある)
マッコウ真正面から説明しても認知しづらいので、ビールサーバをイメージしてもらいたい。「ハンドルだけのビールサーバ」と「自販機っぽいビールサーバ」をイメージする。なるほど、同じリクエストでも「お金」が必要なサーバと、そうでないサーバが存在するのだ。(!!?)
インターネット上に飛び交っている『リクエスト』にも「a.簡単なリクエスト」と「b.中身のあるリクエスト」の2種の依頼方法がある。(!!)
- a. 葉書っぽい『リクエスト』
- b. 封筒/小包っぽい『リクエスト』
両者の違いは「中身」のアルナシだ。
「a.簡単なリクエスト」の場合、いわゆる URL だけで良い。例えば「 https://questetra.com/ja/blog/ 」と書けば、それは「ブログを表示して」と依頼している事になるのだ。この方法をクロウト達は『GETメソッド』と呼んでいる。「プロ達」は「あー、そのデータは GET で受け渡しするんだよ」とかワケの分からん表現をするのだが、要は「a.簡単なリクエスト」と言う事だ。
一方「中身のあるリクエスト」は URL だけでは済まない。アンケートフォームに答えたり、画像情報をアップロードしたりする際には、『封筒』や『小包』にして「リクエスト」を渡さなければならない。この方法を『POSTメソッド』と呼んでいるのだ。
ん。待てよ。『封筒』と『小包』もナンカ違う? そう、『封筒』の場合はテキスト情報だけが入っているのに対して、『小包』の場合は写真や動画などバイナリ情報が入っているのだ。
と言う事で、『リクエスト』を大別すれば、以下の3種類が実存する。(ぎゃー、、、メマイが、、、)
- a. 葉書⇒ 「GETメソッド」
- b1.封筒⇒ 「POSTメソッド (
application/x-www-form-urlencoded)」 - b2.小包⇒ 「POSTメソッド (
multipart/form-data)」
#深夜ラジオに「チェッカーズの新曲、流して!」と依頼するリクエストは、ハガキだ。(どうでもイイ)
#あ、「涙ぁ~のぉ~、リクエぇ~スト」は、誰に何をリクエストしてたのだろう。(どうでもイイ2)

2-2. 『レスポンス』(回答)の種類
では、(『リクエスト』に応答する)、『レスポンス』には、どんなものがあるのだろう? (頑張ってイコー)>自分
考えてみれば難しいことではないが、『レスポンス』(返信)には必ず「中身」がある。
「text/html」、「text/css」、「application/octet-stream」、「video/mpeg」。。。非常に種類が多いのでアンマリ知らなくて良いが、(ワタシも良く知らない)、こちらも「テキスト情報系」と「画像系情報」がある。つまり、テキスト情報系なら『封筒』でよいが、画像系情報なら『小包』で返ってくるのだ。
ここで大切な事実は、『レスポンス』も『リクエスト』と非常に似ていると言う事だ。実際、両者は共に「メッセージ」と呼ばれる。ちなみにレスポンスの『封筒』や『小包』には、(『リクエスト』(依頼)には必須だった)、「URL」や「メソッド命令」はない。

2-3. API への『リクエスト』と API からの『レスポンス』
いや、待てよ・・・。
イマドキの Web 通信は「コンピュータ同士もすなる」とぞ言ふ。
そう、今、コンピュータ達の間で流行している「中身」は『application/json』だ。(「ジェイソン」と言っても「殺人鬼」ではない ←オキマリ)
API からの『レスポンス』(の中身)は「application/json」だったり、「application/soap+xml」だったりするのだ。既に説明したように、人間には読みづらい。が、機械には非常に読み易い。ここで大切な事は、『レスポンス』だけでなく『リクエスト』でも、API との通信においては「人間には読みづらいフォーマット」が多用されていると言う事実だ。
#ちなみに json や xml はテキストなので、画像系データを載せづらいと言う弱点がある。

3. 具体的な API リクエスト
さて、、、ここまでの説明を踏まえて、『API リクエスト』の例を見てみよう。
3-1. 事例:カレンダー予定の追加
いきなり、リクエスト例を書いてみる。簡単追加(quickAdd)と言う API を使っている。
Request:
POST https://www.googleapis.com/calendar/{TeamCalendarID}/events/quickAdd
Content-Type: application/x-www-form-urlencoded
text=Meeting 2014-01-22「にゃるほどぉー!!」と、1人にでも言ってもらえれば、この記事を書いてよかったのだが、どうだろう?
先頭のPOSTとContent-Typeの説明で、「封筒(POST)でリクエストするよー」と言って、URL部で、「カレンダ{TeamCalendarID}に、予定(events)を追加してー」と言って本文で、「予定の内容は「Meeting 2014-01-22」だよー」
と言っているのだ。するとすかさずサーバから「登録したぜ」と言う内容が json フォーマットで返ってくるのだ。
Response:
{
“kind”: “calendar#event”,
“status”: “confirmed”,
“created”: “2014-01-21T07:28:46.000Z”,
“updated”: “2014-01-21T07:28:46.357Z”,
}3-2. 事例:ブログ原稿の投稿
例をもう一つ。
Request:
POST https://www.googleapis.com/blogger/v3/blogs/{TeamBlogId}/posts?isDraft=true
Content-Type: application/json
{
“content”: “Hello<br>Hello<br>Hello”
}このリクエスト例は
先頭で、「封筒で(POST)でリクエストするよー」
URLで、「ブログ{TeamBlogId}に、草稿を追加してー」
本文で、「草稿の内容は「Hello<br> Hello<br> Hello<br>」だよー」
と言っている。こちらはリクエスト本文にも json が使われている例だ。そして返事にも恐怖の json 殺人鬼が…。
{
“kind”: “blogger#post”,
“content”: “Hello<br> Hello<br> Hello<br>”,
...
}

4. 誰が許したリクエスト?
「API へのリクエスト」と「API からのレスポンス」が解読できる様になった。(へ?、なった??)
しかし、誰でもリクエストできるワケでは無い。つまり権限の問題がある。そこで重要な技術は「許可」の技術だ。その名も「おーおーす」(OAuth)と言う。いまや Facebook Twitter などなど、さまざまなサービスで利用されている。
そう言えば、会議の場で「その件は未だ社内で“オーソライズ”されて居ないので云々」などと発言するオトナ達がいるが、あの “オーソライズ” と同じ言葉だ。Web サーバ間の OAuth 通信も、システムユーザに「オーソライズ」された通信しかできない。
以下は、「システム利用者」ではなく、「システム運用者/設定者」や「業務プロセス設計者」が知るべき知識を書く。つまり日頃ユーザとして利用するだけの方は、以下の内容までは知る必要が無い。
ちなみに、この「許可」(認可)と言う概念は、「IDパスワードを渡す」(認証)の概念と本質的に違う。例えば、「許可」であれば後で取り消せるが、「IDパスワード」を忘れてもらう事はコンナンだ。
4-1. OAuth 2.0 通信の設定
OAuth 通信設定とは、要するに「自動送受信の御膳立て」だ。大きな流れは以下の通りとなる。
しかしこの「許可設定」は、実際に設定画面と格闘してもらう方が早い。手順等を詳細に書いたとて、ナカナカ頭に入るものでもない。と言う事で、無責任な話ながら、まずは「Googleコンソール」にアクセスし、新しい「Project」を作成する所から始めるのをオススメする! ※ https://cloud.google.com/console/project
- 1) 自動接続の受け入れ設定(Google側)
1-1. 連携設定ユーザが「Googleコンソール」にアクセス
1-2. [Credential](証明書)メニューに移動し「CLIENT ID」を作成 ← 要 Questetra の 「Callback URL」
1-3. 『Client ID』と『Client secret』を取得 - 2) 自動発信の設定(Questetra側)
2-1. プロセスモデル(業務プロセス定義)を作成
2-2. 日付型のデータ項目、文字列型のデータ項目を作成
2-3. 自動送信文字列の生成
2-4. 自動送信アイコンの[OAuth 2.0 設定]に証明書を登録
2-5. 自動送信アイコンの「通信設定」にて送信先を設定
<より詳細には…>
◇クラウド型 Workflow と Google Calendar (OAuth 2.0 連携) (2014-01-27)
https://ja.workflow-sample.net/2014/01/oauth2-google-calendar.html
4-2. OAuth 2.0 通信の基礎知識
- Credential (証明書)
- OAuth サーバ側で、特定の通信に対して発行する証明書
- OAuth 2.0 サーバの種類
- A. 接続許可証(Access Token)のみを提供する API
- B. 接続許可証を更新する仕組み(Refresh Token)併せて提供する API
- 1. 許可の範囲(Scope)の指定が必須の API
- 2. 許可の範囲(Scope)の指定が任意の API
- OAuth 2.0 の構成
- a. OAuth 2.0 クライアント
- a1. Web Application に組み込まれたプログラム(Webサーバー上 Confidential クライアント)
- a2. Web クライアント等に組み込まれたプログラム(User-agent-based application)
- a3. Android/iOS等ローカルアプリに組み込まれたプログラム(Native application)
- b. OAuth 2.0 認可サーバ (アクセストークンを発行する:Authorization Server)
- c. OAuth 2.0 リソースサーバ (データ提供等を行う:Resource Server)
- a. OAuth 2.0 クライアント
- OAuth 2.0 の用語
- [Consumer key] クライアントを識別するID(client_id)
- [Consumer secret] クライアント識別IDとペアの秘密鍵(client_secret)
- [Authorize URL] エンドユーザーがクライアントにリソースの使用許可を出す確認画面
- [Redirect URI] クライアントが認可コードなどを受け取ることになるエンドポイント
- ◆OAuth 2.0 通信の仕様 [RFC6749,RFC6750]
5. まとめ
- サーバへの「リクエスト」には POST/GET と言う依頼の種類がある。
- サーバへの「リクエスト」中身がある時とない時がある。
- サーバからの「レスポンス」には色々な中身がある。
- コンピュータ同士の API 通信では「json」と言うテキストやり取りが流行しているらしい。
非常に乱暴な概説だったが、まずはこの程度の「システム構築知識」があれば自動連携通信の設定ができるようになる。以上の知識に「プログラミング知識」は要らない。
しかし、、、クラウド時代のシステムインテグレータ(システム構築)はタイヘンだ。つまるところ、世界中の「OAuth リソース」を活用する事になるのだ。そこにはいわゆる通信知識だけでなく、どこにどの様な「OAuth リソース」があるか?、その利用コストはどの程度か?、あるいは「OAuth リソース」が使えない場合にはどの様な対策を取るべきか??と言った幅広い知識が必要になる??
PS. 無料試用のススメ
クラウド型ワークフロー 『Questetra BPM Suite』 は、少人数なら無料で使い続ける事ができる!!そして、OAuth 2.0 のクライアント機能を標準装備している。まだ、色々と機能制約はあるのだが、ぜひ一度試してみてもらいたい。
PS2. 専門家向けFAQ
アクセストークンは HTML ヘッダ部にて送出されマス。ファイル型データはファイル名が送出されます。同一パラメータ名で複数データを送出する設定にすれば配列になります。今(v9.8)のところ「多階層な json データ」をリクエスト送出する事はデキマセン。
「スクリプト工程」や「Addon サービス工程」(自作の自動工程)などで、多階層な json を送出することが可能です(20160905, v11.1~)
