Приложение N 6

к Требованиям к сетям и средствам

связи собственников или иных владельцев

технологических сетей связи, имеющих

уникальный идентификатор совокупности

средств связи и иных технических средств

в информационно-телекоммуникационной

сети "Интернет", для проведения

уполномоченными государственными

органами, осуществляющими

оперативно-разыскную деятельность

или обеспечение безопасности

Российской Федерации, в случаях,

установленных федеральными законами,

мероприятий в целях реализации

возложенных на них задач,

утвержденным приказом

Минцифры России

от 16 декабря 2025 г. N 1174

ТРЕБОВАНИЯ,
ПРЕДЪЯВЛЯЕМЫЕ К ФОРМАТУ ПЕРЕДАЧИ ДАННЫХ НА ЯЗЫКЕ GRAPHQL
ПО ПРОТОКОЛУ WEBSOCKET

1. ПТС и ПУ для передачи данных на языке GraphQL по протоколу WebSocket должны использовать протокол graphql-transport-ws.

2. Посредством ПТС должно обеспечиваться взаимодействие с ПУ по протоколу WebSocket посредством сообщений. Для кодирования сообщений применяется формат JSON.

3. Все сообщения должны содержать поле "type", определяющее тип сообщения. Сообщение в зависимости от типа также может содержать дополнительные поля:

"id" - идентификатор запроса, использующийся для последующего определения ответов ПТС и привязки их к запросам ПУ;

"payload" - дополнительные данные.

4. В любой момент времени посредством использования ПТС должна обеспечиваться возможность выполнения нескольких запросов ПУ.

5. В ПТС должен быть обеспечен автоматический разрыв соединения по протоколу WebSocket при возникновении ошибки (сбое в работе).

6. В ПТС должна поддерживаться возможность корректного завершения соединения по протоколу WebSocket с кодом 1000 и причиной закрытия "Normal Closure".

7. В ПТС должна поддерживаться возможность открытия сессии в соответствии с подпунктом 1 пункта 8 настоящего приложения к Требованиям к ПТС.

8. Посредством использования ПТС должно быть обеспечено взаимодействие с ПУ по протоколу WebSocket с использованием следующих сообщений:

1) сообщение "ConnectionInit" - направляется ПУ в адрес ПТС для открытия сессии. ПУ может передавать дополнительную информацию о сессии в поле "payload". ПТС должны получить данное сообщение в течение заданного периода времени (определяется во время внедрения ПТС и согласовывается с уполномоченными государственными органами, осуществляющими оперативно-разыскную деятельность или обеспечение безопасности Российской Федерации). Если ПУ не отправило данное сообщение в течение заданного периода времени, то ПТС должны закрыть соединение по протоколу WebSocket с кодом 4408 и причиной закрытия "Connection initialization timeout". Если ПТС получили более одного сообщения "ConnectionInit", то они должны закрыть соединение по протоколу WebSocket с кодом 4429 и причиной закрытия "Too many initialization requests".

Программный код сообщения "ConnectionInit" (поле "payload" опциональное) должен иметь следующую структуру:

{

"type": "connection_init",

"payload": "string"

};

2) сообщение "ConnectionAck" - подтверждает создание сессии и направляется ПТС в адрес ПУ в ответ на сообщение "ConnectionInit". ПТС могут передавать дополнительную информацию о сессии в поле "payload". ПУ после получения данного сообщения может отправлять запросы на языке GraphQL с помощью сообщений "Subscribe" в соответствии с подпунктом 3 пункта 8 настоящего приложения к Требованиям к ПТС.

Программный код сообщения "ConnectionAck" (поле "payload" опциональное) должен иметь следующую структуру:

{

"type": "connection_ack",

"payload": "string"

};

3) сообщение "Subscribe" - направляется ПУ в адрес ПТС с запросом на языке GraphQL в поле "query" поля "payload". Поле "id" должно содержать уникальный идентификатор запроса, формируемый ПУ. Если запрос с таким идентификатором находится на выполнении, то ПТС должны обеспечить завершение соединения по протоколу WebSocket с кодом 4409 и причиной закрытия "Subscriber for <unique-operation-id> already exists". Разрешается повторное использование идентификатора после завершения выполнения запроса на стороне ПТС. В случае, когда ПТС получил данное сообщение до отправления сообщения "ConnectionAck", ПТС должны обеспечить завершение соединения по протоколу WebSocket с кодом 4401 и причиной закрытия "Unauthorized".

Программный код сообщения "Subscribe" (поля "operationName", "variables", "extensions" опциональные) должен иметь следующую структуру:

{

"id": "<unique-operation-id>",

"type": "subscribe",

"payload": {

"operationName": "string",

"query": "string",

"variables": "string",

"extensions": "string"

}

};

4) сообщение "Next" - направляется ПТС в адрес ПУ с результатами выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" должно содержать идентификатор запроса, ранее сформированный ПУ. Поле "payload" должно содержать результаты выполнения запроса в формате, аналогичном для конечной точки "/query" согласно спецификации языка GraphQL.

Программный код сообщения "Next" должен иметь следующую структуру:

{

"id": "<unique-operation-id>",

"type": "next",

"payload": "ExecutionResult"

};

5) сообщение "Error" - направляется ПТС в адрес ПУ с информацией об ошибке в ходе выполнения запроса, ранее направленного ПУ в сообщении "Subscribe". Поле "id" должно содержать идентификатор запроса, ранее сформированный ПУ. Поле "payload" должно содержать информацию об ошибке в формате согласно спецификации языка GraphQL. После возникновения ошибки ПТС должен прекращать выполнение запроса и не направлять в сторону ПУ больше никаких сообщений.

Программный код сообщения "Error" должен иметь следующую структуру:

{

"id": "<unique-operation-id>",

"type": "error",

"payload": "GraphQLError"

};

6) сообщение "Complete" - может направляться в обоих направлениях. Поле "id" должно содержать идентификатор запроса, ранее сформированный ПУ. При завершении выполнения запроса с указанным идентификатором ПТС должны отправить в адрес ПУ сообщение "Complete". Если ранее ПТС отправили сообщение "Error", то данное сообщение не отправляется. Отправка данного сообщения от ПУ в адрес ПТС должна прервать выполнение запроса инициированного на стороне ПУ с указанным идентификатором.

Программный код сообщения "Complete" должен иметь следующую структуру:

{

"id": "<unique-operation-id>",

"type": "complete"

}.

9. Получение ПУ или ПТС иных сообщений, отличных от указанных в пункте 8 настоящего приложения к Требованиям к ПТС, должно приводить к закрытию соединения по протоколу WebSocket с кодом 4400 и причиной закрытия, содержащей описание ошибки в типе или формате сообщения.