-2

私は REST API に取り組んでおり、コンテンツ ネゴシエーションを使用して送信する表現を決定するというアイデアが本当に気に入っています。私のアプリケーションは Flask フレームワークに基づいているため、当然 mimerender パッケージを使用しています。HTML、JSON、および XML で機能するリソース バリアントの選択があります。しかし、その後、application/foobar のような偽の MIME タイプで試してみました。406 エラー コードが表示されることを期待していましたが、代わりに 200 応答コードと XML 表現が表示されました。

ソース コードを見ると、mimerender のデフォルトは、mimetype のリストの最初にある mimetype (現時点では XML) に設定されているようです。

私の質問は2つの部分です:

  1. mimerender を書いた人 (彼がこの質問を読んでくれることを願っています) は、自分が何をしているのかを知っており、正当な理由で 406 エラー コードではなく、デフォルトの表現を意図的に提供することを選択したに違いありません。クライアントが求めているものを持っていないことをクライアントに伝えるのではなく、何らかの (ランダムな) 表現を送信する理由は何ですか?

  2. 頑固にデフォルト表現を送信したくなく、代わりに 406 エラーを送信することを好むと仮定すると、Flask と mimerender の範囲内でこれを行うにはどうすればよいでしょうか? 考えられる 1 つの可能性は、偽の MIME タイプを登録し、それをデフォルトとして設定し、そのハンドラーで abort(406) を呼び出すことです。しかし、それはハッキーに思えます。

4

1 に答える 1

1

私は、この事件について十分に考えていなかったと思います。仕様によると、受け入れられない応答を返すことはまだ問題ありません。

HTTP/1.1 サーバーは、リクエストで送信された Accept ヘッダーに従って受け入れられないレスポンスを返すことができます。場合によっては、これは 406 応答を送信するよりも望ましい場合もあります。ユーザー エージェントは、着信応答のヘッダーを調べて、それが受け入れられるかどうかを判断することをお勧めします。

代わりにmimerenderを 406 で失敗させるオプションのブール値フラグを追加しました。うまくいけば、それはあなたのユースケースもカバーします。

于 2012-06-27T16:29:45.297 に答える