gpt4 book ai didi

ruby - 转406或不转406(http状态码)

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:48 25 4
gpt4 key购买 nike

我正在使用 Sinatra 使用 Ruby 开发一个 RESTful 网络应用程序。它应该支持 CRUD 操作,并响应读取请求我有以下功能,根据指定的请求格式化数据:

def handleResponse(data, haml_path, haml_locals)
case true
when request.accept.include?("application/json") #JSON requested
return data.to_json
when request.accept.include?("text/html") #HTML requested
return haml(haml_path.to_sym, :locals => haml_locals, :layout => !request.xhr?)
else # Unknown/unsupported type requested
return 406 # Not acceptable
end
end

只是我不知道在else 语句中最好做什么。主要问题是浏览器和 jQuery AJAX 将接受 */*,因此从技术上讲,406 错误并不是最好的主意。但是:我发送什么?我可以做 data.to_s 这毫无意义。我可以发送 HAML 返回的内容,但他们没有要求提供 text/html,我宁愿以某种方式通知他们。

其次,假设 406 代码是正确的方式,我如何根据 W3 spec 格式化响应以使其有效?

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.

最佳答案

看起来您正在尝试为您可以返回的所有数据类型执行一个交换所方法,但这可能会让 API 的用户感到困惑。相反,他们应该知道特定的 URL 将始终返回相同的数据类型。

对于我的内部 REST API,我创建了某些返回 HTML 文档的 URL,以及其他返回 JSON 数据的 URL。如果用户跨流,他们会在开发阶段进行跨流,他们会得到一些他们没有预料到的数据并修复它。

如果我不得不使用像你写的那样的东西,而他们不能处理 'application/json' 也不能处理 'text/html' ,我会返回 'text/plain' 并发送 data.to_s 并让他们整理困惑。 JSON 和 HTML 现在是非常成熟的标准。


这是 Setting Sinatra response headers 的文档.

关于ruby - 转406或不转406(http状态码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16149419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com