実用的に考える。 MIMEタイプは、「インターネットメディアタイプは、インターネットを介してファイルフォーマットを標準化するための2つの部分からなる識別子です」と定義されています。つまり、データの形式が変更されている場合(TXT-> HTML-> JSON-> XML-> YAML-> CSV-> ...)、MIMEタイプを変更する必要があります。
しかし、上記のJoshua Beldenによって特に言及された、他の完全に有効な用途があります。次に、APIのバージョンを確認するためのhow GitHub uses MIME typeの例を示します。
現在のバージョン
はデフォルトでは、すべてのリクエストは、APIのV3バージョンを受けます。このバージョンをAccept ヘッダーを通じて明示的にリクエストすることをお勧めします。
受け入れ:アプリケーション/ vnd.github.v3 + JSON
それはAPIのv3のバージョンに送信されたv2のリクエストのデータレイアウトは、彼らが同じに存在するにもかかわらず、互換性がないだろうという意味がありますURL(およびその逆)。 APIのあるバージョンから次のバージョンに移行するために必要な変更を減らすのにも役立ちます(たとえば、URLを更新する必要はありません)。
つまり、バージョン固有のAPIを「将来的に証明する」ために、アプリケーションでデフォルトでカスタムMIMEタイプを使用する必要はありません。アプリケーションに大量の外部消費者がいる大規模な外部APIがない場合は、カスタムバージョンのMIMEタイプは必要ありません。
また、REST APIエンドポイントは、MIMEタイプではなく、生成および消費されるデータの構造を決定する必要があります。たとえば、GET "/ customers/5"は、Customerエンティティからシリアライズされたデータのみを生成します。 POST/"reservations" は、予約エンティティに対して適切に非直列化されるデータのみを消費します。つまり、エンドポイントのシリアライゼーションが構文チェックを処理し、400レベルのコードを返し、提供されたデータが適切に構造化されていないことを説明する必要があります。
この動作を強調するGitHubのAPIの別の例です。
HTTP/1.1 422 Unprocessable Entity
Content-Length: 149
{
"message": "Validation Failed",
"errors": [
{
"resource": "Issue",
"field": "title",
"code": "missing_field"
}
]
}
それをすべてまとめると、ほとんどのシリアル化フレームワークは、「アプリケーション/ JSON」と「アプリケーション/ XML」を処理することを期待し、「箱から出して」きます。カスタムベンダ特有のMIMEタイプを確実に追加することはできますが、圧倒的な理由がなければどうしてですか?
このレスポンスでゾンビの質問を作成したばかりの場合は申し訳ありません。
私は最初にカスタムMIMEタイプのケースを聞きたいと思います。実際の問題を捜すための学問的アイデアのようだ。 – deceze
あなたのレストサービスをバージョン管理します。 http://barelyenough.org/blog/2008/05/versioning-rest-web-services/ –