Java 有没有一种方法可以发现RESTAPI的所有端点?

Java 有没有一种方法可以发现RESTAPI的所有端点?,java,javascript,http,facebook-graph-api,curl,Java,Javascript,Http,Facebook Graph Api,Curl,我想知道是否有可能以编程方式发现特定API的所有端点 例如,如果我使用浏览器或curl获取此URL: 我可能会得到类似这样的JSON响应: {"TwitterAPI":{ "version" : 1.1, "GET" : { "search/" : ["users", "trending"], "users/" : ["id", "handle"] } } 当然,Twitter可以选择发布或不发布这种格式。作为一个附带问题,是否有Jav

我想知道是否有可能以编程方式发现特定API的所有端点

例如,如果我使用浏览器或curl获取此URL:

我可能会得到类似这样的JSON响应:

{"TwitterAPI":{
    "version" : 1.1,
    "GET" : {
        "search/" : ["users", "trending"],
        "users/" : ["id", "handle"]
    }
}

当然,Twitter可以选择发布或不发布这种格式。作为一个附带问题,是否有Java或Javascript库可以自动映射和发布您在控制器中创建的API路由

一些RESTful API发布了一个Web应用程序描述语言资源(WADL,简而言之,发音类似于鸭子走路)。默认情况下,JAX-RS或至少Jersy webapps将在应用程序根URL/application.wadl处执行此操作。Twitter的API似乎不是其中之一。许多REST纯粹主义者认为,API应该是自描述和自发现的,只需与它交互并查看它将提供给您什么其他端点即可

没有办法在REST服务运行时以编程方式发现它们 没有标准的注册表服务

除了做一些疯狂的暴力搜索之外,没有办法找到正确的URL(更不用说正确的参数了)。因此,唯一的选择是记录API。因此,到目前为止,我看到的最佳选择是:

  • 人们也喜欢

只需知道REST API的初始入口点,您就应该能够发现需要了解的有关REST API的所有信息。这是休息的基本点之一;它应该是超媒体驱动和自我描述的。这也是最难理解的原则之一。资源的发现取决于服务器响应中的超媒体链接

早在很久以前就因为这是一个热门的新事物。以下是他提出的几点观点

REST API不能定义固定的资源名称或层次结构 客户端和服务器的明显耦合)。服务器必须有自由 控制自己的命名空间。相反,允许服务器进行指示 客户端了解如何构造适当的URI,如在HTML中完成的URI 表单和URI模板,通过在媒体中定义这些指令 类型和链接关系。[此处的失败意味着客户端 假设由于带外信息而导致的资源结构,例如 一种特定于领域的标准,其面向数据等同于 RPC的功能耦合]

输入REST API时,应事先不知道 初始URI(书签)和一组标准化的媒体类型 适用于预期受众(即预期被理解 任何可能使用API的客户机)。从那时起,所有 应用程序状态转换必须由客户端选择 服务器提供的选项存在于接收到的 用户对这些内容的操作所暗示或暗示的 陈述。可通过以下方式确定(或限制)转换: 客户对媒体类型和资源交流的了解 机制,这两种机制都可以在运行中改进(例如。, 按需编码)。[此处的故障意味着带外信息不可用 驱动交互而不是超文本。]

这实际上意味着入口点(通常使用“/”的根URI)包含到其他RESTAPI的链接。这些API将包含指向其他API的链接等等。不应该有没有链接到它的API。这意味着它是不可发现的


这里的其他答案根本是错误的,因为他们没有承认REST的最基本原则。

这取决于制作人是否做过类似于发现服务的事情。如果没有,那恐怕你不能。回答得好,谢谢你的参考!下面的WADL答案也很好,但我认为这些建议更有用。事实上,让我们暂时不回答这个问题,看看我们是否能得到更多有用的答案。你正在伤害实践和理论之间的冲突,真正的是用户总是赢的。Rest更多的是你们所说的指导原则,而不是实际的规则。人们如何才能真正看到这些链接呢?