如何处理Cowboy REST处理程序错误消息的媒体类型
我希望用户有机会选择从服务器接收响应的格式,无论是纯文本、json还是xml。看起来我必须通过调用cowboy_req:meta/{2,3}来检索媒体类型,然后使用它来编码响应体。但该值在提供内容类型之前的回调中不可用(格式错误的请求、已授权、禁止…) 我是否应该应用牛仔逻辑并编写自己的代码来确定媒体类型 或者忽略在确定媒体类型之前执行的所有回调 或者我应该将响应消息放入请求元数据并在onresponse钩子中编码,然后替换响应体吗如何处理Cowboy REST处理程序错误消息的媒体类型,rest,erlang,cowboy,media-type,Rest,Erlang,Cowboy,Media Type,我希望用户有机会选择从服务器接收响应的格式,无论是纯文本、json还是xml。看起来我必须通过调用cowboy_req:meta/{2,3}来检索媒体类型,然后使用它来编码响应体。但该值在提供内容类型之前的回调中不可用(格式错误的请求、已授权、禁止…) 我是否应该应用牛仔逻辑并编写自己的代码来确定媒体类型 或者忽略在确定媒体类型之前执行的所有回调 或者我应该将响应消息放入请求元数据并在onresponse钩子中编码,然后替换响应体吗 我该怎么做呢?我想你不太聪明。直接从init/3和rest\u
我该怎么做呢?我想你不太聪明。直接从
init/3
和rest\u init/3
函数开始,Request
参数为“full Request”,您可以读取每个回调中的任何头或元
就我个人而言,我会选择Header而不是Meta(因为已经定义了内容类型
Header,并且Header应该取代Meta)
一般来说,cowboy中的REST回调应该只为您提供易于理解的处理请求的工作流,以及附加的默认响应代码。在is_authorized/2
中,您只需检查授权,只需返回true或false(作为元组的一部分),cowboy就可以继续使用您的逻辑或返回401
代码。检查是否允许某人发出请求不应根据响应格式确定,但是,如果您想这样做,只需从Req
参数中读取此元,并根据它返回true/false
与
content\u types\u provided/2
的唯一区别在于,您返回content-types
头值和函数之间的绑定。我认为您所需要的一切都可以基于此我经常做出一个艰难的决定:“所有状态代码响应主体都将是文本/普通”(或应用程序/json)。这更容易管理。在我的例子中,我希望在每个请求上返回一个带有人类可读消息的响应主体。当然,我可以忽略请求的元,只处理头。在这种情况下,我需要读取Accept header的值,然后将其与content\u types\u提供的列表进行比较,最后我将知道响应主体的正确格式。所有这些逻辑都已经在牛仔代码中定义,因此我正在寻找一种不重新实现它的方法。