【问题标题】:How to represent "start", "pause" and "finish" process when applying RESTful principles?应用 RESTful 原则时如何表示“开始”、“暂停”和“结束”过程?
【发布时间】:2013-12-26 09:20:28
【问题描述】:

我有这些网络服务端点:

/quizzes POST - Generates a new quiz on the server and respond with the resource generated.
/quizzes/1/answer/done POST  - Posts an answer to the quiz. Ends the quiz.
/quizzes/1/answer/temporary POST - Posts an answer to the quiz. Pauses the quiz.

我希望能够在不同阶段之间移动时切换statusquiz 上的其他一些字段。

但是,我不确定恢复暂停测验的 URI 应该是什么。

在另一个请求中将任务和切换测验状态分开会更好吗? URI 应该如何?我试图使服务器上的逻辑和与 Web 应用程序的接口尽可能简单。

【问题讨论】:

    标签: rest language-agnostic


    【解决方案1】:

    请记住,对于 REST,您本质上是在考虑面向对象。

    所以你有/quizzes/ 要开始一个新的测验,你发布到/quizzes/,然后你会返回测验ID。

    要做一个新的答案你发布到/quizzes/{id}/answers/。这将返回答案 id

    /quizzes/{id} 获得的测验状态到从/quizzes/{id}/answers/{id} 获得的答案。

    要修改测验的状态,您可以将 PUT 设置为 /quizzes/{id}?paused=true,或者在 JAXB 和/或 XML 中定义一个命令对象并将其包含在 PUT 请求的正文中。

    【讨论】:

    • /quizzes/{id}?paused=true --- 不够 RESTful。资源可以是/quizzes/{id}/status,绝对不是一组任意参数
    • 当它是资源名称的已定义和静态部分时 - 像我展示的那样使用它是一种常识
    • 在您看来。这是一个有效的设计,它不是唯一有效的设计。
    • 出于同样的原因,您不会将应用程序的所有代码都放在 Main() 中。这里的目标是将事物分解为最有用的最终大小。在我看来,“状态”太小了,不能保证作为它自己的对象存在,这里的基本对象是测验和答案。几乎可以肯定,状态值是测验对象中的单个字段。除非对该状态有很多不同的操作,或者有很多原因要独立查询它等等,否则将它作为自己的可单独寻址的对象分解是没有意义的。
    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多