4

ロイ・フィールディングは次のように書いています。

REST API は、固定のリソース名または階層を定義してはなりません (クライアントとサーバーの明らかな結合)。サーバーは、独自の名前空間を自由に制御できる必要があります。代わりに、HTML フォームや URI テンプレートで行われているように、適切な URI を構築する方法をサーバーがクライアントに指示できるようにします。これらの指示は、メディア タイプとリンク関係内で定義されます。

システム間インターフェースでこれをどのように行いますか? クライアントがhttp://my.server.orgのサーバーで注文を作成したいとしますhttp://my.server.org/nOなどではありませんか?

ヒューマン インターフェイス (つまり、ブラウザ) の場合、サーバーは何らかの形式のリンク (おそらくform要素内) を提供し、そのリンクの周りとそのリンク内のテキストは、そのページのどのフォームが作成に適しているかをユーザーに伝えると思います。注文(ユーザーの作成または検索結果への移動を想定)

クライアント側でこれを実装するために使用されるメカニズムは何ですか? また、それらは実際に使用されているのでしょうか、それとも大部分の人が単に URL をクライアントに配線しているだけなのでしょうか?

4

3 に答える 3

6

システム間インターフェースでこれをどのように行いますか? クライアントがhttp://my.server.orgのサーバーで注文を作成したいとします http://my.server.org/nOなどではありませ んか?

それは学びません。通常、マシン クライアントは「学習」できません。少なくとも、私たちはまだ Skynet の前です。それらを「教える」必要があります。

しかし重要なのは、彼らに URL を教えないことです。あなたは彼らに関係を教えます。

HTMLで考えてみてください...

<a rel="order" href="http://my.server.org/newOrder"/>

<a rel="order" href="http://my.server.org/nO"/>

rel は同じ "order" ですが、URL は違います。

「完璧な」世界では、システムには単一のエントリ ポイント (たとえば、http://my.server.org/ ) があり、クライアントはそこから、知る必要のあるすべての rel を見つけることができます。

実際には、多くのシステムには、クライアントが常にシステムのルートから開始する必要がないように、便宜上、クライアントが開始できるいくつかの「よく知られている」定義済みのエントリ ポイントがあります。これらのよく知られているエントリ ポイントには、これらの URL がすぐには変更されないというプロバイダーからの暗黙のコミットメントがあります。それらが長命であり、サーバーがそれらを非常にうまくサポートすること。

しかし、エントリ ポイントを通過すると、その背後にそのような約束がない URL が見つかる可能性があります。URL は 1 回限りの URL にすることができます。たとえば、負荷分散のために別のマシンに向けることができます。知るか。しかし、サービスの利用者としては、URL が何であるかは気にせず、関係だけを気にします。リレーションは、使用する URL の詳細を示します。

ハイパーメディア API のドキュメントには、クライアントが遭遇する各 rel に統一インターフェイスを適用する方法が説明されています。クライアントはそれを「直観」することもできず、教えなければなりません。

基本的に、クライアントが処理するペイロードで検出する、または検出する可能性のある関係をナビゲートする方法をクライアントに教えることが、クライアントがハイパーメディア API を操作する方法です。ペイロードには道を示す標識が含まれていますが、標識の行き先はサーバーによって指示されます。

マシン ツー マシンの世界での使用頻度については、おそらくそれほど多くはありません。ほとんどのシステムは、URL の変更が問題になるほど大きくなく、クライアントが非常に少ないため、クライアントを変更しても大きな負担にはなりません。したがって、ほとんどの場合、ハードコードを離れただけです。

しかし、最終的には、悪いクライアントが発生するだけです。悪いクライアントに対して REST システムができることは何もありません。とにかく、実行時にそれらを区別することはできません。

于 2011-06-11T06:46:23.213 に答える
2

APIをどのように公開するか(マシンで使用される)に関係なく、重大な変更を加えることができます。

APIをUI(HTMLフォームなど)の背後でラップする場合、ユーザーを壊すことなくURIを自由に変更できますが、これは、ユーザーが提供された抽象化を消費しているためです。フォームを変更せずにURLスキーマを変更しても、クライアントは機能しなくなります。

マシンクライアントの破損を回避するためのいくつかの方法(基本的に、下位互換性のサポート):

  • ある種のURLバージョン管理を組み込む
  • 古いURLスキーマから新しいスキーマへのリダイレクトを実行します
于 2011-06-11T06:25:25.040 に答える
1

次の方法でアプローチすることに成功しました: WADL ファイルをアプリケーションのルート URL に公開し、メディアの種類と、その中のリンクの場所とそのセマンティクスを記述します。これ (WADL) が REST コミュニティの一部から重要視されていることは承知していますが、WADL のみの URL 重視に常に恐れを感じていました。すべての宗教的議論を超えて、表現を文書化する明確な方法を持つことが好きでした. WADL の URL フォーカスを回避し、表現のどこにリンクがあるかを指摘し、それを文書化する方法があります。アプローチの詳細については、そのブログ投稿(現在はメンテナンスのためダウンしているため、Google キャッシュで確認することをお勧めします) を参照してください。

これにより、クライアントは WADL へのアクセスについて知ることができるため、クライアントは 1 つの URL だけを知ることになります。その後は、表現とリンクの場所、呼び出されたときにどの HTTP メソッドがどのパラメーターを必要とするかなどについて学習するだけです。の上。

于 2011-06-11T07:04:24.220 に答える