Sun Cloud API(http://kenai.com/projects/suncloudapis/pages/Home)は、RESTfulなAPIのための良い例です。 RESTfulな原則に従えば、リソースを取得したときに、そのリソースの表現をもはや少なくすることはありません。RESTful APIのためのメイメット
レスポンスのContent-Typeヘッダーは、そのリソースの種類を正確に示します。たとえばapplication/vnd.com.sun.cloud.Snapshot + jsonです。 SunはこれらのMIMEタイプをIANAに登録しています。
これは現在一般的にどの程度実用的ですか?私が見たほとんどのAPIは、 "application/json"のContent-Typeを使用しています。これは、レスポンスがJSONであることを示していますが、それ以上は何もありません。 JSONオブジェクトには、それが何であるかを知るために、「型」プロパティのようなものが必要です。
私はRESTful APIを設計しています(これは公開されないため、mimetypesを登録しません)。私はRESTEasyを使用しており、完全なMIMEタイプを指定しても、応答ヘッダーのContent-Typeは、Accept要求ヘッダーが指定したものとまったく同じであることがわかります。リクエストが "application/* + json"を要求する場合、レスポンスヘッダは "application/* + json"になります。私はおそらく応答が出る前にヘッダーを変更することでこれを修正することができますが、私はそれをやろうとするべきですか?または、リクエストに同じようにワイルドカードが返されるべきですか?
また、ほとんどのAPIのように、「application/json」を提供するだけでいいですか?後で追加
追加思考:私は、プロトコルとしてHTTPを使用すべきか、私は自分のプロトコルをラップするだけで転送メカニズムとしてHTTPを使用する必要があります。
質問を述べる別の方法はありますか?
HTTPをプロトコルとして使用するには、応答のエンティティ本体に要求されたオブジェクトの表現(またはエラーメッセージオブジェクトの表現)が含まれ、「Content-Type」ヘッダーにはオブジェクトの正確なタイプが含まれ、 "Status"ヘッダーには成功またはエラーコードが含まれています。
HTTPを単なるトランスポートメカニズムとして使用するには、 "Status"ヘッダーが常に200 OKに設定されます。 "Content-Type"は "application/json"のような一般的なもので、エンティティ本体にはオブジェクト、オブジェクトの種類、エラーコード、その他の必要なものが含まれます。独自のプロトコルがRESTfulである場合、全体のスキームはRESTfulです。 (HTTPはRESTfulなプロトコルですが、唯一のプロトコルではありません)
独自のプロトコルはすべてのトランスポートレイヤーに対して不透明です。プロトコルとしてHTTPを使用する場合、すべてのトランスポートレイヤーはそれを理解して、望ましくないことを行う可能性があります。たとえば、ブラウザで「401 Unauthorized」のレスポンスを傍受し、自分で処理したい場合でもログインダイアログを表示します。
私がWebクライアントで持っている1つの問題は、HTTPステータスコードとヘッダーのブラウザ傍受です。たとえば、401 Unauthorizedを返すと、JavaScriptクライアントはブラウザーがそれを取得して独自のログインダイアログを表示する前にそれを表示しません。それ以降、ブラウザはすべての要求に独自のAuthorizationヘッダーを置きます。 MimetypesはOKを通過しますが、少なくとも1つのステータスコード(401)が問題です。 –