我希望用户有机会选择从服务器接收响应的格式,无论是纯文本,json还是xml。看起来我必须通过调用cowboy_req:meta / {2,3}来检索media_type,然后使用它来编码响应主体。但是在content_types_provided(malformed_request,is_authorized,forbidden ......)之前,该值在回调中不可用。
我应该发布一个牛仔逻辑并编写我自己的代码来确定media_type吗?
或者忽略在确定media_type之前执行的所有回调。
或者我应该将响应消息放入请求元数据并在onresponse挂钩中对其进行编码,然后替换响应体?
我该怎么做?
答案 0 :(得分:2)
我认为你不是很紧张。直接从init/3
和rest_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