【问题标题】:Deletion of multiple resources in JAX-RS Service jersey implementation在 JAX-RS Service jersey 实现中删除多个资源
【发布时间】:2013-05-20 05:00:30
【问题描述】:

我是 restful 服务的新手,愿意从专家那里得到一些想法。

将访问我的服务的应用程序有一个datatable-grid(网格的每一行代表一个员工对象/实体),用户可以一次删除多个记录(基于选中的复选框的数量用户)。在这种删除操作中,URL 将如何表示以及数据将如何发送到服务?

我的想法

由于删除的行数不同(基于用户选择的复选框数),因此我选择查询字符串,下面将是 URL 表示,我可以使用它在我的服务中获取数据:

/deleteEmployees?id=1,2,3

即id 的逗号分隔值,它将唯一标识表中的记录。

基于我的想法,我有几个问题:

1) 上面提到的查询字符串包含 comma-seperated 值(即 Ids)。它是查询字符串将包含此类值的有效 URL 吗?

2) 定义 URL 的查询字符串是否有任何限制(就像我使用 csv 所做的那样)?

3) 以更好和更有效的方式实现相同目标的任何其他替代方案?

附:我对此很陌生,因此从专家那里寻找不同的想法,并尝试了解什么是正确的,什么不是。

【问题讨论】:

  • 我不认为 REST 真的喜欢一次删除资源的整个元素子集。如果您必须这样做,那么 CSV 在 url 中就可以了。您还可以将 CSV 作为 HTTP 请求中的自定义标头值。有关限制,请参阅here。相反,我会遍历复选框选择并在 /employee/{id} 上发出 DELETE HTTP 请求
  • 感谢您的回复。您选择循环遍历它也很好。但是,这不是像一次调用服务调用 n 次而不是一次调用一样吗?请对此发表评论。
  • 就是这样。它可能更像 REST,因为您正在使用 HTTP 方法(例如:DELETE)而不是像 /deleteEmployees 这样的操作与资源交互
  • REST 的 wiki 文章描述了如何访问资源。否则,您可以阅读整个REST Thesis。这只是我在使用 RESTful 架构时的一种感觉。
  • 带有标题的选项可能会更好。如果您在/employees 访问整个Employee 资源集,则可以发送带有Employees-To-Delete: 1,2,3 之类的标头的DELETE HTTP 请求。对我来说,这似乎更像 REST。

标签: java web-services rest web-applications jersey


【解决方案1】:

以逗号分隔的员工 ID 列表是一种很好的方法,但我不会将它放在带有操作的 URL 中,即。 /deleteEmployees?id=1,2,3。 REST 更多的是关于在 URL 中识别资源,而不是操作。我会遍历每个员工 ID 以删除并为每个员工发送一个 HTTP DELETE 请求

DELETE /employees/1 HTTP/1.1
DELETE /employees/2 HTTP/1.1
DELETE /employees/3 HTTP/1.1

另一种方法是向/employees 之类的 URL 发送一个 HTTP DELETE 请求,保留建议的资源 REST 标识并使用 HTTP 方法。您将在 HTTP 标头中传递 id 列表。

DELETE /employees HTTP/1.1
Employees-To-Delete: 1,2,3

查看this answer 以了解 URL 中的字符限制。

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 2015-02-07
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多