如何理解RESTful中资源的概念?
REST设计风格的特点是:资源是由URI来指定,对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
那么:
1、如何理解资源呢?最好能通过实例说明。
2、http://example.com/resources/142,这种是restful风格的url,那么http://example.com/resources/142/get,这种风格是吗?如何理解呢?
3、PUT、DELETE在具体Web开放中如何应用呢?
Answers
问题1:
任何一个URI都可以看成资源,你可以把资源简单类比为OOP中的对象,是对一个事物的高度抽象。一切系统中的东西都可以抽象为资源:
- 用户http://example.com/user
- 商品http://example.com/product/1
等等。
问题2:
但一个URI到底是不是资源并不是由网址决定的,网址只是起到对这个资源的描述作用,网址设计的好,用户可能更直观的明白资源是做什么的。但网址最终只是一串符号,一个URI是不是资源还是有这个URI的实际功能决定的。所以你 不能仅仅根据一个URI判断这是不是一个资源,符不符合RESTFul风格。
不过我们还是可以评价一个URI是不是一个好的设计,你给出的两个例子中/resources/142是好的设计,/resources/142/get不是,因为/resources/142看起来像是一个事物,/resources/142/get看起来像是一个动作,只有事物才符合资源的定义。
所以简单说RESTFul风格的设计,你的URL中应该都是 名词 ,避免出现动词。
问题3:
明确一点, RESTFul是用来设计Webservice/web API的 ,不是用来做网站的,网站只有GET/POST两种请求。
你要在网站中应用RESTFul,可以用一个特定input指定值为PUT/DELETE,模仿RESTFul的形式,但这并不是真的RESTFul设计。
或者可以通过AJAX请求访问RESTFul API,可以发起真正PUT/DELETE请求。