NetflixまたはTwitterスタイルのWebサービスはRESTまたはSOAPを使用する必要がありますか?[閉まっている]


145

TwitterとNetflixの2つのRESTサービスを実装しました。どちらの場合も、SOAPではなくRESTとしてこれらのサービスを公開するという決定に関係する使用法とロジックを見つけるのに苦労しました。誰かが私が欠けているものを手がかりにして、RESTがこれらのようなサービスのサービス実装として使用された理由を説明できることを願っています。

  1. RESTサービスの実装は、SOAPサービスの実装よりも無限に時間がかかります。すべての最新の言語/フレームワーク/プラットフォームがWSDLを読み取り、プロキシクラスとクライアントを出力するためのツールが存在します。RESTサービスの実装は手動で行われます-これを取得するには-ドキュメントを読んでください。さらに、これらの2つのサービスを実装する際、実際のスキーマや参照ドキュメントがないため、パイプを介して何が返されるかを「推測」する必要があります。

  2. とにかくXMLを返すRESTサービスを作成する理由は何ですか。唯一の違いは、RESTでは各要素/属性が表すタイプがわからないということです。自分で実装して、いつの日か常にintだと思っていたフィールドで文字列が検出されないことを願っています。SOAPはWSDLを使用してデータ構造を定義するため、これは非常に簡単です。

  3. SOAPにはSOAPエンベロープの「オーバーヘッド」があるという不満を聞いたことがあります。この時代では、ほんの数バイトを心配する必要があるのでしょうか。

  4. RESTを使用すると、URLをブラウザーにポップするだけでデータを表示できるという議論を聞いたことがあります。もちろん、RESTサービスが単純な認証を使用しているか、認証を使用していない場合。たとえば、NetflixサービスはOAuthを使用しており、リクエストを送信する前に、署名とエンコードを行う必要があります。

  5. 各リソースに「読み取り可能な」URLが必要なのはなぜですか?ツールを使用してサービスを実装している場合、実際のURLに本当に関心があるのでしょうか。


5
RESTは「発明」されていないことに注意してください。HTTPの始まり以来存在しています。
Dirk Vollmar、2010

5
あなたとロイフィールディングの間の会話は非常に楽しいでしょう。:)
Gert Grenander、2010

1
私たちを始めるためのいくつかのこと。まず、憎しみは強い言葉です。第二に、私たちの業界は物事を行うための複数の方法で満たされています。したがって、REST の存在についての哲学的論点については触れません。優れた開発者として、問題を最も解決するテクノロジーを自由に使用できるようにする必要があります。一部のWebサービスでは、RESTの場合があります。私はもっ​​と書いたが、これは閉じられた;)
Jason McCreary

1
@Joe:ポイントが取れました。しかし、RESTの皮肉の一部は、RESTが「新しい」テクノロジーではなく、90年代前半から機能している何かの新しい流行語にすぎないことです。そして、@ jsm11482:それがまさにこの質問が「主観的かつ議論的な」ものとして閉じられている理由です-それは議論を引き付けるので!
Daniel Pryden 2010

2
この質問への私の答えはここにありますbit.ly/cAdYAr
ダレルミラー

回答:


193

炭鉱のカナリア。

私はこのような質問を1年近く待っています。この日が来るのは必然であり、今後数か月以内にこのような質問がさらに増えると思います。

警告サイン

あなたは完全に正しいです。RESTfulクライアントの構築にはSOAPクライアントよりも時間がかかります。SOAPツールキットは、多くのボイラープレートコードを取り除き、ほとんど手間をかけずにクライアントプロキシオブジェクトを使用可能にします。Visual StudioのようなツールとサーバーのURLを使用すると、任意の複雑さのリモートオブジェクトにローカルで5分未満でアクセスできます。

application / xmlおよびapplication / jsonを返すサービスは、クライアント開発者にとって非常に煩わしいものです。そのデータの塊で何をすることになっているのでしょうか?

幸いなことに、RESTサービスを提供する多くのサイトは一連のクライアントライブラリも提供しているため、これらのライブラリを使用して、強く型付けされた一連のオブジェクトにアクセスできます。ちょっと馬鹿げているようです。彼らがSOAPを使用していた場合は、これらのプロキシクラスを自分でコード生成できます。

SOAPオーバーヘッド、ヘクタール。レイテンシーは殺します。人々がネットワークを行き来する余分なバイトの数を本当に心配しているなら、おそらくHTTPは正しい選択ではありません。ユーザーエージェントヘッダーで使用されるバイト数を確認しましたか?

ええ、HTMLとJavaScript以外のデバッグツールとしてWebブラウザを使用したことはありますか。信じられない。動詞は2つしか使用できません。キャッシングは常に邪魔になり、エラー処理は非常に多くの情報を飲み込んでしまいます。ちょうど私を撃ちます。

読み取り可能なURL。名詞のみ、動詞なし。ええ、CRUD操作のみを実行していて、オブジェクトの階層に1つの方法でアクセスするだけでよい限り、これは簡単です。残念ながら、ほとんどのアプリケーションにはそれよりも少し多くの機能が必要です。

差し迫った災害

RESTサービスと統合するアプリケーションを現在開発している開発者のメトリックボートロードは、あなたが持っているものと同じ一連の結論に至る過程にあります。それらは、シンプルさ、柔軟性、スケーラビリティ、進化性、そして偶発的な再利用の聖杯を約束されていました。ウェブ自体の特性、物事がうまくいかない場合があります。

ただし、バージョニングも同様に問題であることがわかっていますが、コンパイラは問題の検出に役立ちません。手書きのクライアントコードは、データ構造が進化し、URLがリファクタリングされるときに維持するのが面倒です。名詞と4つの動詞のみを中心としたAPIの設計は、特にクエリ文字列を使用できる場合と使用できない場合にRESTful Url zealotsが通知する場合は、非常に難しい場合があります。

開発者はなぜJson形式とXml形式の両方のサポートに私たちの努力を無駄にしているのか、なぜ私たちの努力を1つに集中してうまくやらないのかと尋ね始めます。

どうしてそんなにうまくいかなかったの

何が悪かったのかをお話しします。開発者としての私たちは、マーケティング部門に私たちの主な弱点を利用させました。銀の弾丸に対する私たちの永遠の探求は、RESTが何であるかの現実に私たちを盲目にしました。一見すると、RESTはとても簡単でシンプルに見えます。リソースにURLで名前を付け、GET、PUT、POST、DELETEを使用します。地獄、私たちの開発者はすでにその方法を知っています。私たちは何年もの間、テーブルと列、およびSELECT、INSERT、UPDATE、DELETEを持つSQLステートメントを持つデータベースを扱ってきました。それは簡単なはずだった。

RESTには、自己記述性やハイパーメディア制約など、RESTの他の部分について説明する部分もありますが、これらの制約は、リソースの識別や統一されたインターフェースほど単純ではありません。望ましい目標が単純さである場合は、複雑さが増すようです。

RESTのこの衰退したバージョンは、多くの方法で開発者の文化で検証されました。リソースの識別と統一されたインターフェースを奨励するサーバーフレームワークが作成されましたが、他の制約をサポートするものは何もありませんでした。用語は、アプローチの差別化に浮かび始めました(HI-REST対LO-REST、企業REST対学術REST、REST対RESTful)。

一部の人は、すべての制約を適用しないとRESTではないことを叫びます。メリットはありません。RESTの半分はありません。しかし、それらの声は彼らの貴重な言葉が不明瞭から盗まれて主流になったことに腹を立てた宗教的な狂信者として分類されました。RESTのサウンドを実際よりも難しくしようとする嫉妬深い人々。

RESTという用語は、間違いなく主流になりました。APIを持つほとんどすべての主要なWebプロパティが「REST」をサポートしています。TwitterとNetflixは2つの非常に注目度の高いものです。怖いのは、自己記述的なパブリックAPIは1つしか考えられず、ハイパーメディアの制約を実際に実装している少数のAPIがあるということです。StackOverflowやGowallaなどの一部のサイトは、応答でリンクをサポートしていますが、リンクには大きなギャップホールがあります。StackOverflow APIにはルートページがありません。Webサイトのホームページがない場合、Webサイトがどれほど成功したかを想像してみてください。

あなたは私が恐れている誤解を招きました

ここまで進んだ場合、質問に対する簡単な答えは、それらのAPI(NetflixおよびTwitter)がすべての制約に準拠していないため、REST APIがもたらすはずの利点を得られないということです。

RESTクライアントは、SOAPクライアントよりもビルドに時間がかかりますが、特定の1つのサービスに関連付けられていないため、サービス間で再利用できるはずです。Webブラウザーの古典的な例を見てみましょう。Webブラウザーはいくつのサービスにアクセスできますか?フィードリーダーについてはどうですか?平均的なTwitterクライアントがアクセスできるサービスはいくつありますか?はい、1つだけです。

RESTクライアントは、単一のサービスとインターフェースするように構築されているわけではなく、任意のサービスによって提供される特定のメディアタイプを処理するように構築されているはずです。それに対する明白な質問は、application / jsonまたはapplication / xmlを提供するサービス用のRESTクライアントをどのように構築できるかです。まあできません。これは、これらの形式がRESTクライアントにとって完全に役に立たないためです。自分で言った

実際のスキーマや参照ドキュメントがないため、パイプを介して何が返されるかについて「推測」する必要があります

あなたはTwitterのようなサービスに完全に正解です。ただし、RESTの自己記述的制約では、HTTPコンテンツタイプヘッダーは、ネットワーク経由で送信されるコンテンツを正確に記述する必要があると述べています。application / jsonおよびapplication / xmlを配信しても、コンテンツについては何もわかりません。

RESTベースのシステムのパフォーマンスを検討する場合は、全体像を確認する必要があります。エンベロープバイトについて話すことは、クイックソートとシェルソートを比較するときのループの巻き戻しについて話すようなものです。SOAPのパフォーマンスが向上するシナリオとRESTのパフォーマンスが向上するシナリオがあります。コンテキストがすべてです。

RESTは、サポートするメディアタイプについて非常に柔軟であり、キャッシングに対する高度なサポートを提供することで、パフォーマンス上の利点の多くを獲得します。キャッシングがうまく機能するためには、ほぼすべての制約に従う必要があります。

可読URLに関する最後のポイントは、最も皮肉なことです。ハイパーメディアの制約に真にコミットすると、すべてのURLがGUIDになる可能性があり、クライアント開発者は読みやすさを失うことはありません。

URIがクライアントに対して不透明でなければならないという事実は、RESTシステムを開発するときに最も重要なことの1つです。読み取り可能なURLはサーバー開発者にとって便利であり、適切に構造化されたURLはサーバーフレームワークがリクエストをディスパッチするのを容易にしますが、これらはAPIを使用する開発者に影響を与えない実装の詳細です。

Twitter APIはRESTfulであることすら近づいていないため、SOAPを介して使用することの利点を見ることができません。Netflix APIははるかに近いですが、一般的なメディアタイプを使用しているため、1つの制約さえ守らないと、サービスから得られるメリットに大きな影響を与える可能性があります。

彼らのせいではないかもしれません

私はサービスプロバイダーで大量のダンプを行いましたが、RESTfulに踊るには2つ必要です。サービスはすべての制約に忠実に従う可能性があり、クライアントは依然としてすべての利点を簡単に取り消すことができます。

クライアントが特定のタイプのリソースにアクセスするためにURLをハードコーディングすると、サーバーがそれらのURLを変更できなくなります。サービスがURLをどのように構造化するかについての暗黙の知識に基づくあらゆる種類のURL構築は違反です。

リンクから返される表現のタイプについて想定すると、問題が発生する可能性があります。HTTPヘッダーに明示的に記述されていない知識に基づいて表現の内容を想定すると、将来的に問題を引き起こすカップリングが確実に作成されます。

彼らはSOAPを使用するべきでしたか?

個人的にはそうは思いません。RESTが正しく行われることにより、分散システムを長期にわたって進化させることができます。さまざまな人が開発したコンポーネントがあり、何年も続く必要がある分散システムを構築している場合、RESTは非常に良いオプションです。


4
これはすべてが正しいとは限りません。Amazonは、WebサービスへのSOAPインターフェースとRESTインターフェースの両方を備えており、その使用の85%はRESTインターフェースによるものです。SOAPスタックに対する企業の誇大宣伝にもかかわらず、これは、開発者がより単純なRESTアプローチを好むというかなり説得力のある証拠です。出典:oreillynet.com/pub/wlg/3005
Suraj Chandran

3
いいえ、それは、Web開発者がより単純であると感じるものをWeb開発者が気に入っているという説得力のある証拠にすぎず、実際に長期的な方法やパフォーマンス指向の方法で優れているということではありません。実際には、特定のジョブに適したツールが必要なものであり、「このツールを知っているので、すべてのジョブがそれに準拠する必要があります」ではありません。
ケビンウィリアムズ

61

SOAPは、オブジェクト指向リモート・プロシージャ・コール・テクノロジー・スタック。既存のプロトコル(HTTP)の上に新しい抽象概念を構築することで機能します。

RESTはドキュメント指向のアプローチであり、既存のプロトコル(HTTP)の機能を使用するだけです。「REST」は単なる流行語です。コンセプトは次のとおりです。Webを設計どおりに使用するだけです。

質問に対する編集への応答:

  1. 「RESTサービスの実装は、SOAPサービスの実装よりも無限に時間がかかります。」

    ええと、いや、それは無限に長くすることはできません。また、取得しようとしているものがすでにドキュメントまたはファイルである場合、実際にははるかに高速です。たとえば、WMS(Webマッピングサービス)のOGC仕様では、プロトコルのSOAPバージョンとRESTバージョンの両方が定義されていますが、SOAPバージョンを実装する人がほとんどいないのには理由があります。マップを取得しようとすると、 SOAPメッセージにカプセル化するよりも、URLを作成してそのURLから画像バイトをフェッチする方がはるかに簡単です。しかし、そうです。Webサービスの目的がドメインオブジェクトモデルで強く型付けされたオブジェクトを転送することである場合、SOAPはその使用に適していることに同意します。

  2. 「とにかくXMLを返すRESTサービスを作成する理由」

    ええ、そうです、それはばかげたことかもしれません。しかし、それはXMLが何であるかに依存します。明確に定義されたスキーマがどこかにある場合、あいまいさはありません。たとえば、WSDL URLは、Webサービスに関する情報を取得するための一種のRESTful Webサービスであると考えることができます。この場合、別のSOAPリクエストのオーバーヘッドを追加しても意味がありません。

    一般的に、RESTは、転送されているコンテンツが単一のユニットとしてファイルと見なされる場合に優先されます。コンテンツがメンバーを持つオブジェクトとして扱われる必要がある場合、SOAPが優先されます

  3. 「SOAPを使用するとSOAPエンベロープの「オーバーヘッド」が発生するという不満を聞いたことがありますが、今日では、ほんの少しのバイトについて心配する必要がありますか?」

    はい。すべての状況ではありませんが、それが違いをもたらす大量のトラフィックを持つサイトがあります。RESTの代わりにSOAPを使用することの意味上の違いを上回るには、十分な違いがありますか?疑わしい。オブジェクトリモーティングプロトコルを使用していて、バイト数に違いがある場合、SOAPはおそらくとにかくツールではありません-代わりにCORBAまたはDCOMを使用する必要があります。

  4. 「RESTを使用すると、ブラウザーにURLをポップするだけでデータを表示できるという意見を聞いたことがあります。」

    はい。ブラウザでデータを表示することが理にかなっている場合、これは RESTを支持する大きな論拠です。たとえば、画像データの場合、サービスをデバッグする簡単な方法です。URLをブラウザーのアドレスバーに貼り付けて、画像がどのように表示されるかを確認してください。または、返されたデータがXMLであり、ブラウザーで読み取り可能なHTMLにレンダリングされる参照XMLスタイルシートがある場合は、セマンティックマークアップと簡単な視覚化のすべてを1つのパッケージで利用できます。しかし、あなたは正しいです。この利点は、より複雑な認証スキームを使用する場合、ほとんど失われます。すべての認証情報を各HTTPリクエストエンコードできない場合、RESTとしてはまったくカウントされないと私は主張します。

  5. 「各リソースに「読み取り可能な」URLが必要なのはなぜですか?サービスを実装するためにツールを使用している場合、実際のURLに本当に関心があるのですか?」

    まあ、それは異なります。Web上のリソースに読み取り可能なURLが必要なのはなぜですか?Tim Berners-Leeのエッセイ「Cool URIs Do n't Change for the Rationalale」を読むことができますが、基本的には、リソースが将来も役立つ可能性がある限り、そのリソースのURIは同じままにする必要があります。

    明らかに、一時的なリソース(エッセイの「今日のお金」リンクなど)の場合、対応するリソースがなくなるとリソースを参照する必要がなくなるため、その必要はありません。しかし、より永続的なリソース(たとえば、StackOverflowの質問、またはIMDBの映画など)の場合、永久に機能するURLが必要です。Webサービスを設計するときは、リソース自体がサービスよりも長く存続できるかどうかを判断する必要があります。そうである場合は、RESTがおそらく正しい方法です。

記録のために、はい、私はNetFlixやTwitterが存在するずっと前からWebページを開発してきました。いいえ、NetFlixやTwitterのサービスにクライアントを実装する必要や機会はまだありません。しかし、サービスがひどく扱いにくい場合でも、サービスを上に実装したテクノロジーが悪いという意味ではなく、2つの実装が悪いということだけです。

簡単に言えば、RESTとSOAPは単なるツールです。それぞれに長所と短所があります。あなたが持っている唯一の道具がハンマーであるならば、すべての問題は釘のように見えます。したがって、両方のツールを理解し、それらを正しく使用する方法を学習してから、各ジョブに適したツールを選択してください。


11
SOAPはHTTPに限定されないため、追加の抽象化であることを覚えておいてください。SOAPスタイルのメッセージングは​​、多数のプロトコルで使用できるため、RESTよりも広範囲に到達できます。これは、多くのハードコアRESTサポーターが認識できないことがあるという単純な事実だと思います。RESTはその代わりですが、SOAPもそうです。
jrista

4
@jrista:いいですね。問題が本当に釘である限り、ハンマーに問題がないように、SOAPにも問題があるわけではありません。対照的に、この質問は次のように言っています。-その文脈に置くと、それは不条理であることが明らかになります。
ダニエルプライデン

2
RESTはアーキテクチャスタイルです。本当に必要な場合は、SOAPを使用してRESTfulサービスを実行できます。RESTコミュニティがSOAP wrt HTTPに対して主に非難しているのは、SOAPはHTTPが転送プロトコルであるのに対し、転送プロトコルであると考えていることです。
Bruno、

@ダニエル:上記の質問については完全に同意します...ひどい質問、そして理想としては「主観的で議論の余地のある」ものの例についてですが、確かにこれ以上ばかげたことはありませんでした。:PIはSOAPを1つ区別しますが、「ハンマー」よりも「スイスアーミーナイフ」の方が適していると思います。; P
jrista '19 / 07/19

3
@ダニエルシーシュ!誰かを怒らせるつもりはなかった。RESTはこれらのサービスやそのようなサービスにとって適切なアプローチではないと私は思いますので、これは正直な調査です。一目で私の質問を控えめにしないでください。実は私が議論をしているので、それは「議論的」であっても大丈夫だと思います。私は反論を求めています。RESTが「機能するように設計されたとおりにWebを使用する」と言うと、「TwitterやFacebookの前に戻って...」のように聞こえますが、RESTがこれらのタイプに適している理由を説明する情報を提供していませんサービスの。詳しく説明しますか?
ジョシュM.

17

正直な質問は正直な回答に値します。しかし、最初に、それが本質的に修辞的であると思わなかったのに、なぜこの質問のテキストを別の質問へ回答として使用したのですか?

とにかく:

  1. すべての最新の言語/フレームワーク/プラットフォームがWSDLを読み取り、プロキシクラスとクライアントを出力するためのツールが存在します。RESTサービスの実装は、ドキュメントを読むことによって手動で行われます。

    ブラウザーベンダーが一貫したブラウジングエクスペリエンスの実装を試みるためにHTML 4.01仕様を上下に読み直したように。ブラウザーがインターネットバンキングとスタックオーバーフローのずっと前に発明されたという事実を振り返ってみましたか。それでも、ブラウザーを使用してそれらのことだけを行うことができます。これは、誰もがHTML(およびCSS、JS、JPEGなどの関連フォーマット)の使用に同意する唯一の理由により可能になりました。

    ブログは実際にはそれほど新しいものではなく、誰かがAtomPubを考案しました。これにより、あらゆるWebブラウザーがあらゆるWebページにアクセスできるように、あらゆるブログソフトウェアがブログの投稿にアクセスして更新できるようになります。それはかなりすっきりしていて、プロトコルによって課されたRESTful制約のために機能します。

    しかし、TwitterとNetflixの場合、主にマイクロブロギングが非常に新しいため、「既存のすべてのマイクロブログがメディアタイプapplication / tweetを使用する」という普遍的な合意はありません。おそらく数年後には、いくつかのマイクロブログサービスが同じAPIに落ち着くため、Twitter、Facebook、Identicaが相互運用できるようになります。彼らの既存のAPIはどれもRESTfulに近いわけではありませんが、どれほど主張しても、それがすぐに現実になるとは思いません。

    さらに、これらの2つのサービスを実装する際、実際のスキーマや参照ドキュメントがないため、パイプを介して何が返されるかについて「推測」する必要があります。

    あなたは頭に釘を打ちました。RESTはすべて分散メディアとハイパーメディアに関するものであり、それを要約するとほとんどです。ブラウザはリクエストから取得したものを見て、それをユーザーに表示します。HTMLページは通常、CSS、スクリプト、画像など、より多くのGETリクエストを生成します。画像は通常、画面にのみレンダリングされ、JavaScriptが実行されます。<img>または<style>タグでリンクが見つかり、応答メディアタイプがimage/jpegまたはだったため、ブラウザは毎回その動作を実行しtext/cssます。

    TwitterがハイパーメディアベースのAPIを作成する場合、おそらくapplication/tweetツイートへのリンクをたどるたびに常に返されますが、クライアントは決してそれを想定せず、それに基づいて行動する前に常に取得内容を確認する必要があります。

  2. とにかくXMLを返すRESTサービスを作成する理由は?

    これはすべて、メディアタイプに要約されます。HTMLと同様に、実際の意味がわからない要素を見つけた場合、HTML仕様はそれらを無視し、タグの「本体」がある場合はそれを処理するように指示します。同様に、アトム仕様は、未知の要素と(異なる名前空間からの)外部マークアップを無視し、本体(IIRC)を処理しないように指示します。

    一般的な問題ドメインのメディアタイプ(リッチテキスト問題ドメインのHTMLメディアタイプなど)を設計することは非常に困難です。非常に狭い問題ドメインのメディアタイプを作成することは、おそらく(ツイートのように)はるかに簡単です。ただし、拡張性を考慮して設計し、仕様に一致しない要素またはデータアイテムが表示されたときにクライアント(およびサーバー)がどのように反応するかを指定することは常に良い考えです。たとえば、JPEGには、アプリケーション固有のレコードタイプ(APP1など)があり、あらゆる種類のメタデータを含めるために使用されます。

  3. SOAPにはSOAPエンベロープの「オーバーヘッド」があるという不満を聞いたことがあります。今日では、ほんの数バイトを心配する必要がありますか?

    いいえ、ありません。。:RESTは、ワイヤ上で効率的であることについては絶対ではありません、それは実際にワイヤー効率を取引だRESTの効率性は、他のすべての制約によってキャッシュ機能の可能性からくる フィールディングの学位論文:ノート、その統一されたインタフェースが悪化ですが、トレードオフ情報は、アプリケーションのニーズに固有の形式ではなく、標準化された形式で転送されるためです。RESTインターフェースは、大規模なハイパーメディアデータ転送に効率的になるように設計されており、Webの一般的なケースに合わせて最適化されますが、その結果、他の形式のアーキテクチャーの相互作用には最適ではないインターフェースになります。 SOAPエンベロープのバイトカウントオーバーヘッドが有効な問題であるとは思いません。

  4. RESTを使用すると、ブラウザにURLをポップするだけでデータを表示できるという議論を聞きました。

    はい、それも無効な引数です。そのようには機能しません。それが機能したとしても、そこにあるほとんどの狭い REST APIは、ブラウザーが認識していないメディアタイプを使用し、それでも機能しません。

    ただし、コマンドラインユーティリティやブラウザの拡張機能など、HTTPベースのAPIをテストするブラウザよりもはるかに多くの可能性があります。これにより、HTTPリクエストのほぼすべての側面を制御し、応答ヘッダーを検査し、たどるリンクを見つけることができます。しかし、それでも、WSDLスタブを生成して3行のプログラムで関数を呼び出すのと同じくらい簡単なことではありません。

  5. なぜ各リソースに「読み取り可能な」URLが必要なのですか?サービスを実装するためにツールを使用している場合、実際のURLに本当に関心があるのですか?

    Webのしくみを見ると、WikipediaページのURIがのhttp://en.wikipedia.org/wiki/Stack_overflow代わりにこのようになっていることは、人間がおおむね喜んでいると思いますhttp://en.wikipedia.org/wiki/?oldid=376349090。しかし、実際にはRESTにとって重要ではありません。正しく取得するために重要なことは、変更される可能性が低い関連データをURIに配置することを選択することです。データベースIDは決して変わらないと思うかもしれませんが、2つのデータセットをマージする必要がある場合はどうなりますか?すべての主キーが変更されます。ページタイトル(Stack_overflow)は変更されません。

長い返答で申し訳ありませんが、私はこの質問が有効であり、SOの前にこれまで扱われていないと思います。ダレル・ミラーも戻ってきたら彼の答えを追加すると思います。

編集:フォーマット



3

WSDLおよびその他のドキュメントレベルのプロトコルは冗長です。HTTPプロトコルは、ドキュメントの提供とフォームの送信だけでなく、より豊富な操作セットをサポートします。

RESTのサポーターはその冗長性に不快です。


これらのタイプのサービスにRESTを使用する理由がわかりません。私には、それは単に「適合」していません。「HTTPプロトコルは、ドキュメントを提供してフォームを送信するだけでなく、はるかに豊富な操作セットをサポートする」と言っても、より適切なものが存在する場合にそれらを実際に使用する必要があるという意味ではありません。
Josh M.

私が言っていた暗黙のポイントは、RESTが無駄がないということです。プロトコル(HTTP)レベルで動作します。
BC。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.