假设我有资源/实体/ 1234 实体是一个集合,1234是实体的ID。 实体是服务器上的数据库记录和一堆文件。我有一个动作,可以构建一个xml模型和一个实体的其他东西。 我想出了这个:
POST / entities / 1234 / builder
{"有源" :" true"}
但我不确定这是否是一种宁静的方式。将构建器视为实体的子资源并不是正确的。或者可以吗?
答案 0 :(得分:1)
术语“构建器”有点奇怪,但是您的方法可以正常工作而没有任何我能想到的负面影响。好吧,除了使缓存失效更难,但大多数方法都可能出现这种情况。
就个人而言,我会选择,
POST /entities/1234/activator
和
POST /entities/1234/deactivator
有一个空体,只是为了让我不必担心身体的格式并解析它。但是,这取决于在Web框架中创建新资源的难易程度。
另一种方法是,
POST /EntityActivator
Content-Type: text/uri-list
http://example.org/entities/1234
http://example.org/entities/1237
这种方法的优点是你可以进行“批量”激活和停用。这完全取决于您的激活码是否对所有实体都是通用的,或者您是否具有特定于实体的激活码。
答案 1 :(得分:0)
我认为您的解决方案没有问题,但是在REST中没有标准的方法可以做到这一点,所以谁知道。
我建议通过POST上的自定义标头发送命令。这简化了控制器中的路由(至少在Spring中简化了它),并且不会使用无法标记的缓存破坏随机数据来感染您的URL,并且不会使用不应该属于对象的一部分的不可解析的属性感染您的对象首先。
如果你有兴趣,我写了关于this on my blog的文章。
可以说,你最终试图用你的问题中的命令类型做的是改变资源的状态,因此你应该只更新客户端上对象的状态值然后发布修改后的对象回来,让服务器解决如何处理更改。但这并不适用于打印等命令。