现在,当您编写 Web 服务时,您可以毫无疑问地确定 REST 将是您的第一选择,也可能是您唯一的选择。有时您只需要快速构建一些类似 RPC 的东西,它可以通过简单的 HTTP 调用来调用,并像街区里所有酷孩子一样使用 JSON。输入 JSON-RPC 。
JSON-RPC
由于用于实现它的一些标准,RPC 名声不好。大多数开发人员在面对 WSDL 和 SOAP 信封时都会不寒而栗。然而,RPC 仍然有很多用例,例如在业务前端和专用后端之间进行远程处理。大多数 Spring 用户都熟悉它提供的远程处理功能,包括 HTTP 调用(使用 Java 序列化)、JMS 和普通的旧式 RMI。在这些情况下,JSON-RPC 可以成为非常好的替代品,并提供一种仅使用浏览器测试和调用 API 的简单方法。
JSON-RPC 是官方标准,现在是 2.0 版本。它使用 JSON 有效负载来定义 RPC 调用的请求和响应。标准的 JSON-RPC 调用如下所示:
|
使用 JSON-RPC,您可以选择每个服务有一个专用端点或单个端点,通过在您的方法名称前加上服务标识符来区分服务器级别的服务。
响应要么是调用的结果,要么是调用失败时返回错误信息的结构。
在 Java 中使用 JSON-RPC
那里有几个 JSON-RPC 库。但是,正如我发现的那样,实际上只有一个值得一看,特别是如果您使用的是 Spring: jsonrpc4j 。它使用 Jackson 提供 POJO 和 JSON 之间的映射,因此可以轻松扩展以支持大量 Java 库,例如对 Joda Time 和新 Money API 的序列化支持。
使用 jsonrpc4j 将服务公开为 JSON 服务非常容易。我将为您提供在 Spring Boot 中公开服务的基本设置,但您可以在项目文档中找到更多信息。
例如,假设我们有一个服务需要公开,如下所示:
|
要使用 Spring Boot 将此服务公开给 JSON-RPC,这是使用 jsonrpc4j 所需的配置:
|
就是这样。启动您的 Boot 应用程序并执行以下
curl
命令:
|
然后您应该会收到以下响应:
|
这就是使用 Spring Boot 公开 JSON-RPC 方法的全部内容。非常简单,非常快速,非常强大。就个人而言,我非常喜欢 JSON-RPC API 供内部使用,因为它的学习曲线很小。虽然它绝对不是 REST,但它确实允许您通过具有 JSON 数据结构的 HTTP 接口快速公开服务。 JSON-RPC API 可以很好地补充您的 REST API。毫无疑问,REST API 是外部 Web 服务的首选,但对于内部通信或内部 API,JSON-RPC 可以提供一种快速的外部化服务替代方案,而不必担心将所有内容映射到 RESTful 资源。