41

私は現在、「Rest in practice」という本を読んでいます。ハイパーメディア、ハイパーメディア フォーマット、ハイパーメディア コントロール、ドメイン アプリケーション プロトコルという用語が理解できません。著者は、ドメイン固有のハイパーメディア形式の必要性を示唆していました。私はそれらをほとんど理解できませんでした。これらの用語をグーグル検索しましたが、正しい答えが見つかりませんでした。これらの用語と、 application/xml の代わりにドメイン固有のハイパーメディア形式が必要な理由を説明できる人はいますか?

4

2 に答える 2

90

REST を自称するほとんどのアプリケーションはハイパーメディアを使用せず、まったく REST ではないため、これについては多くの混乱があります。

ハイパーメディアは、HTML 以外のコンテンツのハイパーテキストを一般化したものです。ハイパーテキストはハイパーメディアのサブセットであると言えます。ハイパーメディアは、Web サイトを閲覧できるようにレンダリングされたすべてのリンク、ボタン、およびすべてを備えたブラウザー内の HTML にすることも、リンクや人間はブラウザを使ってレンダリングされたリンクやボタンをクリックします。

HATEOASとは、REST アプリケーションとのクライアントの対話がハイパーメディアによって駆動される必要があることを意味します。つまり、クライアントは、アウトに依存するのではなく、リソース自体の表現のリンクをたどることによって、必要なすべてのリソースのすべての URI を取得する必要があります。多くの API と同様に、ドキュメントに記載されている URI パターンのような帯域外情報。

これは思ったより簡単です。これは、クライアントと REST アプリケーション間のやり取りが、人間が Web サイトをブラウジングするのとまったく同じように行う必要があることを意味します。たとえば、スタック オーバーフロー自体を考えてみましょう。ユーザー、質問と回答があります。質問のリストを表示したい場合、ドキュメンテーション Web サイトにアクセスして、質問をリストするための URI テンプレートを取得し、プレースホルダーにユーザー ID を入力してブラウザーに貼り付ける必要はありません。質問のリストとして説明されている別のドキュメントへのリンクをクリックするだけで、正確な URI が何であるかは気にしません。それが実際の HATEOAS の意味です。

ハイパーメディア形式は、クライアントとサーバー間の契約を定義します。これは、ハイパーメディア アプリケーションでリソースの特定の表現に使用する、ハイパーリンク対応のデータ形式です。たとえば、ユーザー リソースがある場合、クライアントがそのリソースの表現から正確に何を期待すべきか、および表現を解析して情報を抽出する方法を文書化する必要があります。API を操作する前に、クライアントはパーサーを実装して情報を抽出する必要があります。クライアントは、リソースが持つプロパティとその意味、予想されるリンク関係、利用可能な状態遷移などを知る必要があります。

ハイパーメディア コントロールは、ハイパーメディア形式でのプロトコル メソッドとリンク関係の組み合わせであり、利用可能な状態遷移とその実行方法をクライアントに通知します。たとえば、質問rel=post_answerには、回答表現を POST メソッドのペイロードとして期待し、それに関連する新しい回答リソースを作成するリンクがある場合があります。

一連のハイパーメディア フォーマットを定義したら、特定のインタラクションにどのハイパーメディア フォーマットが使用されているかを正確に判断するために、ドメイン固有のメディア タイプが必要になります。一般的なメディア タイプのようなapplication/xmlものは、クライアントにデータ形式の解析方法を伝えるだけで、パーサーによって抽出された情報については何も言いません。たとえば、ドキュメントに media-typeapplication/vnd.mycompany.user.v1+xmlがあるとします。クライアントは、それが XML 形式の User リソースのバージョン 1.0 表現であることを認識しています。プロパティやリンクなどを追加または削除してリソースを変更する場合、バージョン番号を変更できます。クライアントは、実装されたバージョンをAcceptヘッダ。XML や JSON など、同じリソースに対して複数の形式を提供することもできます。

すべてをまとめてラップすると、基盤となるプロトコルである HTTP が使用されます。ハイパーメディア フォーマットとメディア タイプによって定義されたコントラクト --ドメイン アプリケーション プロトコルがあります。これは、アプリケーションによってアドバタイズされるリソースと利用可能な状態遷移のセット全体です。

言うまでもなく、インターネットで見かけるいわゆる REST API の 99% は、このすべてに従っているわけではありません。それらのほとんどは、いくつかの REST 制約に従う単純な HTTP API です。実際にはそれらのすべてが必要なわけではないため、また開発者が REST の本来の姿であると考えているためです。

于 2015-04-12T05:56:00.420 に答える