RFC: 3920
Оригинал: Extensible Messaging and Presence Protocol (XMPP): Core
Другие версии: RFC 6120
Категория: Предложенный стандарт
Дата публикации:
Автор:
Перевод: Семенов Юрий Алексеевич

9.2.3. Семантика IQ

Info/Query, или IQ, представляет собой механизм запросов-откликов, сходный в некотором роде с [HTTP]. Семантика IQ делает возможными для объекта отправку запросов и получение откликов другого объекта. Информационное содержание запроса и отклика определяется декларацией пространства имен дочернего объекта IQ-элемента, а диалог отслеживается запрашивающим объектом с помощью атрибута 'id'. Таким образом, за стандартным обменом структурированными данными, такими как get/result или set/result следует IQ-диалог (хотя в отклике на запрос при определенных условиях может быть прислано сообщение об ошибке):

Requesting                 Responding
  Entity                     Entity
----------                 ----------
    |                           |
    | <iq type='get' id='1'>    |
    | ------------------------> |
    |                           |
    | <iq type='result' id='1'> |
    | <------------------------ |
    |                           |
    | <iq type='set' id='2'>    |
    | ------------------------> |
    |                           |
    | <iq type='error' id='2'>  |
    | <------------------------ |
    |                           |

Для того чтобы усилить данную семантику, применены следующие правила:

  1. Для IQ-строф необходим атрибут 'id'.

  2. Для IQ-строф необходим атрибут 'type'. Значение должно быть из числа перечисленных ниже.

    • get
    • строфа является запросом информации или требований.
    • set
    • строфа предоставляет необходимые данные, устанавливает новые значения или замещает существующие величины.
    • result
    • строфа является откликом на успешный запрос get или set.
    • error
    • произошла ошибка, связанная с обработкой или доставкой выданной перед этим строфы (get или set). (смотри "Строфы ошибок" (раздел 9)).
  3. Объект, который получает IQ-запрос типа "get" или "set" должен ответит IQ-откликом типа "result" или "error" (отклик должен сохранить атрибут 'id' запроса).

  4. Объект, который получает строфу типа "result" или "error" не должен откликаться на строфу посылкой следующего IQ-отклика типа "result" или "error"; однако, как показано выше, запрашивающий объект может послать еще один запрос (например, IQ типа "set" для того чтобы предоставить нужную информацию, выявленную в результате обмена get/result).

  5. IQ-строфа типа "get" или "set" должна содержать один и только один дочерний элемент, который специфицирует семантику конкретного запроса или отклика.

  6. IQ-строфа типа "result" должна содержать нуль или один дочерний элемент.

  7. IQ-строфа типа "error" должна содержать дочерний элемент, содержащийся в соответствующем "get" или "set" и должна включать в себя дочерний элемент <error/>. Подробности смотри в главе "ошибки строф" (раздел 9).

2007 - 2018 © Русские переводы RFC, IETF, ISOC.