cowboy 基础使用

Cowboy

Initialization

首先, init函数会被调用,所有的处理都会调用该函数。如果使用rest处理当前的请求,那么这个函数必须返回upgrade

[init({tcp, http}, Req, Opts)   ->
    {upgrade, protocol, cowboy_test}.

cowboy会转为REST协议来开始执行状态机,如果rest_init/2被定义,那么将从reset_init/2开始执行,
同理执行结束时会执行rest_terminate/2.

Methods

rest支持的http方法有Head, Get, Post, Patch, Put, Delete, Options 其他方法也会被接受,但是当前没还有特定的他们的回调函数。

Callbacks

所有的回调都是可选的,有些回调强制依赖于其他回调的返回值。

当request启动的时候,Cowboy调用reset_init/2函数如果她被定义了,req对象和处理选项opts作为参数。这个函数必须返回{ok,req,state},state是处理句柄的状态,所有的子请求的回调函数都会接受到。

  • 在所有请求的最后,rest_terminate/2如果被定义都会被执行,这个函数不能发送reply,且必须返回ok.

其他所有的回调都是资源的回调,都有两个参数,req和state,并且返回三元组{value, req, state}

下面是一张详细表,如果回调函数没有定义,那么他们的默认值将会被使用到。

  • 所有的回调都可以返回{halt, req,state} 来中断请求,然后rest_terminate/2会被调用。

cowboy会尽量按照上表的默认值来处理。 A Key is an Address

除此之外,用户可以在content_types_accpted/2 和 content_types_provided/2中嵌入用户自定的回调函数。这些函数的名字没有限制,但是在每个回调函数的名字中增加前缀,例如, from_html和to_html,这样来指明第一个函数接收到的请求被指定为HTML,第二个表示服务端应该返回一个HTML。

Meta data (response body)

Cowboy将会在每个执行点处收集meta值,用户可以通过 cowboy_req:meta/{2,3}来进行索引。这些值如下表所示:

Meta key | Details

media_type | The content-type negotiated for the response entity.

language | The language negotiated for the response entity.

charset | The charset negotiated for the response entity.

Response headers

cowboy 会自动设置应答头,这些头信息如下:

Header name         |   Details
content-language    |   Languange used in the respnse body 
content-type        |   Media type and charset of the response body 
etag                |   Etag of the resource
expires             |   Expiration  data of the resource
last-modified       |   Last    modification data for the resource
location            |   Relative or absolute URL to the requested resource
vary                |   List of headers that may change the representation of resource
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值