【问题标题】:Can you build a truly RESTful service that takes many parameters?你能构建一个真正的 RESTful 服务,它需要很多参数吗?
【发布时间】:2011-03-21 12:45:07
【问题描述】:

阅读an article on REST(“Restful Grails”)后,我的印象是,在需要大量参数的服务中,不可能真正符合 REST 风格。是这样吗?到目前为止,我看到的所有示例似乎都暗示真正的 REST 样式服务是“无参数的”。使用参数将是 RPC-ish 而不是真正的 RESTful。

更具体地说,假设我们有一个返回股票价格图表数据的服务,该服务需要知道开始日期、结束日期、货币、股票名称以及其他可能适用的信息。在任何情况下,至少需要 4-5 个参数来检索所需的信息。 我会想象 URL 是这样的: /stocks/YAHOO?startDate="2008-09-01"&endDate=... (“YAHOO”在这里是一个虚构的股票名称)。

这真的是 REST 还是更像 RPC,即上述文章的作者所说的“GETful”(即只是低仪式 rpc)?

【问题讨论】:

    标签: web-services rest


    【解决方案1】:

    您可以将查询字符串视为您正在获取的资源的过滤器。在这里,您的资源是雅虎的股票价格。对该资源执行 GET 可为您提供所有可用数据或最新数据。查询字符串过滤您想要的价格。内容协商允许您更改表示,例如png 图形、csv 文件等。要添加价格,只需将表示形式(例如 CSV)发布到同一资源。

    “宁静”并不在于 URL 本身,因为 URI 对客户端来说是模糊的,而是在于您与由其 URI 标识的资源本身进行交互的方式

    【讨论】:

    • 不错!感谢您提供深入研究语义的好答案,这是我一直希望的。
    【解决方案2】:

    您可以随意使用尽可能多的参数来识别您希望访问的资源。 REST 不在乎。

    【讨论】:

    • 但是将其称为基于 GET 的 RPC 而不是 REST 不是更合适吗?我的意思是,上面和 /getStocks?id="YAHOO"&startDate="2008-09-12" 之间的真正区别是什么……对我来说,这只是方法调用之上的一个薄层。跨度>
    • 我并没有真正了解方法调用如何成为资源 - 资源,这里是图形数据,正在创建然后返回。为了使其类似于 REST,似乎应该使用 PUT 创建图形数据,然后可以通过新的 URI 访问该新 URI,然后可以使用 GET 检索该 URI。 (参考:douglasfils.blogspot.com/2008/12/…
    【解决方案3】:

    【讨论】:

    • 是的,但这是 REST 还是仅仅是类似 REST 的 RPC?我也在这里谈论语义。您在该 API 调用中获取的资源是什么?我习惯于看到资源易于理解的示例,例如 bla.com/article/some-article-header - 其中“some-article-header”将标识您可以获取/放置/发布/删除的资源。
    • 我会说它是 RESTful,因为它符合其余约束 en.wikipedia.org/wiki/…
    猜你喜欢
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多