我在为域中的资源建模以适应REST API时遇到了一些麻烦.这个例子显然是做作和简化的,但它说明了我陷入困境的两点.
我知道:
我该如何处理日期?
一个.在查询字符串中:/ pets/dogs/d123?from = 10102010&to = 10102015(但据我了解,查询字符串主要用于可选参数;日期/日期范围是必需的.我在考虑将当前日期作为默认值,如果查询字符串中没有任何内容.有任何想法?)
湾 在路径的某个地方.之前/宠物?当我在日期和日期范围之间切换时,这似乎有点奇怪.而我真正的道路已经很长了
我该如何处理多个名字?
我看到它的方式,我必须指定谁使用我正在搜索的名称.
/ pets/dogs/rex - >我想知道叫做rex的狗(由谁,我还是奶奶?).但在哪里放奶奶?
我看到有些人说不要担心网址,并使用超媒体但我理解的方式(而且我可能错了)是你必须始终从根(这里/宠物)开始并遵循响应中提供的链接.然后我就更加困难了(因为这个日期确实很长很多).
任何帮助表示赞赏.谢谢
在这种情况下可能有用的是一种资源查询语言。它不知道您使用的技术堆栈,但可以在此处找到 JavaScript 示例。
绝对不要在路径中放置任何日期。这被认为是一种不好的风格,用户可能会感到困惑,因为他们中的大多数人可能不习惯这种奇怪的设计,并且根本不知道如何使用 API。通过查询字符串传递日期是完全没问题的。您可以引入默认状态 - 这不是一个坏主意 - 但您需要在响应中描述该状态(例如包括日期)。400 Bad Request当请求中缺少日期范围时,您还可以返回状态代码。就我个人而言,我会通过查询字符串获取默认状态和日期。
在这种情况下,我想到的唯一的事情就是颠倒这种关系,所以它是:
/users/grandma/dogs/rex
Run Code Online (Sandbox Code Playgroud)
或者:
/dogs/rex/owners/grandma
Run Code Online (Sandbox Code Playgroud)还可以做的是放弃 REST 规则并引入新的端点,/dogs/filter该端点将接受POST主体中带有过滤器的请求。这样,描述整个查询以及发送它就会容易得多。正如我所提到的,这不是 RESTful 方法,但在这种情况下似乎是合理的。这种过滤也可以使用纯 REST 设计进行建模 - 过滤器也将成为一种资源。
超媒体似乎不是这种特殊情况下的出路——说实话,我不太喜欢超媒体设计。
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |