2017-09-10 30 views
0

RESTがすでに普及していたときに私はWebアプリケーションと分散アプリケーションを作成し始めました。REST vs RPC - *実際の目的*違い

私はそれらの違いの簡単な説明を検索するとき、私は理解し始めましたが、いくつかの例が混乱しました。
私はこのようなものを見た:RESTはリソースのためのものであり、RPCは、手続きのために意味されている場合は、それが何かのためにRPCを使用して悪い習慣ではありません

POST /changeUserName 

GET /getLastUser 

またはこれをこのような?

私が間違っている場合は私を訂正しますが、私はそれを見る方法はRPCはもっと純粋に機能するはずです。
プロシージャを呼び出すと、常に必要があることを意味:

  • リターン同じ引数
  • だから状態

に影響を与えないため、同じ結果を、RPCは次のように呼び出します。

GET /addTwo?num=5 

は次のような結果を返します。

{ 
    "result": 7 
} 

私はもっと論理的です(これは非常に単純な例ですが)。

この質問はあまりにも「意見・ベース」であることのために閉じてしまった場合は、私はちょうど

+0

これはこれをかなりうまく説明しています。https://stackoverflow.com/questions/26830431/web-service-differences-between-rest-and-rpc – twoleggedhorse

+0

このように、https://sites.google.com/site/wagingguerillasoftware/rest-series/what-is-restful-rest-vs-rpc – twoleggedhorse

答えて

3

RPCが機能することを意図されていない...私は好き一体私がやるべきことを知っていますよ。同じ手順を2回呼び出すと結果が保証されません。

この質問は、いくつかの異なる方法で答えることができ、かなり深いです。私はこれが公正な要約かもしれないと思う。

  • RPCでは、プリミティブは通常、関数名、引数および結果です。
  • RESTでは、プリミティブは「リソース表現」です。

RPCを使用してRPCを使用する場合、RPCでは実際にはプロトコルに関係なくリソースの状態を送信および取得しています。

これは、通常、サーバーに「このリソースの状態を教えてもらえますか」と尋ねるか、サーバーにここに新しいリソース状態を伝えて、この場所に保存してください。 RESTが返す唯一の成功した回答は「現在の状態」または「この操作が成功しました」ですが、RPCでは質問(関数+引数)と回答(結果)は何でもかまいません。

このように記述すると、RPCの方がずっと柔軟性があると主張できます。これはおそらくそうですが、RESTは送信状態に限定されているため、単純なRPCベースのプロトコルでは保証されません。

RESTは状態を転送するだけではありません。使用ハイパーリンクは、サービスがRESTと呼ばれるもう1つの重要な要件です。これは、RPCを使用してすぐに使用できないものでもあります。

最後に、HTTP自体がRPCのようなプロトコルであると主張できます。 RPCサービスの上にRESTfulなサービスを構築することは可能だと思います。

+1

したがって、RESTはRPCに必ずしも矛盾しませんか? – user3134477

+0

@ user3134477、必ずしもそうではありませんが、これは非常に特殊な条件の下で当てはまります。ほとんどの場合、RESTを読み込むと、HTTP上のRESTの典型的な実装が考えられます。ほとんどの実用的な目的のためには、2つの全く異なるものですが、RESTはRPCプロトコルの上で行うことができます。 – Evert

関連する問題