如何处理Cowboy REST处理程序的错误消息的媒体类型

时间:2014-04-01 04:39:43

标签: rest erlang cowboy media-type

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

我应该发布一个牛仔逻辑并编写我自己的代码来确定media_type吗?

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

或者我应该将响应消息放入请求元数据并在onresponse挂钩中对其进行编码,然后替换响应体?

我该怎么做?

1 个答案:

答案 0 :(得分:2)

我认为你不是很紧张。直接从init/3rest_init/3函数Request参数是“完整请求”,您可以在每个回调中读取任何标题或元数据。

并且我个人会使用Header over Meta(因为已经定义了Content-Type标题,并且标题应该存在于Meta上。

通常,牛仔中的REST回调应该只为您提供易于理解的处理请求的工作流程,以及其他默认响应代码。在is_authorized/2中,您需要做的就是检查授权,只返回true或false(作为元组的一部分),牛仔将继续使用逻辑或返回401代码。检查是允许提出请求的人不应该在响应格式上确定,但是,如果你想这样做,只需从Req参数中读取此Meta,并根据它返回true / false。

content_types_provided/2的唯一区别在于,您返回Content-Types标头值与函数之间的绑定类型。我认为你所需要的只是基于official example