-2

我正在开发一个 REST API,我真的很喜欢使用内容协商来确定要发送哪些表示的想法。我的应用程序基于 Flask 框架,因此我自然而然地使用 mimerender 包。我有适用于 HTML、JSON 和 XML 的资源变体选择。但后来我尝试了一个虚假的 mimetype,比如 application/foobar。我希望看到 406 错误代码,但我得到了 200 响应代码和 XML 表示。

查看源代码,似乎 mimerender 默认为其 mimetypes 列表中的第一个 mimetype,目前是 XML。

我的问题是两部分:

  1. 编写 mimerender 的人(我希望他能阅读这个问题)知道他在做什么,并且出于某种充分的理由,他一定是故意选择提供默认表示而不是 406 错误代码。发送一些(有点随机的)表示而不是告诉客户您只是没有他们要求的东西的原因是什么?

  2. 假设我固执地不想发送默认表示,而我更喜欢发送 406 错误,我该如何在 Flask 和 mimerender 的范围内做到这一点?我能想到的一种可能性是注册一个虚假的 mimetype,将其设置为默认值,然后在其处理程序中调用 abort(406)。但这似乎很老套。

4

1 回答 1

1

我想我没有对这个案子给予足够的思考。根据规范,返回不可接受的响应仍然可以:

HTTP/1.1 服务器允许根据请求中发送的接受头返回不可接受的响应。在某些情况下,这甚至可能比发送 406 响应更可取。鼓励用户代理检查传入响应的标头以确定它是否可以接受。

刚刚添加了一个可选的布尔标志,它使mimerender以 406 失败。希望这也能涵盖您的用例。

于 2012-06-27T16:29:45.297 回答