6

私はソフトウェアの機能を公開しようとしているプロジェクトに取り組んでいます。基本的に、私はバックエンドをセットアップしていて、JSONメッセージを使用してフロントエンドをバックエンドコードから分離することを考えていました。サービスとAPIの違いについて少し混乱しています。APIはサービスの上に構築できることを私は知っています。しかし、私はこれら2つのモデルを念頭に置いています-json-rpcを使用してプロファイルXにアクセスする

http://xyz.com/?request= {"jsonrpc": "2.0"、 "id":1、 "method": "getProfile"、 "params":{"id": "X"}}

または、RESTを使用してこのようにする必要があります-

http://api.xyz.com/X

ありがとうございました

4

2 に答える 2

22

「サービス」と「API」はかなりあいまいな質問です。多くの場合、2つの用語は同じ意味で使用されます。「REST」と「RPC」の説明は少し簡単です。

通常、RESTでは、URLは「ユーザー」、「アカウント」などの特定のリソースを表します。通常、HTTPメソッドPOST / GET / PUT / DELETEを使用して、これらのリソースを作成/取得/更新/削除できます。 。ユーザー1125のプロファイルを更新するには、以下を送信します。

POST /user/1125 HTTP/1.1
Host: wherever.com
Content-type: application/x-www-form-urlencoded

firstName=Davey&lastName=Jones&email=dj%40thebrineydeep.com

ユーザー1125でやりたいことは何でも、同じURLにリクエストを送信します。このアイデアには例外と変形がありますが、それがその核心です。

RPCサービスは、特定のURLにバインドされている関数ライブラリを使用するようなものです。たくさんの関連する関数がすべてURLにバインドされている場合があります/services/json。次に、古いDavey Jonesのプロファイルを変更する場合は、次のようにします。

POST /services/json HTTP/1.1
Host: wherever.com
Content-type: application/json

{ "jsonrpc": "2.0",
  "id": 1,
  "method": "setProfile",
  "params": [ 1125,
    { "firstName": "Davey",
      "lastName": "Jones",
      "email": "dj@thebrineydeep.com"
    }
  ]
}

私は個人的にJSON-RPCの方が好きです。理由は次のとおりです。

  • すべての関数呼び出しを、意味をなさない可能性のあるリソースからURLへのマッピングに適合させる必要はありません。
  • APIエラーを示すためにHTTP応答コードをオーバーロードしようとはしません。すべての要求は200応答を返し(サーバーエラーがない限り)、応答本文からエラーが発生したかどうかがわかります。JSON-RPCは、エラー状態を明示するのに特に優れています。

次の理由により、RESTの方が優れている場合があります。

  • リソースからURLへのマッピングが非常に適している場合があります
  • サードパーティが理解する方が直感的です
  • 簡単に識別できる情報を取得するためのよりシンプルなモデルを提供します

どちらもコーディングが簡単だとは思いません。

編集JSONの代わりに、より一般的なフォームエンコードデータを使用するようにRESTの例を変更しました。ただし、もちろん、RESTを使用して任意のデータ形式を指定できます。石に刻まれていません。

于 2012-10-31T22:29:31.240 に答える
0

RESTURLがJSON-RPCリクエストと等しくありません。

少なくともhttp://api.example.org/getProfile?id=Xである必要があります

両者の間に大きな違いはありません。また、XMLや(X)HTMLなどのさまざまなURLへのリンクを確実に表現できるデータ形式を返さない限り、「REST」は実際のRESTではありません。この要件が満たされるまでは、「RESTful」とだけ呼ぶ必要があります。これは、実際にはHTTPメソッドのみを使用してデータをトリガーし、データを前後に移動するためです。

どちらを使用するかは実際には重要ではありません。一方または他方のソリューションを他方よりも迅速に構築することをサポートするソフトウェアを知っているか、経験がない限りです。

于 2012-10-31T22:04:28.433 に答える