我正在开发一个 REST API,我真的很喜欢使用内容协商来确定要发送哪些表示的想法。我的应用程序基于 Flask 框架,因此我自然而然地使用 mimerender 包。我有适用于 HTML、JSON 和 XML 的资源变体选择。但后来我尝试了一个虚假的 mimetype,比如 application/foobar。我希望看到 406 错误代码,但我得到了 200 响应代码和 XML 表示。
查看源代码,似乎 mimerender 默认为其 mimetypes 列表中的第一个 mimetype,目前是 XML。
我的问题是两部分:
编写 mimerender 的人(我希望他能阅读这个问题)知道他在做什么,并且出于某种充分的理由,他一定是故意选择提供默认表示而不是 406 错误代码。发送一些(有点随机的)表示而不是告诉客户您只是没有他们要求的东西的原因是什么?
假设我固执地不想发送默认表示,而我更喜欢发送 406 错误,我该如何在 Flask 和 mimerender 的范围内做到这一点?我能想到的一种可能性是注册一个虚假的 mimetype,将其设置为默认值,然后在其处理程序中调用 abort(406)。但这似乎很老套。