如果我有一个restful API的基本URL,有没有办法确定它提供了哪些资源?

时间:2012-11-28 03:29:47

标签: rest

我有RESTful API的基本URL。我列出了它提供的一些资源类型。像:

GET http://www.baseURL.com:8180/fruits

将导致类似:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <FruitList xmlns="http://www.baseURL.com/Fruits">
  <Fruit>
    <Identity createdTimeStamp="2011-05-13T09:45:16.611-05:00" lastUpdatedTimeStamp="2012-11-19T03:24:19.310-06:00">
        <FruitName>Apple</FruitName>
    </Identity>
  </Fruit>
  <Fruit>
    <Identity createdTimeStamp="2011-05-13T09:45:17.241-05:00" lastUpdatedTimeStamp="2012-11-19T03:24:20.431-06:00">
      <FruitName>Banana</FruitName>
    </Identity>
  </Fruit>
  <Fruit>
    <Identity createdTimeStamp="2011-05-13T09:45:19.445-05:00" lastUpdatedTimeStamp="2012-11-19T03:24:21.281-06:00">
      <FruitName>Orange</FruitName>
    </Identity>
</Fruit>
</FruitList>

有没有办法,如果我不知道这个API有'结果'作为资源,我可以通过某种类型的通用GET命令来解决这个问题?

2 个答案:

答案 0 :(得分:1)

没有标准。即使您收到回复,也无法知道回复的含义

答案 1 :(得分:1)

所有通信都需要一些先进的知识,包括RESTful API。如果我说“你好”并且你只说克林贡语,你可能会认为我在侮辱你。 RESTful API所需的预先假定的知识包括:

  • 入口点(网址)
  • 了解界面以及如何有效地使用它(即HTTP方法和返回代码 - 请参阅REST API - why use PUT DELETE POST GET?了解更多信息)
  • 可以合理地预期可以使用哪种表示格式
  • 理解这些格式的语义

应记录这些内容,以便客户作者可以使用它们。因此,尽可能重用现有规范是有意义的,而不是发明新规范。这样做意味着现有客户可以在不查看任何文档的情况下了解您的大部分或全部API。这就是如何在没有浏览器供应商返回并更新其浏览器以访问新网站的情况下将新网站添加到互联网的方式。

例如在HTML中:

entry point = http://www.example.com/
hypertext formats expected = HTML, XHTML, SVG, etc.

现代浏览器知道每个浏览器的语义,所以当它在HTML响应中遇到文本时

<link rel="stylesheet" href="/style.css">

它将知道LINK元素代表超媒体路径,并且资源的关系是“样式表”关系的关系,它理解它具有某些效果(即重新设置主要响应的呈现)。 / p>

您的API应在其基本网址http://www.baseURL.com:8180/上提供一组指向其提供的资源的超媒体链接<a href="/fruits">Fruits</a>,任何了解HTML的客户都可以使用该链接。如果要将含义添加到这些链接,则需要提供关系。已存在list of pre-defined link relations,但如果这些都不适合您,您可以在其他公共本体中查找合适的关系,或者使用您控制的命名空间中的URI来定义自己的关系。建议使用可提供人类可读文档的可解除引用的HTTP URL。例如:

rel="http://www.baseURL.com:8180/documentation/#FruitList"

所以,直接回答你的问题,

有没有办法,如果我不知道这个API有'果实'作为资源,我可以通过某种类型的通用GET命令来解决这个问题?

您的客户需要获取API的条目URL,查看为每个链接提供的关系,并了解这意味着什么,因为它是在某处预先定义的,并且客户端知道FruitList对用户意味着什么。