Restful在jfinal中是如何体现的

波总,最近看了一些关于restful的讲解,感觉还是没看懂。我现在理解是restful是一种架构风格,目前主要是通过http来实现的。我想了解一下jfinal框架中是怎么使用restful的,哪些代码或结构与restful相关。

评论区

Romeo

2016-10-18 17:17

@JFinal 波总 求讲解一下

JFinal

2016-10-18 17:25

这个问题比较大,我只能说核心的:
1:restful 的核心是资源的抽象,首先将各种概念抽象成资源
2:在抽象资源的基础之上,一切事务都看成是对资源的操作,例如,你有一个 account 账号资源,注册操作就是添加一条 account 数据,激活就是将 accout.isReged字段从 0 变成 1等等
3:有很多文章误导,以为 url 的风格是 restful 论文推荐的风格,项目就是 restful 的了,这是错误理解了 restful 本质的结果
4:restful 是一种架构风格,与 url 的风格在本质上是无关的,很多框架,以为将对资源的操作放在 http 请求头中就是 restful,例如使用这种风格 GET /account 、POST /account
5:jfinal 提倡 restful 的关键思想,提倡对资源的抽象,但唯独 url 风格与建议的风格有稍许不同,例如 jfinal 是将对资源的操作放在 url之中的,例如: /account/add、/account/save、/account/delete/id 等等
很多框架就被这个 url 套死了,以为 url 不是论文建议的风格就不是 restful,错误地认为 url 风格是 restful 的关键

JFinal

2016-10-18 17:29

简单地说,restufl 是一种软件架构的风格,而此风格之中有很多的概念,设计思想,核心思想在于对资源的抽象,也就是以数据为中心去做设计,数据之上的复杂多变的业务,仅仅是对数据的不同操作、组合、展现方式而已,抓住了数据为核心这个根本,就抓住了 restful 的关键

而 url 风格并不是 restful 的重点,数据结构才是关键

Romeo

2016-10-18 18:00

@JFinal 非常感谢波总详细讲解 ~_~

hopewsw

2017-03-06 10:38

波总理解比较深刻,受教了

风花狂月

2017-08-01 10:44

波总对RESTFUL的理解,我不认同,因为RESTFUL的每一个URI是对资源的一种抽象,而资源对应着是信息,可以是文本,可以是图片,可以是语音等等。所以资源应该是一个实体,而RESTFUL(Representational State Transfer)代表着的是 “资源表现层状态装换”,所以我认为不应该在URI中添加形如add,detele,save等动词词汇,这样RESTFUL代表的资源就不是一个实体了。如/account/save这个URI,含义是对“账户保存“这个资源进行状态的装换?如果account下又包含从属关系,比如card(卡片),我想要对某账户下添加一张卡片,是不是就应该写成这样 /account/card/save,而这显然不是对资源的一种抽象

JFinal

2017-08-01 10:54

@风花狂月 这里有一个我最详细的回复:http://www.jfinal.com/share/230

我的回复主要表述了一个观点:Roy Fielding 博士的 Restful 论文中建议的 URL 风格并不好用,我建议将动词直接放在 URL 之中,仅此而已

对于 URL 意义的解读是一致的,只是这个动词放的地方不同而已

风花狂月

2017-08-01 11:16

@JFinal 我看了波总给的连接,深感其武学上的造诣,但是同时我也提出一个疑惑,形如对关联资源的操作,按照jfinal的restful风格应该如何编写?如:对一个账户下添加一张卡片,是形如/account/card/save?accountId=xx&cardInfo=xxx,如果关联关系是多对多,如给一位老师添加一个学生,/teacher/student/add还是/student/teacher/add,正因为RESTFUL的核心是对资源的抽象,进而可以理解成对数据结构的抽象,所以我不是很清楚,碰到这种情况应该如何处理?求波总赐教

JFinal

2017-08-01 11:26

@风花狂月 我建议向两个方向考虑:
1:对于简单情况,将 http 请求的“动词”拿到 url 中即可
2:如果参数比较复杂,则需要借助表单或者叫 http body 传递参数的方式搞定,body 中可以传递极为复杂的参数,例如传入一个 json 结构的数据

随着提交数据结构的复杂度提升,不是所有参数都能在 url 中就搞定的,即便是 Roy Fielding 博士建议的 URL 风格必然也有搞不定的情况,这时候就要请出 http body 传参

风花狂月

2017-08-01 11:32

@JFinal 感谢波总的赐教,我的理解就是,比如如给一位老师添加一个学生,可以理解成是报名服务URI = /signup,然后在body中传入参数:
{
"teacher_id": "老师ID",
"student_id": "学生ID",
"type": "报名课程(普通,精英,等)",
"money": "报名费",
.....
}
是这样吗?

JFinal

2017-08-01 11:36

@风花狂月 这样传参可以满足需求,还可以将 teacherId 放到 url 之中,而 body 中只传学生信息,这个不是很重要,关键是满足需求

风花狂月

2017-08-01 11:39

@JFinal 66666,我感觉我的武学拘泥于招式,今得波总指点,感觉豁然开朗

JFinal

2017-08-01 11:39

@风花狂月 相当有悟性啊,十分看好你 ^_^

vee94

2017-12-18 10:38

其实像GET,POST这些http method本身就是http协议的一部分,为了贪图方便,放着协议的东西不用,而添加额外的action支持,个人认为不是很好。

JFinal

2018-03-29 15:30

@vee94 业务动作千变万化, GET、POST 太局限, http 协议不可能支持所有的 action 动作

热门反馈

扫码入社