JSON RPC - для чего нужен идентификатор?

Я не понимаю, что такое идентификатор для JSON RPC. Кроме того, насколько плохо, как считается, не использовать стандарты JSON-RPC.org при разработке инструментария? Кажется, что в мире JSON-RPC существует какая-то двусмысленность.

P.S. Идентификатор, который я имею в виду, - это идентификатор здесь:

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

Ответ 1

Вам не гарантировано получить ответы в порядке, о котором вы их просили; идентификатор должен помочь вам разобраться.

Ответ 2

"id" возвращается в соответствующем объекте ответа, поэтому вы можете сопоставить один контекст с другим.

Если вы выполняете синхронные одиночные вызовы, это может не иметь смысла, но в среде с асинхронным многозвенным вызовом это жизненно важно.

Он не должен быть жестко закодирован до 1, но устанавливается уникальное значение для каждого объекта запроса, который вы генерируете из клиента.

Ответ 3

  • Чтобы сервер знал, что вы ожидаете ответа.
  • Чтобы соответствовать ответам на запросы при использовании асинхронных или пакетных вызовов.

Ответ 4

Ни один из ответов не упоминает разницу между двумя существующими версиями протокола.

JSON RPC 1.0:

Идентификатор запроса. Это может быть любого типа. Он используется для соответствия ответ с запросом, на который он отвечает.

JSON RPC 2.0:

Идентификатор, установленный клиентом, который ДОЛЖЕН содержать строку, Number или NULL, если они включены. Если он не включен, предполагается быть уведомлением. Значение SHOULD обычно не должно быть Null и Номера НЕ ДОЛЖНЫ содержать дробные части.

Таким образом, в JSON RPC 2.0 совершенно точно установить id на некоторое фиксированное значение. Но имейте в виду использование id в пакетных запросах.