【问题标题】:Preferred method for REST-style URL's?REST 样式 URL 的首选方法?
【发布时间】:2011-11-18 20:15:51
【问题描述】:

我正在创建一个包含 REST 样式服务的 Web 应用程序,我想澄清一下我的 Java 服务器端应如何接受 POST 请求的首选(标准)方法:

方法一: http://localhost:8080/services/processser/uid/{uidvalue}/eid/{eidvalue}

方法二: http://localhost:8080/services/processuser {uid:"",eid:""} - 这将在帖子正文中作为 JSON 发送

这两种方法都将使用“application/json”内容类型,但每种方法各有优缺点。我可以立即想到方法 2 的一个缺点是 JSON 数据需要映射到 Java 对象,因此在任何用户访问“processuser”servlet api 的任何时候都会创建一个 Java 对象。非常感谢您的意见。

在这种特殊情况下,数据将用于查询数据库,将 json 响应返回给客户端。

【问题讨论】:

  • 首先你应该弄清楚“processuser”是什么。即post数据是否会改变资源的状态?
  • Artefacto 所说的,另外:不要担心创建一个对象来解析你的 JSON,除非你已经证明它是一个瓶颈。

标签: java json rest spring-mvc


【解决方案1】:

对于 POST 请求,通常首选方法 2,尽管资源名称通常会是复数形式,以便您实际发布到:

http://localhost:8080/services/processusers

不过,这是为了创建新记录。

看起来您确实在使用大多数 RESTful 服务会使用 GET 请求(检索记录)的方式,在这种情况下,首选方法 1。

编辑: 我意识到我没有找到答案,所以请考虑Rails 设定的标准。您可能同意也可能不同意这是一个有效的标准。

【讨论】:

    【解决方案2】:

    我认为我们需要从您的问题中回过头来一点。您的路径段开始于:

    /services/processuser
    

    这是一个错误。 URI 应该标识一个资源,而不是一个操作。这可能并不总是可能的,但这是您应该努力争取的。

    在这种情况下,您似乎使用uideid(不管它们是什么)来标识您的用户。您可以构建路径,例如/user/<uid>/<eid>/user/<uid>-<eid> 引用的用户(如果必须/user/uid/<uid>/eid/<eid>);如果eid 是一个专业化,而不是与uid 处于同等地位,那么/user/<uid>;eid=<eid> 会更合适。

    如果您事先知道标识符,您可以通过发布到/user//user/<uid>/<eid> 创建新用户,在/user/<uid>/<eid> 上使用DELETE 删除用户,在@ 上使用PUT 更改状态 987654333@.

    所以要回答您的问题,如果“processuser”旨在使用您提供的数据更改用户的状态,您应该在/user/<uid>/<eid> 上使用 PUT。否则,到 REST 模型的映射不是那么干净,可能最好的选择是定义一个资源 /user/process/<uid>/<eid> 并在那里发布所有数据,但是一个 POST 到 /user/process 的所有数据或多或少一样,因为我们已经在类似 RPC 的阵营中了。

    【讨论】:

    • 我认为 processuser 是某种对象,很好地调用了 RPC 点。
    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2017-01-06
    • 2012-02-27
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多