我正在开发REST API,我非常喜欢使用内容协商来确定要发送的表示形式。我的应用程序基于Flask框架,因此我自然而然地使用mimerender包。我有资源变体选择适用于HTML,JSON和XML。但后来我用伪造的mimetype尝试了它,比如application / foobar。我希望看到406错误代码,但我得到了200响应代码和XML表示。
查看源代码,似乎mimerender默认为mimetype在mimetypes列表中的第一个,这是目前的XML。
我的问题是两部分:
写mimerender的人(我希望他读这个问题)知道他在做什么,并且他必须故意选择提供默认表示而不是406错误代码,原因有些充分。发送一些(有点随机)表示而不是告诉客户你没有他们要求的东西的原因是什么?
假设我顽固地不想发送默认表示并且我更愿意发送406错误,我怎么能在Flask和mimerender的范围内做到这一点?我能想到的一种可能性是注册一个假的mimetype,将其设置为默认值,并在其处理程序中调用abort(406)。但这看起来很糟糕。
答案 0 :(得分:1)
我想我没有充分考虑过这个案例。根据{{3}},仍然可以回复不可接受的回复:
允许HTTP / 1.1服务器返回响应 根据发送的接受标头不可接受 请求。在某些情况下,这甚至可能比发送一个更好 406回应。鼓励用户代理检查标题 传入的响应,以确定它是否可以接受。
我有the spec一个可选的布尔标志,这使得just added失败而不是406。希望这也将涵盖您的用例。