18

REST は Web の現在の機能を使用し、いくつかの原則を適用してより効率的にしています。通信には標準の HTTP 動詞を使用し、ステートレスな性質を利用します。

しかし、REST サービスが通信に TCP プロトコルを使用することは可能でしょうか? はいの場合、それはその原則に違反しますか?

4

6 に答える 6

27

HTTP は TCP/IP ベースのプロトコルです。したがって、REST を使用するときは、すでに通信に TCP を使用しています。しかし、HTTP を使用せずに純粋な TCP ソケットを介して REST を使用する場合は、いいえ、REST は HTTP 動詞とヘッダーに基づいているため、これは意味がありません。これらの概念は、HTTP プロトコルにのみ存在します。

于 2012-12-26T09:13:44.040 に答える
1

わずかに異なる角度:

1. WCF を使用して REST ベースのサービスを作成しないでください。Asp.Net WebAPI を使用します。

2. 楽しみのために: 「REST」の原則を念頭に置いて WCF TCP バインディングを使用する場合は、典型的な RPC のようなものではなく、「リソース」に基づいてステートレス API を作成できます。

[ServiceContract]
interface RestApi
{
    Result Get(string id);
    Result Post(string id, Resource resource);
    Result Put(string id, Resource resource);
    void Delete(string id);
}

そうすれば、サービスごとに異なるコントラクトを定義する必要がなくなり、さまざまなやり取りに合わせてリソースを調整するだけで済みます。

注: 私は誰にもこれを行うように勧めているわけではありません: それは車輪の再発明です. REST が必要な場合は WebAPI を使用します。

于 2015-09-05T23:18:48.457 に答える
1

Darin が既に回答したように、HTTP は、RESTful 定義で使用されているものとまったく同じオーバーヘッドを持つ TCP プロトコルです。いいえ、HTTP オーバーヘッドを取り除くことはできません。

あなたの質問「高速な RESTful アプリに TCP を使用できますか? 」という質問は、「 HTTP が純粋な TCP より遅いのに、なぜ多くの Web サイトが REST を使用しているのですか? 」という質問に関連していると思います。

実のところ、HTTP は確かに純粋なバイナリ TCP 形式よりも遅いですが、ほとんどのアプリケーションでは、オーバーヘッドが非常に小さく、通常、クライアントは 1 分間に数回のリクエストしか行わないため、ユーザーは違いに気づきません。

例えば:GET /posts?userId=5

このリクエストが完了するまでに数ミリ秒以上かかる場合、HTTP プロトコルに問題はありません。パフォーマンスの問題は、ネットワークの待ち時間、サーバー側のコード、またはデータベースからデータを取得する方法に関連しています。

于 2015-09-05T21:57:55.313 に答える
0

REST ベースのサービスには、Http 以外のバインディングを使用できません。それは休息が、ある原則に基づいた建築様式だからです。この原則の 1 つは、Web のステートレス プロトコルである http を利用することです。また、TCP プロトコルでは使用できない Get、Port、Put、Delete などの HTTP ワードも使用する必要があります。

于 2012-12-26T13:38:03.273 に答える