CRUD /クエリはHTTP動詞で最もよく表現されます。作成と更新は通常PUTまたはPOSTです。検索はGETになります。削除はDELETEになります。それは一般的なマッピングです要点は、GETは副作用を引き起こさないこと、そして動詞はあなたが期待することを実行することです。
URIにアクションを渡すことは、それを(例えば、httpクライアントライブラリではGET/POST以外のリクエストを送信することを許可しないなどの)単なる方法であればOKです。ほとんどの図書館はですが、ではなく、でURLを介して動詞を渡すことを強く推奨しています。
APIのバージョンを「最適」にする方法は、リクエストごとにHTTPヘッダーを使用することです。これにより、クライアントは個々の要求ではなく特定の要求をアップグレード/ダウングレードできます。もちろん、バージョニングの細かい部分を最初から焼く必要があり、サーバー側のコードがひどく複雑になる可能性があります。ほとんどの人は、サーバーにアクセスするために使用されたURLを使用します。詳細な説明はblog post by Peter Williams, "Versioning Rest Web Services"
ベストリターンデータ型はありません。それはあなたのアプリに依存します。 JSONはAjaxのWebサイトにとっては簡単かもしれませんが、Xpathで照会したい複雑な構造ではXMLがより簡単になるかもしれません。プロトコルバッファは3番目のオプションです。また、リターンプロトコルを置く方がURLやHTTPヘッダーに最適なものかどうかも議論されています。
ほとんどの場合、プロキシはユーザーエージェントと同様に、プロキシがメッセージを尊重していると思われるため、ヘッダーはキャッシュに最も大きな影響を与えます(ただしUAの動作は異なります)。 URLのみに基づくキャッシュは、レイヤーに非常に依存します。いくつかのユーザーエージェントはクエリ文字列(Safari、iirc)で何もキャッシュせず、プロキシは適切にキャッシュされるかキャッシュされません。