1

私はアプリ用の Web サービスを作成することになっていますが、優れた実践を実践することで素晴らしい仕事ができると思いました。私が見つけたように、RESTを使用しています。しかし、それにはほとんど意味がないことが 1 つあります。

URI を使用して変数を渡すのはなぜですか?

前回のプロジェクトで行ったことは、POST のみを使用し、生の POST データ (JSON) として何でも渡すことでした。それはあまりRESTfulではありません。しかし、それにはいくつかの利点があります。クライアント側では非常に単純でした.URIとデータを引数として取り、それをラップして送信する一般的な関数がありました。

ここで、適切な REST を使用した場合、URI の一部としていくつかのデータを渡す必要があります (たとえば、ユーザー ID)。他のすべてのデータ (ユーザー名、電子メールなど) は、私たちが行ったように、生データとして移動する必要があると思います。つまり、ある時点でユーザー ID とその他のデータを分離する必要があります。それはそれほど悪くはありませんが、それでも - なぜですか?

EDIT より詳細な例を次に示します。

ユーザーデータにアクセス (GET) して更新 (POST) したいとします。/userの下でサービスにアクセスできる場合がありますが、RESTful サービスが行うことは、ユーザーの ID を URI ( /user/1234 ) の一部として受け入れることです。他のすべてのデータ (名前、電子メールなど) は、要求コンテンツ (おそらく JSON) に送られます。

私が提起したのは、ユーザー ID を URI に入れるのは無意味に思えるということです。ユーザーデータを更新したい場合は、とにかく追加データをコンテンツとして送信します。アクセスしたい場合は、同じ一般的な方法を使用して Web サービスを要求できます。

GET がブラウザーによってキャッシュされることは知っていますが、AJAX (Web) または HTTP クライアント ライブラリ (他のプラットフォーム) を使用する場合は、とにかく手動でキャッシュする必要があると思います。

スケーラビリティの観点から、いつでもサービスを追加できます。

4

2 に答える 2

3

URI を使用して、操作するリソース (ユーザー/ドキュメント/Web ページ) を識別し、関連データを要求内に渡します。

これには、Web インフラストラクチャ コンポーネントが、コンテンツがどのように表現されているかを知らなくてリソースの場所を見つけられるという利点があります。たとえば、標準のキャッシュとロード バランサーを使用できます。それらが知る必要があるのは、URL とヘッダー (常に同じ方法で表されます) だけです。リソースと通信するために JSON、protobuf、または WAV オーディオを使用するかどうかは関係ありません。

これにより、たとえば、さまざまなリソースをまったく異なる場所に保持できます。すべてをコンテンツとして送信すると、リソースをまったく異なる場所に配置できるという利点はありません。たとえば、http://cloud.google .com/resource1およびhttp://cloud.amazon.com/resource2

これにより、すべてをhttp://my.url.com/restに置き、すべてのリソース情報をコンテンツとして渡すと、大規模なスケーリングが可能になります。

Re: あなたの編集

URL でユーザー IDを渡すことが、個々のリソース (ユーザー) を識別する唯一の方法です。「ユーザーストア」ではなく、リソースであるユーザーであることを忘れないでください。

たとえば、http://my.url/userをキャッシュするキャッシュは、すべてのユーザーに対して同じキャッシュ ページを返すため、あまり適切ではありません。キャッシュがhttp://my.url/user/4711で機能する場合、すべてのユーザーを個別にキャッシュできます。同様に、ロード バランサーは、ユーザー 1 ~ 5000 が 1 台のマシンで処理され、5001 ~ 10000 が別のマシンで処理されていることを認識し、URL のみに基づいてインテリジェントな決定を下すことができます。

于 2012-08-26T06:07:04.063 に答える
0

データベースとしての RESTful Web サービスを想像してみてください。特定のオブジェクトを取得または変更するには、主キーを指定してオブジェクトを識別する必要があります。名前+ニックネーム+電子メール+母親の旧姓ではなく、IDでユーザーを識別します。オブジェクトを識別したり、一連のオブジェクトを選択したりする情報は、URL に送られます。オブジェクトを変更する情報は、対応する URL に POST する必要があります。

于 2013-01-25T00:42:58.037 に答える