休息设计:用于过滤服务的动词和资源名称



我正在开发一种清理/过滤服务,该方法具有接收XML中序列化对象列表的方法,并应用一些过滤规则以返回这些对象的子集。

  1. 在静止的服务中,我该使用什么动词?我认为这是一个自然的选择,但是我必须将序列化的XML放入有效但感觉不正确的请求正文中。其他动词似乎不适合语义。

  2. 定义该服务接口的好方法是什么?命名资源/清理或//过滤器似乎很奇怪,主要是因为在我在线看到的示例中,它始终是一个名称,而不是用于资源名称的动词。

  3. 我是否有权感觉到休息服务更适合CRUD操作,并且您开始在此类服务的情况下弯曲规则吗?如果是,我是在做错的建筑选择。

  4. 为了简单起见,我一直在努力以休息风格(而不是肥皂)开发这项服务,但是这种尴尬的情况发生了很多,让我觉得自己缺少一些东西。选择休息的地方不应该使用,或者可能会过度思考一些并不重要的东西?在这种情况下,真正重要的是?

休息是关于以其设计方式使用http。要安排考虑(标题是休息设计:):

  • URL应该是资源的固定链接(缓存的好处,存储/共享终点等...)
  • 因为它们是资源的固定链接,因此在URL中有动词是一个暗示您在错误的路径上(滤波器是动词)。
  • 资源的集合可以是端点/foos。
  • 如果要过滤资源的集合,请考虑Querystring参数,例如?filter =或类似的内容?ids = 1,2,3,4,5。
  • 获取不应更改资源。请注意,"清理"意味着被删除的东西,因此在进行时要谨慎对资源的更改谨慎。休息说获得不应该改变资源。想象一下,由于T被缓存,因此将您清理请求的缓存服务器作为get并返回正常。缓存服务器知道不要缓存帖子,删除等...(这就是HTTP设计的方式)。
  • 不要排除多个呼叫 - 例如,您可以进行过滤并获取一组资源以进行清理,然后可以由许多或一个删除动词呼叫进行清理。
  • 有时会有一种时间资源,例如交易或"工作",可以像清理一样工作。不要排除资源的帖子,该帖子包含物体包含项目进行清理,然后返回工作ID。然后,您可以查询JobID以确保进度或状态。

很难提供确切的指导,因为问题不清楚,但是希望上述宁静的原则指导和思想使您走上正确的轨道。如果您澄清了确切的电话,我将尝试推荐API。

所以,假设您想清理复制的foos。

[get]/foos/deplicates(or/foos?filter =重复)

返回具有识别的身体的身体。假设返回1,2,5(可能是名称)。

然后您可以发行:

[删除]/foos,身体是包含1,2,5的阵列(或唯一的名称)。删除呼叫是被动的,因此即使根据静止原则将Get呼叫缓存,也可以。

不要在HTTP上不走诸如Pox或Josn RPC之类的休息路线,但在那时才意识到它没有休息。很好,但是您没有得到菲尔丁论文中描述的休息的好处。

http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm

另外,请阅读以下内容:

http://blog.steveklabnik.com/posts/2011-07-07-03-nobody-underds-rest-rest-orest-orest-or-http

编辑:

阅读了您在澄清的评论后,您向服务器发送了一组对象(不持续的服务器端),并且它会返回子集,并以dupes滤波(例如服务器端辅助辅助功能)返回子集,某些选项是:

  1. 如果可能的话,该客户端/浏览器是否侧面 - 为什么要乘网络往返来过滤掉收集?
  2. 如果仅出于某种原因,仅服务器具有特定的知识/数据来确定两个项目是功能相等的(即使数据不完全相同),请考虑使用包含唯一/的响应主体将数据集发布到服务器上过滤集。即使服务器没有持续存在,它也会落入"时间"对象或集合中,并且服务器正在修改它。从概念上讲,这不是服务器资源的获取,缓存在这种情况下没有任何好处。

最后一个问题首先:真正重要的是以

的方式完成工作
  • 正确
  • 易于使用
  • 很容易由未来的程序员(可能包括您自己包括在内)

休息非常适合在每个URL匹配可以操纵的对象的资源上操作。它适合其他用途不太自然,但是这些比实际规则更重要。其他人则指出了关于休息的原始论文,但值得记住的是,很少有实施是纯粹的。

如果您有几个执行这些变革性的功能的URL,请考虑将它们放置在自己的特殊URL空间中,例如/api/filter/api/transliterate等。但更像是远程过程调用。将数据发布到这些URL中会导致您获得某种数据。

如果您陷入了特定名称,则应列出候选人列表,喝几个啤酒,然后从列表中选择一种。那就是我被困在细节上时所做的。

肥皂是一种整洁的协议,具有其用途,但往往很重。良好的文档和一致性对您的新兴API可能比使用任何特定技术更重要。

最新更新