0

我希望用户有机会选择从服务器接收响应的格式,无论是纯文本、json 还是 xml。看起来我必须通过调用 cowboy_req:meta/{2,3} 来检索 media_type,然后使用它来编码响应正文。但是该值在 content_types_provided 之前的回调中不可用(malformed_request、is_authorized、forbidden...)。

我应该复制牛仔逻辑并编写自己的代码来确定 media_type 吗?

或者忽略在确定 media_type 之前执行的所有回调。

或者也许我应该将我的响应消息放入请求元数据中并将其编码到 onresponse 钩子中,然后替换响应正文?

我该怎么做?

4

1 回答 1

2

我觉得你不太对。直接来自函数的init/3参数是“完整请求”,您可以在每个回调中读取任何标头或元数据。rest_init/3Request

我个人会选择 Header over Meta(因为已经Content-Type定义了 header,并且 Headers 应该在 Meta 上出现)。

一般来说,牛仔中的 REST 回调应该只为您提供易于理解的处理请求的工作流程,并带有额外的默认响应代码。您需要做的就是检查授权,只需返回 true 或 false(作为is_authorized/2元组的一部分),cowboy 将根据您的逻辑继续前进或返回401代码。检查是否允许发出请求不应该根据响应格式来确定,但是,如果您想这样做,只需从Req参数中读取此 Meta,并根据它返回 true/false。

唯一的区别content_types_provided/2是您返回Content-Types标头值和函数之间的某种绑定。我认为您所需要的都可以基于这个官方示例

于 2014-04-01T14:24:25.363 回答