如何询问REST服务器有哪些资源?

如何询问REST服务器有哪些资源?,rest,api,endpoint,Rest,Api,Endpoint,假设我在https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/有两个端点,太空球/覆盆子和太空球/技师。这些端点将使用一个包含来自Spaceballs的引号的正文响应HTTP GET请求,如 curl -X GET "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/raspberry" Only one man would dare give

假设我在
https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/
有两个端点,
太空球/覆盆子
太空球/技师
。这些端点将使用一个包含来自Spaceballs的引号的正文响应HTTP GET请求,如

curl -X GET "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/raspberry"
Only one man would dare give me the raspberry!


所以这一切都很好,但是如果我不知道这两个端点,只知道RESTful服务器的URL呢?我怎么能问那个(在本例中是mock)服务器它有什么资源呢?

作为一个客户端,您不必知道这两个端点!这是REST的基本原则之一,您的资源应该是可发现的

知道
https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/
您的用户应该能够使用超媒体浏览API。实际上,这意味着您的入口点返回到其他相关资源的链接。所以你应该有这样的东西

GET https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/

{
  "self": {
    "type": "link.list",
    "uri": "/",
    "href": "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/"
  },
  "links": [
    {
      "rel": "film",
      "type": "link.list",
      "href": "https://https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs"
    }
  ]
}
上面的响应告诉客户端,当前URI是一个链接列表,有一个链接(称为“film”)指向host/spaceballs上的另一个资源,该资源也是一个链接列表。使用此信息,客户机可以调用该API

GET https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs

{
  "self": {
    "type": "link.list",
    "uri": "/spaceballs",
    "href": "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs"
  },
  "links": [
    {
      "rel": "quote",
      "type": "film.quote",
      "href": "https://https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/raspberry"
    },
    {
      "rel": "quote",
      "type": "film.quote",
      "href": "https://https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/technician"
    }
  ]
}

现在,您已经使用超媒体来描述应用程序的状态,并且正在编写RESTAPI!这是非常非常重要的一点。像这样的描述性链接不是一个“好东西”——它们是必需的。如果你的API不是这样工作的,那就不是REST。

这个链接问题有一些不好的答案:(@Qwerky我同意,我认为这是两个不同的问题和答案。我已经提名重新打开。RESTful服务器没有标准的自我文档化方式……这就是文档的用途。这正是dup问题目标中投票最多的答案所说的。@LynnCrumbling“每个客户端请求和服务器端响应都是一条消息,在理想的RESTful生态系统中,这些消息必须是自描述性的。”上面Lynn似乎不同意您的观点。@D8anija实际上,我不是这么说的;您应该重新阅读我的评论。
GET https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs

{
  "self": {
    "type": "link.list",
    "uri": "/spaceballs",
    "href": "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs"
  },
  "links": [
    {
      "rel": "quote",
      "type": "film.quote",
      "href": "https://https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/raspberry"
    },
    {
      "rel": "quote",
      "type": "film.quote",
      "href": "https://https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/technician"
    }
  ]
}