我正在使用Sinatra开发一个基于Ruby的RESTful Web应用程序。它应该支持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规范?
除非它是一个HEAD请求,否则响应应包括一个实体,其中包含用户或用户代理可选择最适合的可用实体特征和位置列表。实体格式由Content-Type头字段中给出的媒体类型指定。根据用户代理的格式和能力,最适合的选择可能会自动执行。然而,本规范没有为这样的自动选择定义任何标准。
text/plain
格式的错误消息,而不是数据。这可能是最好的解决方案。您能告诉我如何构建响应以包括可接受类型的列表吗? - MarioDS406
是错误的,那么405
就更糟糕了,因为它涉及HTTP方法,例如GET
,POST
等... - MarioDStext/plain
完成了这个操作,就这样吧。感谢您的努力。 - MarioDS