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

时间:2019-07-08 01:01:25

标签: rest api endpoint

比方说,我在https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/模拟了一个REST服务器,其中有两个端点spaceballs/raspberryspaceballs/technician。这些端点将使用包含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!

curl -X GET "https://50281ac6-ece9-42d3-9590-8e3325f50bd9.mock.pstmn.io/spaceballs/technician"
We got the bleeps, sweeps and the creeps!

那么,一切都很好,但是如果我不知道这两个端点,而仅仅是RESTful服务器的URL,该怎么办?我怎么能问(在这种情况下,是模拟的)服务器它拥有什么资源?

1 个答案:

答案 0 :(得分:1)

作为客户端,您不必知道这两个端点!这是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是链接列表,并且在主机/太空球处有指向另一个资源的链接(称为“电影”),并且该资源也是链接列表。客户端可以使用此信息调用该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"
    }
  ]
}

您现在已经使用超媒体描述了应用程序的状态,并且正在编写REST API!这是非常非常重要的一点。诸如此类的描述性链接并非“必不可少”,它们是必需的。如果您的API不能像这样工作,那就不是REST。