有些吊毛学restful,就学了个名词吧。有些开放api宣称restful风格的,实际上是个卵蛋,四不像。
了解了restful,可能还了解了幂等。以为get put delete 这几个action按照其自然语言的语义实现操作就幂等了吧!post的自然语义是“发出、推出、展示出来”,没有具体对资源进行操作的语义,所以就不幂等。
幂等不幂等跟post有啥关系,就是个约定。中间只要没夹杂其他修改资源的操作,幂等的请求第一次完成后的资源状态跟第n次完成后的资源状态一样。restful规定get put delete需要实现为幂定的,要想实现这几个action按照其自然语言的语义幂等,必须要求资源由url唯一确定。也就资源id在url中,不能在querystring里,querystring中只能有sessionid userid token timestep device等环境参数。环境参数一般用来处理权限,环境参数变了要处理的业务数据必须还是原来的。
url表示资源,只要没有其他操作修改资源,第一次get返回的跟第n次返回一样;第n次put一份相同的资源之后跟第一次一样,这个url下只有一份相同资源;delete个n次跟第一次以后一样,这个url下的资源没了。
如果要严格按照restful来,数据表里一行一个url,大家对照看看有多少正经restful风格。get put delete幂等了,post咋搞?还用url表示资源,在post参数中用不同字段表示不同业务操作吗?这样一来一个url不跟api网关差不多了吗?成了个dispcher。
软件工程领域没太多高深研究课题,整出一个范式,不得大肆宣传一下!restful的意思是Representational State Transfer,啥意思呢?就是表示层或者表现层状态转换。
啥是表示层呢?就是到了用户界面那一层了啊!到了http那一层了,就到了给用户呈现结果的阶段了,可不就是表示层嘛!
状态转换是啥?业务数据(资源)的状态转换。
综合起来意思就是,就是要把业务处理中状态转换的信息给界面层透明一下。我尼妈!这不是破坏分层架构吗?!此时言比曰MVC的架构师们,还能蛋定么?
正常的高效率得搞法是,url能够表示一类资源及这一类资源的业务操作,action有闲心区分就区分,没闲心统一post。这样一来从自动生成的文档中看url就明白个七七八八了,其他狗屁不通的解释都不用看。也就是url就是个方法名。