cowboy rest
REST Flowcharts
这章节将通过一些列不同的流程图来介绍REST处理状态机。
一个请求主要有四条路线,一个是方法OPTIONS。 一个是方法GET和HEAD。一个是PUT。POST和PATCH,最后一个是DELETE。
所有的路径都是从“Start”開始。假设资源存在,除了OPTIONS路径,其它所有路径都经过“Content negotiation”而且可选“Conditional requests” 图。
红色代表引用另外的图。淡绿色表明是一个response,其它的图可能是一个回调或者是一个请求应答。这些都是Cowboy自己处。假设回调未定义,那么绿色箭头表明默认的行为。
Start
全部的请求都是从这里開始
全部的回调被连续运行来进行server。请求行。请求头的一般性进行检查。
假设有可能,那么请求的实体不会在不论什么步骤里被接收(要开发人员手动接收),当全部条件都满足时,Cowboy也仅仅是运行到PUT,POST和PATCH方法的尾部。
The known_method和allowed_methods回调返回值是一些列的方法,然后Cowboy检查请求方法是否在这些列表里面,否则终止运行。
is_authorized回调能够用来检查资源的訪问是否授权,授权也可一依据须要来决定是否被运行。假设授权失败,那么回调函数的返回值必须包括 可訪问的资源列表, 这些列表将被以 www-authenticate header 的形式发送给client。
当运行完上面的流程后。假设请求的方法是OPTIONS,那么立即会运行“OPTIONS method”图,否则将运行“Content negotiation” 图。
OPTIONS
method
这个流程图仅仅适用于OPTIONS 请求。
OPTIONS 回调能够用于加入一些关于资源的信息,如媒体类型。服务可接受的语言。可接受的方法;或者其它一些额外的信息。 虽然client不应该读取他,可是一个应答实体也能够被设置。
假设 options 回调未定义。Cowboy默认会发送一个包括可接收的方法的列表 的应答。
Content
negotiation
这个流程适用于全部的请求方法,除了OPTIONS外,在“start”后,它会紧跟着被运行。
这些步骤的目的是确定一个适当的结果发送给回client。
该请求能够包括随意的可接受的请求头;可接受的语言头。可接受的字符集头。假设存在这些头。cowboy将会解析这些头然后调用对应的回调来获得提供的内容类型,此资源语言或字符集的列表,然后。它会自己主动选择基于请求的最佳匹配。
假设回调没有被定义,那么cowboy将会选择client喜欢的content-type, language 和charset.
content_types_provied也能够返回每一种它能够接收的content-type的回调的名字。当全部的条件都满足,那么该回调仅仅会在"GET和HEAD方法"结束时被回调。
可选择的content-type,language和charset会被保存在请求对象的meta处,假设手动发送应答体。那么应该选择适当的具有代表性的这些类型。
这个流程结束后,立即接下来的是“GET和HEAD方法”的流程图或者是“PUT,POST和PATCH方法”的流程图,再或者是“DELETE方法“的流程图。主要依赖于请求方法的类型。
GET和HEAD
方法
这个流程图仅仅适用于GET和HEAD请求.
请到"Conditional request"处查看 cond step 的具体描写叙述。
当资源存在时。conditional step也是成功的。资源也可被检索到。
When the resource exists, and the conditional steps succeed, the resource can be retrieved.
Cowboy prepares the response by first retrieving metadata about the
representation, then by calling the ProvideResource callback. This is the callback
you defined for each content-types you returned from content_types_provided.
This callback returns the body that will be sent back to the client, or a fun if the body must be streamed.
When the resource does not exist, Cowboy will figure out whether the resource existed previously,
and if so whether it was moved elsewhere in order to redirect the client to the new URI.
The moved_permanently and moved_temporarily callbacks must return the new location of the resource if it was in fact moved.
PUT,
POST, and PATCH methods
当资源存在时。第一个运行的步骤是conditional steps。假设成功而且方法是PUT,cowboy会调用 is_conflict . 这个函数函数用来解决竞争条件。如资源锁。
全部的方法都会被运行到 content_types_accepted这个步骤。
当资源不存在而且方法是PUT,那么Cowboy 将会检測冲突,然后转到 content_types_accepted步骤。假设是其它方法。Cowboy会检測资源是否已经存在,假设是这样子的话,会被定向到其它地方去。
资源真的不存在,而且方法是POST。accepted_missing_post的返回值是true,那么Cowboy会移到content_types_accepted 处。
否则,请求会在这里被终止。
假设他们都要移动,那么moved_permanently和moved_temporaily必须返回资源所在路径。
cowboy rest的更多相关文章
- Cowboy 开源 WebSocket 网络库
Cowboy.WebSockets 是一个托管在 GitHub 上的基于 .NET/C# 实现的开源 WebSocket 网络库,其完整的实现了 RFC 6455 (The WebSocket Pro ...
- [翻译][erlang]cowboy handler模块的使用
关于Cowboy Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. Handlers,用于处理HTTP请求的程序处理模块. Plain HTTP Handlers ...
- [翻译][erlang]cowboy路由模块使用
Cowboy是基于Erlang实现的一个轻量级.快速.模块化的http web服务器. 本文官方原文:http://ninenines.eu/docs/en/cowboy/1.0/guide/rout ...
- cowboy学习笔记(安装与部署)
安装cowboy,参照官方文档:http://ninenines.eu/docs/en/cowboy/1.0/guide/getting_started/ 添加依赖库:在makefile中添加,会自动 ...
- leptus和cowboy之间某些库的转换
在github上问作者,如何使用cookie,作者回复是,leptus是基于restful的框架,对于cookie和session的支持,建议转换为cowboy用,以下是转换方式 leptus_req ...
- cowboy使用restful的例子
直接贴代码,一切尽在不言中 %% cowboy的restful的文档,一定要好好阅读http://ninenines.eu/docs/en/cowboy/HEAD/manual/cowboy_rest ...
- Erlang cowboy 处理不规范的client
Erlang cowboy 处理不规范的client Cowboy 1.0 參考 本章: Dealing with broken clients 存在很多HTTP协议的实现版本号. 很多广泛使用的cl ...
- Erlang cowboy 处理不规范的客户端
Erlang cowboy 处理不规范的客户端 Cowboy 1.0 参考 本章: Dealing with broken clients 存在许多HTTP协议的实现版本.许多广泛使用的客户端,如浏览 ...
- Erlang cowboy 架构
Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...
随机推荐
- [置顶] gis海量资源网盘提供VIP账号无广告高速下载 (更新更多资源)
资源网盘下载地址:http://laoheitan.bego.cc/ 城通网盘 vip帐号共享 省去 烦人的 广告 多任务同时下载 独乐乐 不如众乐乐 好人 勿改密码. 获取到 vip下载连接后 请 ...
- MySQL数据库触发器(trigger)
MySQL触发器(trigger):监视某种情况并触发某种操作 一:四要素 触发时间:before/after 地点:table 监视操作:insert/update/delete 触发操作:inse ...
- pygame编写贪吃蛇
一直想用pygame做一个小游戏的,可是因为拖延症的缘故一直没有动,结果那天看到了一个12岁的国际友人小盆友用pygame做的一款塔防游戏,突然感觉已经落后超级远了,所以心血来潮做小游戏了.高中陪伴我 ...
- 操作系统概念学习笔记 10 CPU调度
操作系统概念学习笔记 10 CPU调度 多道程序操作系统的基础.通过在进程之间切换CPU.操作系统能够提高计算机的吞吐率. 对于单处理器系统.每次仅仅同意一个进程执行:不论什么其它进程必须等待,直到C ...
- Cocos2d-x 学习(1)—— 通过Cocos Studio创建第一个Demo
近期在工作上有了比較大的转变,自学情绪也慢慢高涨,本来一直在研究unity的技术.由于换了工作会開始接触cocos2d-x.但并不意味着停止研究unity,以后有时间还是会继续的. 公司的cocos2 ...
- webdynpro MESSGAE
1. 添加辅助类CL_WDR_DEMO_MESSAGES 环境,设计的控件有:输入控件,按钮,每个按钮对应一个事件.分别是下面,然后报消息 TEXT: SUCCESS: method ONACTIO ...
- HEVC码率控制浅析——HM代码阅读之四
继续分析第一篇提到的compressSlice中对LCU的RC参数初始化: #if RATE_CONTROL_LAMBDA_DOMAIN Double oldLambda = m_pcRdCost-& ...
- python与其它语言进行比較
近期python语言貌似比較火, 今天闲来无事,简单的看了下,算是个入门吧.一门语言之所以值得这么多人去学,必然有它的独到之处,以下我们就用python和其它语言做个比較. Pythond VS C# ...
- Ajax - 登录
Login.html <head> <title>登录</title> <mce:script src="js/jquery-1.5.2.js&qu ...
- CodeForces 371C Hamburgers
B题又耽误时间了...人太挫了.... C. Hamburgers time limit per test 1 second memory limit per test 256 megabytes i ...