REST 就是按照设计的方式使用 HTTP。要考虑 RESTful(标题是 REST 设计 :):
- URL 应该是资源的永久链接(缓存优势、存储/共享端点等......)
- 因为它们是资源的永久链接,所以 URL 中有动词暗示您走错了路径(过滤器是动词)。
- 资源集合可以是端点 /foos。
- 如果要过滤资源集合,请考虑查询字符串参数,例如 ?filter= 或类似 ?ids=1,2,3,4,5 的东西。
- GET 不应更改资源。请注意,“清理”意味着某些内容将被删除,因此在执行 GET 时要小心更改资源。REST 说 GET 不应该改变资源。想象一下缓存服务器将您的清理请求作为 GET 并返回 OK,因为 t 已缓存。缓存服务器知道不缓存 POST、DELETE 等...(这就是 HTTP 的设计方式)。
- 不要排除多次调用 - 例如,您可能会执行 get 过滤并获取一组要清理的资源,然后可能会跟随许多或一个 DELETE 动词调用来进行清理。
- 有时有一个时间资源,比如事务或“工作”,可以像清理工作一样工作。不要排除对包含要清理的项目的主体的资源的 POST 并返回作业 ID。然后,您可以查询 jobid 以获取清理进度或状态。
很难给出准确的指导,因为问题不明确,但希望上面的 RESTful 原则指导和想法能让您走上正轨。如果您澄清确切的调用,我会尝试并推荐 API。
所以,假设你想清理重复的 foos。
[GET] /foos/duplicates(或 /foos?filter=duplicates)
返回具有重复标识的 foo 的主体。假设返回 1,2,5(可能是名称)。
然后你可以发出:
[DELETE] /foos 的主体是一个包含 1、2、5(或名称,如果唯一)的数组。删除调用是被动的,因此即使根据 REST 原则缓存 GET 调用也没问题。
不走 REST 路由(例如 POX 或 JOSN RPC over http)也是可能且有效的,但此时意识到它不是 REST。这很好,但你没有得到菲尔丁论文中描述的 REST 的好处。
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
另外,请阅读:
http://blog.steveklabnik.com/posts/2011-07-03-nobody-understands-rest-or-http
编辑:
在阅读了您澄清的评论后,您将向服务器发送一组对象(不是持久的服务器端)并返回过滤掉欺骗的子集(如服务器端辅助函数),一些选项是:
- 如果可能的话,做这个客户端/浏览器端 - 为什么要使用网络往返来过滤掉收集中的欺骗?
- 如果由于某种原因只有服务器具有特定的知识/数据来确定两个项目在功能上是等效的(即使数据不完全相同),那么请考虑将数据集发布到服务器,并使用包含唯一/过滤集的响应正文。即使服务器没有持久化该集合,它也会落入一个“临时”对象或集合中,并且服务器正在修改它。从概念上讲,它不是服务器资源的 GET,并且缓存在这种情况下没有任何好处。