【发布时间】:2014-03-31 10:38:20
【问题描述】:
我知道这里有一个众所周知的问题:PUT vs POST in REST
但是我对我的一个案例有点困惑,想寻求建议以正确设计我的 RESTful WS:
假设我的系统是这样工作的:
我的系统将定义多个批处理作业(例如JOB1、JOB2)。
对于每一天,我都会要求我的系统创建一个批处理作业计划列表,通过提供一个特定的日期(例如,我在 2014-12-25 通过,那么系统将创建JOB1(2014-12-25) 和JOB2(2014-12-25)。
用户可以触发批处理作业计划来执行。
我想寻求建议以正确地将这些公开为资源:
我应该对资源 /batchSchedules 执行 POST 还是 PUT 以触发在特定日期创建 batchSchedules? URL 应该如何使其成为适当的 RESTful API?
“计划触发”应该是什么样的?
我正在考虑这两种选择,但我觉得这两种选择都不对:
方法一:
要为特定日期创建计划:PUT 到 /batchSchedules/2014-12-25,请求正文为空,因为我似乎正在创建“一组计划”作为 URL 中声明的资源。 (但是,它似乎是正确的,因为如果我再次调用它,我不会替换它,这看起来不太好)
要触发计划执行:PUT 到 /batchSchedules/2014-12-25/JOB1,因为它似乎替换了批处理计划资源(但它看起来很奇怪,因为我并没有真正替换资源,不能在这里进行 POST,因为我实际上没有生成URL 下的子资源)
要通过有意义的输入获取计划的状态:GET/batchSchedules/2014-12-25/JOB1
要获取计划的状态:GET /batchSchedules?id=12345 其中 12345 是计划的 ID
方法 2:
要为特定日期创建计划:POST 到 /batchSchedules,请求正文中带有日期,因为我似乎正在创建批处理计划的子资源
要触发计划执行:PUT 到 /batchSchedules/2014-12-25/JOB1,因为它似乎替换了批处理计划资源(但看起来很奇怪,因为我并没有真正替换资源,不能在这里进行 POST,因为我实际上没有生成URL 下的子资源)
要通过有意义的输入获取计划的状态:GET /batchSchedules/2014-12-25/JOB1
要获取计划的状态:GET /batchSchedules?id=12345 其中 12345 是计划的 ID
方法3:
要通过有意义的输入获取计划的状态:GET /batchSchedules?job=JOB1&date=2014-12-25
要获取计划的状态:GET /batchSchedules/12345 其中 12345 是计划的 ID
为特定日期创建计划:POST 到 /batchSchedules,请求正文中带有日期,因为我似乎在 /batchSchedules 下创建了一堆批处理计划的子资源(似乎不太好)
要触发计划执行:PUT 或 POST 到 /batchSchedules?job=JOB1&date=2014-12-25,因为它似乎替换了批处理计划资源(对我来说看起来很奇怪)
其中哪一种是以适当的 REST 方式公开我的 WS 的合适方式?
【问题讨论】:
标签: rest