REST:从两个不同的URL访问的相同资源

时间:2014-06-10 13:45:30

标签: rest url

我刚刚开始使用REST进行旅程,所以请耐心等待我的问题。

我对如何应对某些情况有些怀疑。例如,我读到evenry资源/实体应该有自己唯一的URL。但是如何处理如下例子:

  1. 有一个对象列表。
  2. 每个对象都由一些基本信息及其状态描述。
  3. 对象的基本信息例如是它的形状,颜色。
  4. 对象的状态包含空间位置,速度等信息。
  5. 两条信息(基本+状态)都是相当大的对象(仅引入了示例属性)。
  6. 现在,我们有以下问题:

    1. 获取有关对象的所有基本信息。
    2. 获取所有对象状态。
    3. 获取ID = 2的对象的基本信息。
    4. 获取对象ID = 5的状态。
    5. 获取对象ID = 7的所有信息。
    6. 我试图用这种方式解决它:

      1. /休息/对象

      2. /休息/状态

      3. /休息/对象/ 2 /基本

      4. / rest / objects / 5 / state(/ rest / states / 5)

      5. /休息/对象/ 7

      6. 然而,我在4中有一些疑点 - 它看起来不正确。有两种方法可以访问相同的信息/资源/实体。

        如何处理?

3 个答案:

答案 0 :(得分:0)

“基本”不仅仅是资源的一部分吗?它似乎不是来自你的描述,但你应该考虑它。事实上,所有“基本”和“状态”可能只是资源的一部分。没有更多信息,很难获得权威性。例如,“相当大”有多大?

似乎/state也不应该是一个独立的端点,因为一个状态是一个对象的组成部分,而不是它自己存在的东西。

我可以从以下内容开始:

1. GET /objects
2. GET /objects?expand=state
3. GET /objects/2?expand=basic -- or -- GET /objects/2/basic
4. GET /objects/5?expand=state -- or -- GET /objects/5/state
5. GET /objects/7?expand=basic,state

如果需要 /state为顶级,那么您有两种选择:

2. GET /states -- or -- GET /objects/states

这些都不是很理想。只要资源只有一个规范URI,就可以有多个路径来获取相同的资源。问题是最终用户更难学习那些严重依赖该风格的API。第二种风格也令人困惑。 /objects/XXX是一个特定对象,除非XXX == states?这是最终用户必须记住的特殊情况。

答案 1 :(得分:0)

从缓存的角度来看,在单独的资源中使用“状态”和“基本”是有意义的 - “状态”资源经常变化,因此不可缓存,“基本”变化很少,因此应该可以缓存很久。如果这是你的目标,那么继续,它确实有意义(并且是经常提到的模式)。但通常,为了保持低复杂性,将两组值合并为一个单独的资源(在这种情况下为“对象”)。

你的路径非常好,Eric的版本也很好 - 这是我的建议:

  1. / rest / objects(所有完整的对象信息)
  2. / rest / objects / basic(所有基本信息)
  3. / rest / objects / state(所有州信息)
  4. / rest / objects / 7(单个完整对象)
  5. / rest / objects / 2 / basic(单个基本信息)
  6. / rest / objects / 5 / state(单州信息)
  7. 最后,归结为个人偏好,因为确切的URL并不重要。

    请参阅http://soabits.blogspot.dk/2013/10/url-structures-and-hyper-media-for-web.html,以便对此问题进行更长时间的讨论(免责声明:这是我的博客)。

答案 2 :(得分:0)

  

资源/实体

不要混淆这些概念。 REST无关存储数据的方式,资源仅通过CRUD应用程序映射到实体。

  

我读到,evenry资源/实体应该有自己唯一的URL。

您应该阅读IRI standard。 IRI用于识别资源。 Without them you cannot tell the server what you want to manipulate.

  

然而,我在4中有一些疑点 - 它看起来并不像   正确。有两种方法可以访问相同的内容   信息/资源/实体。

     

如何处理?

由你决定。您可以选择其中之一或两者。资源可以拥有多少标识符或者选择哪种IRI结构没有限制。