Java JAX-RS服务实现中删除多个资源

Java JAX-RS服务实现中删除多个资源,java,web-services,rest,web-applications,jersey,Java,Web Services,Rest,Web Applications,Jersey,我不熟悉restful服务,并愿意从专家那里得到一些想法 将访问我的服务的应用程序有一个数据表网格(网格的每一行代表一个员工对象/实体),用户可以一次删除多个记录(基于用户选择的复选框数量)。在这种类型的删除操作中,URL表示如何,数据如何发送到服务 我的想法 由于被删除的行数不同(基于用户选择的复选框数),因此我选择查询字符串,下面是URL表示,我可以使用它获取服务中的数据: /deleteeployees?id=1,2,3 i、 e.以逗号分隔的id值将唯一标识表中的记录 基于我的想法,我有

我不熟悉restful服务,并愿意从专家那里得到一些想法

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

我的想法

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

/deleteeployees?id=1,2,3

i、 e.以逗号分隔的id值将唯一标识表中的记录

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

1) 上述查询字符串包含逗号分隔的值(即ID)。它是一个有效的URL,其中查询字符串将包含此类值吗

2) 在定义URL的查询字符串时是否有任何限制(就像我使用csv的方式)

3) 以更好、更高效的方式实现同样目标的任何其他替代方案


另外,我在这方面是新手,因此我从专家那里寻找不同的想法,并试图理解什么是正确的,什么是错误的。

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

DELETE /employees/1 HTTP/1.1
DELETE /employees/2 HTTP/1.1
DELETE /employees/3 HTTP/1.1
另一种选择是向URL(如
/employees
)发送一个HTTP删除请求,保留建议的REST资源标识并使用HTTP方法。您将在HTTP头中传递ID列表

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

看看URL中的字符限制

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