「サービス」と「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を使用して任意のデータ形式を指定できます。石に刻まれていません。