Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用不同的查找器获取REST资源“;方法;?_Rest_Restful Url - Fatal编程技术网

如何使用不同的查找器获取REST资源“;方法;?

如何使用不同的查找器获取REST资源“;方法;?,rest,restful-url,Rest,Restful Url,假设您有一个/companys资源,允许客户查找上市公司,您希望客户能够按股票代码、位置、位置和行业查找公司 请将相同的URL保存在以下表单中: 获取/公司/msft 获取/公司/美国 获取/公司/美国和软件 这似乎不对。有什么想法吗?您可以接受其中的任何一个,但随后返回一个位置:指向规范地址的标题(可能是GET/companys/msft)。您只有一家公司,但有多种方法可以找到它,因此我可能会定义/companys/[unique name],然后是各种各样的东西,比如/companys/

假设您有一个/companys资源,允许客户查找上市公司,您希望客户能够按股票代码、位置、位置和行业查找公司

请将相同的URL保存在以下表单中:

  • 获取/公司/msft
  • 获取/公司/美国
  • 获取/公司/美国和软件

这似乎不对。有什么想法吗?

您可以接受其中的任何一个,但随后返回一个位置:指向规范地址的标题(可能是GET/companys/msft)。

您只有一家公司,但有多种方法可以找到它,因此我可能会定义/companys/[unique name],然后是各种各样的东西,比如/companys/byticker/msft和/companys/bylocation/usa等等。

怎么样

GET /Companies?ticker=MSFT

GET /Companies?country=USA

GET /Companies?country=USA&industry=software
重要的是确定资源。资源是“公司列表”。它的媒体类型可以是Atom列表,也可以只是使用UL LI标记的HTML文档。查询参数会影响列表的内容,但从概念上讲,它仍然是“公司列表”

您可以创建一个独特的资源,例如

GET /Companies/USA
但是你真的需要吗。你打算寄到/公司/美国吗?你要删除/公司/美国吗?如果您的应用程序不需要在这些特定的公司集合上执行附加操作,那么为什么还要麻烦将它们建模为不同的资源呢

作为本次讨论的旁注,我想更清楚地区分访问单个实体资源和列表资源的时间。i、 e

GET /Companies/USA

GET /Company/MSFT

我意识到这不是一些流行的web框架的工作方式,但我发现这是一个有用的区别。

后两个查询将返回多个公司。这不是一个非常RESTful的方法。@workmad3如果要使用这个短语,需要解释违反了哪个REST约束。我们看到在没有任何证据的情况下使用了太多的短语“that'snotrestful”。它不是RESTful,因为资源应该有唯一的名称。如果有多个查询返回“相同的东西”,那么它们应该返回可以获取的资源的唯一名称,而不是资源本身。在REST体系结构中,具有唯一名称对于缓存一致性非常重要。一个名称,一个缓存策略,一个“位置”来获取它,更改它,等等。我理解,很抱歉不清楚:唯一命名的东西应该就是资源,其他部分将是别名,正如您上面指出的那样,如果它们真的是唯一的,则返回永久重定向到唯一名称,或者返回到资源集合(“美国”不仅仅是微软。)@你对几乎所有的“其他”感觉如何允许您执行GET/MyResource.xml和GET/MyResource.json的框架?两个url一个资源。我不是站在任何一边,我只是说…我们希望在公司级别执行操作。例如:/companys/msftSee my update。我发现url/companys/msft有误导性。它是否返回了一个包含股票代码msft的公司列表?还是返回公司资源的表示?这只是我的偏好。Url命名对REST的意义和类命名对面向对象编程的意义一样。可能是另一个问题,但在公司可能有两个不同id(即msft和数字id)的情况下,您如何处理Url?是否允许GET同时访问/company/msft和/company/12345,其中两个请求都返回Microsoft的信息?您不应该有一个具有多个名称的资源。如果需要别名,这些别名可以向实际资源发送重定向。因此,GET/company/msft返回301“永久重定向”,以及实际资源的URL。@Marcus我为同一问题挣扎了很长一段时间。我最终放弃了使用URL中的备用键直接访问资源的尝试。现在,如果我需要“查找”通过一个辅助键创建一个资源,然后我将该操作视为任何其他类型的搜索。GET/companys?ticker=MSFT,然后从返回列表中的条目中获取规范的URL“/Company/1234”。关于一个资源是否可以有多个URL的争论仍在继续,似乎有一个阵营说你永远不应该这样做还有一个说在某些情况下是可以的。