4
回答
关于restful 同一资源 不同操作的问题,页面显示的问题。
终于搞明白,存储TCO原来是这样算的>>>   

新手在设计符合restful风格的应用上有一个疑问。

同一URI表示相同的资源,通过GET PUT DELETE POST 进行CRUD,

但CRUD所对应界面不一样,如何用同一URI表示?

比如:/users 表示列示所有用户信息资源,此界面仅显示了一些用户相关信息。 

问题一POST /users 表示什么?

问题二当我要新增用户时,对应的URI应该是什么?

再比如: /users/123  表示用户123的资源,当get /users/123 会返回客户端123的资源(只读),此时我想更新(对123可更改) 在/users/123 上如何显示这两种内容?


    



举报
彩云小斯
发帖于2年前 4回/515阅
共有4个答案 最后回答: 2年前

话说回来,RESTful毕竟只是一种风格,不用纠结太多。


而且,如果它让你感觉晕头转向,那你干脆不要用它,反正也没有多大好处。 


毕竟HTTP协议本身是为网页设计的,并没有专门为动态请求做过系统的支持。是因为WebService这种古老笨重的东西不好用,而HTTP简单方便,所以我们“借用”HTTP协议来实现网络应用服务的通信。而HTTP协议那么多内容,其实真正有意义的就2个:URL——找到目标,参数——就是参数。 


我认为,Web后台的设计,还是要面向服务来进行。一个URL对应一个具体的业务入口(接口),这个接口本身就涵盖了操作的资源和对资源的操作,如/user/list查询所有,/user/create注册,/user/del删除......。如些一来,我们完全可以忽略HttpMethod,或者统一为POST(这样更严谨、更安全一些)。至少可以让前端、后台开发者都不用在Method上面浪费时间。

在问出这个问题的时候我想到一点,是否应该这样的理解:

比如 /users 资源  ,如果需要新增,可以新建一个URL,如/users/creat. 这里完成新建的工作,form写成<form acount="/users" method="post">

我的这个理解对吗?请大神赐教。


引用来自“彩云小斯”的评论

在问出这个问题的时候我想到一点,是否应该这样的理解:

比如 /users 资源  ,如果需要新增,可以新建一个URL,如/users/creat. 这里完成新建的工作,form写成<form acount="/users" method="post">

我的这个理解对吗?请大神赐教。


不是。
RESTful API的设计理念,是面向资源的,不是面向服务的。

它的一个URL(URI)就指向一类资源,比如你说的用户user;而不会在URL上体现动作。

对user的不同操作,是通过HttpMethod来确定的,比如可以定义成:

GET        ../user          ---->查询所有用户列表
GET        ../user/123    ---->查询编号为123的用户信息(GET请求的参数只能放URL上)
POST      ../user          ---->创建一个新用户(参数一般放在Request的Enity里
PUT        ../user          ---->更新一个用户(参数一般放在Request的Enity里
DELETE   ../user/234   ---->删除编号为234的用户(DELETE请求的参数只能放URL上)

其实,我本人不支持在互联网和公开信道使用RESTful API,尽管RESTful一般是使用HTTPS的。

引用来自“Sel8616”的评论

话说回来,RESTful毕竟只是一种风格,不用纠结太多。


而且,如果它让你感觉晕头转向,那你干脆不要用它,反正也没有多大好处。 


毕竟HTTP协议本身是为网页设计的,并没有专门为动态请求做过系统的支持。是因为WebService这种古老笨重的东西不好用,而HTTP简单方便,所以我们“借用”HTTP协议来实现网络应用服务的通信。而HTTP协议那么多内容,其实真正有意义的就2个:URL——找到目标,参数——就是参数。 


我认为,Web后台的设计,还是要面向服务来进行。一个URL对应一个具体的业务入口(接口),这个接口本身就涵盖了操作的资源和对资源的操作,如/user/list查询所有,/user/create注册,/user/del删除......。如些一来,我们完全可以忽略HttpMethod,或者统一为POST(这样更严谨、更安全一些)。至少可以让前端、后台开发者都不用在Method上面浪费时间。

谢谢你的认真回复,

对于RESTFUL 我目前很好奇的同一个URI,能还显示完全不同的界面。

比如 /USERS 这个URI, POST GET DELETE PUT 分别对应不同的操作这个很好理解。

但毕竟GET  和 POST(新建) 的在浏览器上展现的信息完全不一样,当我要新建用户时,系统是如何在/USERS这个URI 返回我注册界面的?

--- 共有 1 条评论 ---
Sel8616显示注册界面,一般不会通过POST获取的。REST api主要用于提供功能的接口。纯粹呈现界面最好通过静态资源直接映射过去,或者用无关CRUD的另一套接口 2年前 回复
顶部