2009-03-30 17 views
2

私はRESTサービスを設計しており、http動詞とコンテンツネゴシエーションvs GET文字列変数の完全な配列を使用することの長所と短所に重点を置いています。私の選択はキャッシュ可能性に影響しますか?いずれの解決策もすべての分野で正しいとは限りません。RESTサービスのHTTP動詞とコンテンツネゴシエーションまたはGET文字列?

crudとクエリ(たとえば?action = PUT)に最適なのはどちらですか?

apiバージョンのピッキングに最適なのはどれですか(たとえば、バージョン= 1.0など)?

戻り値のデータ型にはどのタイプが最適ですか(たとえば、type = json)?

答えて

5

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)で何もキャッシュせず、プロキシは適切にキャッシュされるかキャッシュされません。

関連する問題