おそらく、多くの人と同じように、私は常に複雑なことを単純な言語で説明することができず、冗長になり、細部に過度の注意を払い、プロ意識を無意識に使用します。 おそらくそれが、私が記事「
How I Explained REST to My Wife」に注目した理由です。そこで、
Ryan Tomaykoが彼の妻にRESTとHTTPの仕組みを伝えています。 記事の見出しには、この記事が翻訳された言語のリストがあり、6つの言語のこのリストは、第一に、私だけではないことを明らかにし、第二に、記事がロシア語に翻訳を追加する価値があることを示しました。
PSこれは私の最初の最初の生まれですが、あなたは安全に批判することができます、それは私に役立ちます。
妻にRESTとは何かを説明したように
妻: ロイ・フィールディングは誰ですか?
ライアン:賢い人。
妻:はい? そして、彼は何をしましたか?
ライアン:彼は最初のWebサーバーの作成を手伝い、その後、Webが機能する理由を説明するために
多大な作業を行いました。
彼の名前はプロトコル
仕様にあり、ブラウザがサーバーからページを受信するために使用されます。
妻:それはどのように機能しますか?
ライアン: Web?
妻:はい
ライアン:うーん。 まあ、実際にはすべて非常に素晴らしいです。 そして面白いのは、これはすべて非常に過小評価されているということです。 私が話しているプロトコルであるHTTPは、何らかの理由で人々が無視するさまざまな素晴らしい機能を備えています。
妻:ブラウザーのアドレスの先頭に「http」と書いているのですか?
ライアン:そのとおりです。 アドレスのこの部分は、使用するプロトコルをブラウザーに指示します。 あなたが書くものは、情報技術の歴史の中で最も重要なブレークスルーの一つです。
妻:なんで?
ライアン:彼は世界のどこからでも、世界のどこからでも何でもの位置を説明できるからです。 これがウェブの基礎です。 知識と情報のGPS座標と考えることができます。
妻: Webページの場合?
ライアン:実際のところ、何でも。 この男のRoy Fieldingは、HTTPを使用して対処できることについて、彼の研究で多くのことを語っています。 Webは
RESTと呼ばれるアーキテクチャスタイルに基づいて構築されています。 RESTはリソースを定義します。これはアドレスオブジェクトです。
妻: Webページはリソースですか?
ライアン:そうです。 Webページはリソースの表現です。 リソース自体は一般的な概念にすぎません。 URLはブラウザにドライブするものです...
妻: URLとは...
ライアン:いいよ。 URLは、どこかにリソースがあることをブラウザに伝えます。 ブラウザは、このリソースの表現を具体的に要求する場合があります。 より正確には、ブラウザはこのリソースを表すWebページを要求します。
妻:他にどんなパフォーマンスがありますか?
ライアン:実際、パフォーマンスはあまり人気がありません。 ほとんどの場合、リソースには1つのビューしかありません。 しかし、新しいフォーマットが常に登場するので、将来それらがより多く使用されることを願っています。
妻:例えば?
ライアン:たとえば、人々がWebサービスと呼ぶリソースがあります。 それらは異なる人々にとって多くの異なることを意味しますが、アイデアは人々がそれを使用するのと同じ方法でインターネットを使用できるということです。
妻:通常のロボットは?
ライアン:そうでもない。 車がテーブルに座ってインターネットを閲覧するという意味ではありません。 コンピューターは同じプロトコルを使用して、互いにメッセージを送信できます。 私たちはこれを長い間行ってきましたが、現時点では、世界中のすべてのマシンと通信できる技術はありません。
妻:なんで?
ライアン:彼らはこのために設計されていないからです。 フィールディングと彼の同僚がWebで作業を始めたとき、世界中のどこにいてもあらゆるマシンと通信できることが主な目標でした。 コンピューターが情報を交換するために現在作業で使用しているテクノロジーのほとんどには、このような要件はありません。 いくつかの小さなグループのマシンとのみ対話する必要があります。
妻:そして今、彼ら全員と通信する必要がありますか?
ライアン:はい、その他。 他のすべてのマシンに存在するすべてのものについて、すべてのマシンと通信する機能が必要です。 つまり、1台のマシンに、3台目のマシンにある可能性のあるリソースについて別のマシンに伝える方法が必要です。
妻:何?
ライアン:あなたが妹と話しているふりをしてみましょう、彼女はあなたからブラシまたは何かを取りたいです。 しかし、あなたはそれを持っていない、お母さんはそれを持っているので、あなたはあなたの妹に彼女がお母さんに行く方が良いと言った これは現実の世界では常に発生し、車が通信を開始するときにも常に発生します。
妻:そして、車は、必要なものがどこにあるのかをどのように互いに伝えますか?
ライアン:もちろん、URLを使用しています。 マシンが話しているすべてに対応するURLがある場合
、名詞と同等のマシンを
作成しました 。 あなた、私、そして世界の他の人々が名詞として実世界の特定のものを示すことに同意しているという事実は非常に重要ですよね?
妻:はい
ライアン:マシンには普遍的な名詞がなく、これが問題の原因です。 各プログラミング言語、データベース、または他のタイプのシステムには、名詞について話す独自の方法があります。 これがURLがとても重要な理由です。 すべてのシステムが名詞について互いに通信できるようにします。
妻:しかし、ウェブページを見るとき、私はそのように考えていません。
ライアン:そして誰も考えていません。 フィールディングと数人の人々を除いて。
妻:動詞、代名詞、形容詞はどうですか?
ライアン:それはRESTのもう1つの大きな部分だからです。 まあ、少なくとも動詞。
妻:私は冗談を言っていました。
ライアン:面白かったが、冗談ではなかった。 動詞は重要であり、プログラミングと多態性の重要な原則です。 ポリモーフィズムは、さまざまな名詞に共通の動詞を付けることができると言う単純な方法です。
妻:わからない
ライアン:見て。 コーヒーテーブルを見てください。 名詞とは何ですか? カップ、トレイ、新聞、リモコン。 次に、これらすべてのことで実行できるアクションを定義しましょう。
妻:まだわからない
ライアン:持っていけますよね? あなたはそれらを拾うことができます。 あなたはそれらを打ち負かすことができます。 あなたはそれらを燃やすことができます。 これらすべての動詞をそこにあるものに適用できます。
妻:はい、そして?
ライアン:これは重要です。 「カップを取る」、「新聞を取る」、「リモコンを取る」と言う代わりに、名詞ごとに異なる動詞を使用しなければならないとしたらどうでしょうか。 「take」という言葉を普遍的に使用することはできませんでしたが、動詞/名詞の組み合わせごとに新しい単語を選択する必要があります
妻:すごい! 変だ
ライアン:はい、そうです。 私たちの脳は、同じ動詞を異なる名詞に適用できることを理解するのに十分賢いです。 一部の動詞はより具体的で、名詞の狭い円にのみ適用されます。 たとえば、マグカップを運転したり、車を飲んだりすることはできません。 しかし、それらの一部は、例えば、取得(GET)、配置(PUT)、および削除(DELETE)など、ほぼ普遍的です。
妻:カップを削除(削除)することはできません。
ライアン:はい、でも彼女を捨てることができます。 別の冗談でしたか?
妻:はい
ライアン: HTTPは、フィールディングと同僚が作成したプロトコルであり、動詞を名詞に適用する方法に関するものです。 たとえば、Webページを開く場合、ブラウザは入力されたURLにHTTP GET(取得する)を適用し、結果としてこのページを受信します。 それらは別個のリソースです。 Webページはこれらの画像のURLのみを示し、ブラウザはすべてのリソースが受信されてページが表示されるまで、より多くのHTTP GET要求を使用します。 しかし、ここで重要なことは、最も異なる種類の名詞との相互作用の均一な形式があるということです。 写真、テキスト、ビデオ、音声、プレゼンテーションが名詞であるかどうかは重要ではありません。 URLを取得することで、これらすべてを取得(GET)できます。
妻: (GET)を取得することは非常に重要な動詞のようです。
ライアン:そうです。 特に、ブラウザを使用する場合は、ブラウザのほとんどが受信(GET)に関与しているためです。 他のタイプのリソースとのやり取りのほとんどは使用しません。これは、HTTPが受信(GET)のみに存在することを多くの人々に確信させているため、問題です。 しかし、HTTPは
動詞を名詞に適用するための汎用プロトコルです 。
妻:素晴らしい。 しかし、これがどのように変化しているかはまだわかりません。 どの動詞と名詞が必要ですか?
ライアン:まあ、名詞はすでに存在しますが、その形式ではありません。
クリスマスプレゼントを探してwww.amazon.comをさまよう想像してみてください。 各製品が名詞であると想像してください。 彼らが車について明確な理解を持っていれば、これらの商品で多くの興味深いことができます。
妻:マシンが通常のWebページを理解できないのはなぜですか?
ライアン: Webページは人々のために設計されているからです。 車はレイアウトとスタイルを気にしません。 車にはデータが必要です。 理想的には、各URLには人のビューとマシンのビューが必要です。 マシンが(GET)リソースを要求すると、マシンリソースが要求されます。 そして、ブラウザがそれを行うとき-人間が読める。
妻:そして、人々はすべてのページでマシンビューを実行する必要がありますか?
ライアン:それだけの価値があるなら。
見て、私たちはこれについてかなりの抽象化で話している。 実際の例を見てみましょう。 あなたは教師であり、あなたの学校には大きなコンピューターシステム、または生徒を管理できる少なくとも3つまたは4つのコンピューターがあると思います。生徒のクラス、勉強しているクラス、緊急連絡先、教科書とか。 このシステムがWebアプリケーションの場合、ほとんどの場合、リストされている各名詞(学生、教師、クラス、教科書など)のURLがあります。 現時点では、ブラウザにURLを入力すると、Webページが表示されます。 各URLの背後にマシンが理解できるビューがある場合、これらの情報はすべて標準的な方法で使用されるため、システムに新しいツールを追加するのは非常に簡単です。 また、このようなシステム間の通信が少し簡単になります。 または、テスト結果を収集するために、個々の学校のシステムと通信できる地域または連邦のシステムを構築することもできます。 可能性は無限です。
各システムは、単純なHTTP GET(受信)を使用して他のシステムから情報を受信します。 あるシステムが別のシステムに何かを追加する必要がある場合、それはHTTP POST(送信)を使用しています。 システムが別のシステムで何かを更新する必要がある場合、HTTP PUT(put)を使用します。 策定する必要があるのは、データの外観だけです。
妻:これがあなたのコンピューターエンジニアが現在取り組んでいることですか? データがどのように見えるかを決定しますか?
ライアン:申し訳ありません。 その代わりに、ほとんどの人は、便利で雄弁ではない他の方法でこれらの目標を達成するために、多くの複雑な仕様を書くのに忙しくしています。 名詞は普遍的ではなく、動詞は多態的ではありません。 承認して使用を開始するのに多くの時間を費やしていますが、これはすでに障害が発生している別のシステムと非常によく似ています。 HTTPを使用しますが、これはこのプロトコルによりネットワークおよびセキュリティの専門家とのやり取りが少なくなるためです。 シンプルさを明るい小さなものとチューニングウィザードに置き換えます。
妻:しかし、なぜですか?
ライアン:分かりません。
妻:なんでやらないの?
ライアン:将来的にはそうかもしれません。
(
翻訳者注: xanepと
Anoによるコメントの後、著者の名前をRyanからRyanに修正しました)