当前位置:  开发笔记 > 编程语言 > 正文

RESTful单例资源

如何解决《RESTful单例资源》经验,为你挑选了1个好方法。

我来自RPC世界,但目前正在调查使用REST是否对我的项目来说是一个好主意.至于我从维基百科中了解到,RESTful服务的基本思想是提供对集合及其各个元素的访问.

在我的情况下,服务器将是一个测量仪器.我必须能够启动,停止和暂停测量程序,并随时读取数据.

目前,我正在考虑以下内容:

POST/measure(开始测量,这一直持续到用户停止)

PUT/measure pause = true/false(暂停/取消暂停)

删除/测量(停止)

GET /测量(获取测量数据)

但是,我不确定这是否适合REST模型,因为我在这里并不真正使用集合或元素.

我的问题:我如何访问单例资源并对服务器执行启动/停止请求会破坏RESTful无状态约束?



1> Mark E. Haas..:
不RESTful

不,您的方法不是RESTful,因为如果我了解工作流程,您将删除资源以停止测量,然后获取资源以读取最终结果.但删除资源意味着没有任何东西可以留下GET.

您的资源是单例的事实根本不是问题.问题在于你映射动词和状态的方式.

你的描述有点抽象,所以让我们更具体一点:让我们假设有问题的仪器以弧度/秒为单位测量飞轮的角速度.该仪器具有与测量相关的一些成本,因此客户需要能够在一段时间内禁用测量作为节省成本的措施.如果这与您的场景大致类似,那么下面的说明应适用于您的场景.

动词

现在,我们来看看你的动词.

GET返回资源的表示.所以,当你GET /measure,它应该返回一些代表当前测量的数据.

PUT创建或更新特定的命名资源.资源由其URL命名.因此PUT /measure暗示您正在更新所调用资源的状态/measure,或者创建该资源(如果该资源尚不存在).在您的情况下,仪器值是只读的:我们不能将弧度/秒值写入仪器.但是乐器的暂停/活动状态是可变的,因此PUT /measure应该包括修改乐器状态的主体.你可以在这里使用很多不同的表示形式,但是一个简单的方法就是请求体,active=true或者active=false表明你的新工具应该是什么样的.

POST类似于PUT,除了客户端没有指定应该创建或更新的资源的名称.例如,在不同的API中,客户端可能会POST /articles创建一篇新文章.服务器将创建一个资源并为其命名 /articles/1234,然后通过返回201 CREATEDHTTP代码并添加Location: /articles/1234标头告诉客户端新资源的位置,它将告诉客户端这个新名称.在您的场景中,POST不是一个有意义的动词,因为您总是知道您的单例资源的名称是什么.

DELETE表示您删除资源,并且由于资源由URL标识,DELETE /measure表示/measure不再存在.后续GET /measure应该返回404 NOT FOUND410 GONE.在你的情况下,客户端实际上不能销毁仪器,所以DELETE没有意义的有意义的动词.

结论

总而言之,为您的服务设计的RESTful设计将是PUT /measure一个请求体,它告诉仪器它应该是活动的还是不活动的(暂停的)并GET /measure读取当前的测量值.如果您GET /measure使用暂停的仪器,则应该返回409 CONFLICTHTTP状态.您的服务不应使用POST或根本不使用DELETE.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有