【问题标题】:JSON RPC - What is the "id" for?JSON RPC - 什么是“id”?
【发布时间】:2011-01-13 17:24:02
【问题描述】:

我不明白 ID 在 JSON RPC 中的用途。此外,在开发工具包时不使用 JSON-RPC.org 的标准有多糟糕? JSON-RPC 世界中似乎存在一些歧义。

附:我指的ID是这里的id:

{"params":["Hello","World"],"method":"hello_world","id":1}

【问题讨论】:

    标签: json json-rpc


    【解决方案1】:

    不能保证您会按照您要求的顺序获得答案; id 是为了帮你解决这个问题。

    【讨论】:

    • 哦,在异步调用的情况下。这是有道理的。
    • 如果 JSON-RPC over HTTP 会怎样? ID 似乎没用,因为 HTTP 是由请求-响应模式设计的。
    • @JianWeihang 该规范与传输无关。所以是的,它对只有一个 JSON-RPC 请求的 HTTP 请求没有多大用处。但如果是多次调用 JSON-RPC 请求,在单个 HTTP 请求中,ID 将用于正确映射响应,因为它们也将全部出现在单个 HTTP 响应中。
    【解决方案2】:

    “id”在相应的响应对象中返回,因此您可以将一个上下文映射到另一个上下文。

    如果您要进行同步单次调用,这可能没有意义,但在异步多未决调用环境中,它是至关重要的。

    不应硬编码为 1,而是为您从客户端生成的每个请求对象设置一个唯一值。

    【讨论】:

      【解决方案3】:

      没有一个答案提到协议的两个现有版本之间的区别。

      JSON RPC 1.0:

      请求 ID。这可以是任何类型。它用于匹配 响应它正在回复的请求。

      JSON RPC 2.0:

      由客户端建立的标识符,必须包含一个字符串, 数字或 NULL 值(如果包含)。如果不包括在内,则假定为 成为通知。该值通常不应为 Null 并且 数字不应包含小数部分。

      因此,在 JSON RPC 2.0 中将 id 设置为某个固定值是非常好的。但要注意在批处理请求中使用 id。

      【讨论】:

      • 超级有帮助,感谢您指出这一点!
      【解决方案4】:
      1. 表示您正在等待回复。 (没有它,应该没有响应。)
      2. 在使用异步或batch calls 时匹配对请求的响应。

      【讨论】:

        【解决方案5】:

        您可以阅读 JSON RPC 文档https://www.jsonrpc.org/specification。在“4 Request object”中,id参数解释清楚了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-06-02
          • 2018-10-27
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 2012-07-01
          • 2020-03-05
          • 2014-01-06
          相关资源
          最近更新 更多