我刚刚开始使用REST进行旅程,所以请耐心等待我的问题。
我对如何应对某些情况有些怀疑。例如,我读到evenry资源/实体应该有自己唯一的URL。但是如何处理如下例子:
现在,我们有以下问题:
我试图用这种方式解决它:
/休息/对象
/休息/状态
/休息/对象/ 2 /基本
/ rest / objects / 5 / state(/ rest / states / 5)
/休息/对象/ 7
然而,我在4中有一些疑点 - 它看起来不正确。有两种方法可以访问相同的信息/资源/实体。
如何处理?
答案 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的版本也很好 - 这是我的建议:
最后,归结为个人偏好,因为确切的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结构没有限制。