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

к требованиям к вычислительной

мощности, используемой провайдером

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

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

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

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

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

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

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

возложенных на них задач, утвержденным

приказом Министерства цифрового

развития, связи и массовых

коммуникаций Российской Федерации

от 1 ноября 2023 г. N 935

ТРЕБОВАНИЯ,

ПРЕДЪЯВЛЯЕМЫЕ К СХЕМЕ ДАННЫХ И ВЫПОЛНЕНИЮ ЗАПРОСОВ

ОТ ПУНКТА УПРАВЛЕНИЯ

1. Данные, хранящиеся в информационной системе провайдера хостинга, должны быть описаны с помощью схемы данных на языке SDL GraphQL.

2. Схема данных должна полностью описывать данные, хранящиеся в ИС.

3. Произвольный тип данных в схеме данных (далее - тип "A") имеет связь с произвольным типом данных (далее - тип "B"), если тип "A" содержит поле типа "B" или поле, являющееся списком типа "B".

4. Произвольный тип "A" в схеме данных имеет двухстороннюю связь с произвольным типом "B", если тип "A" связан с типом "B" и тип "B" связан с типом "A".

5. Для схемы данных определяется перечень базовых типов. Базовый тип данных на языке GraphQL должен содержать информацию, которая должна быть доступна для поиска в ТС ОРМ по запросам ПУ. Перечень базовых типов отражает перечень идентифицирующих признаков объектов физического мира (в том числе, номер паспорта, номер телефона, банковские реквизиты, государственный регистрационный номер транспортного средства). Перечень базовых типов и их определения на языке GraphQL приведены в приложении N 4 к требованиям, утвержденным настоящим приказом.

6. Для схемы данных определяется перечень сервисных типов. Сервисный тип данных на языке GraphQL должен отражать информацию о схеме данных, или описывать HTTP URI для неформатированных данных, или предназначаться для получения статуса отложенных поисковых запросов или сигналов о функционировании ТС ОРМ. Перечень сервисных типов, их определения и запросы для доступа к информации на языке GraphQL приведены в приложении N 4 к требованиям, утвержденным настоящим приказом.

7. Пользовательский тип данных на языке GraphQL должен описывать данные, содержащиеся в ИС и отличные от данных, описываемых базовыми типами.

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

1) каждое поле пользовательского типа, которое отражает идентифицирующий признак объекта физического мира и будет доступно в качестве критерия поиска в ТС ОРМ по запросам ПУ, должно представляться базовым типом (или его списком);

2) поля пользовательского типа, которые представляют собой ссылки (HTTP URI) на неформатированные данные (файлы), должны представляться сервисным типом "Media", определенным в приложении N 5 к требованиям, утвержденным настоящим приказом;

3) остальные поля пользовательских типов (то есть за исключением указанных в подпунктах 1 и 2 настоящего пункта) должны описываться встроенными типами языка GraphQL или любыми другими пользовательскими типами, определенными в схеме данных;

4) для каждого пользовательского типа, имеющего хотя бы одно поле базового типа, или связанного с другим пользовательским типом, имеющим хотя бы одно поле базового типа, должны быть определены следующие объекты языка GraphQL: тип для представления результатов выполнения поисковых запросов и входной объект для задания параметров поиска (далее - входной объект);

5) тип для представления результатов выполнения поисковых запросов должен иметь следующую структуру:

Имя поля

Тип поля

Назначение поля

cursor

String

значение курсора для последнего элемента списка (поле "result") с результатами выполнения поискового запроса для данного пользовательского типа

hasNextPage

Boolean

признак наличия следующей страницы с результатами выполнения поискового запроса для данного пользовательского типа (может использоваться с любым видом постраничного получения результатов выполнения запроса)

result

список соответствующего пользовательского типа

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

Формат типа для представления результатов выполнения поисковых запросов должен быть следующим:

type {{UserTypeResult}} {

cursor: String

hasNextPage: Boolean

result: [{{UserType}}!]

},

в котором:

{{UserTypeResult}} - произвольное имя типа для представления результатов выполнения поисковых запросов,

{{UserType}} - имя пользовательского типа, для которого определен тип {{UserTypeResult}};

6) каждый входной объект для пользовательского типа должен иметь следующую структуру:

Имя поля

Тип поля

Назначение поля

and

список исходных входных объектов

для задания параметров поиска с логической функцией "И"

or

список исходных входных объектов

для задания параметров поиска с логической функцией "ИЛИ"

not

исходный входной объект

для задания параметров поиска с логической функцией "НЕ"

все имена полей пользовательского типа, представленные базовыми типами

входные объекты для базовых типов, определенные в приложении N 5 к требованиям, утвержденным настоящим приказом

для задания параметров поиска конкретных полей пользовательского типа, представленных базовыми типами

Формат входного объекта для пользовательского типа:

input {{UserTypeFilterInput}} {

and: [{{UserTypeFilterInput}}]

or: [{{UserTypeFilterInput}}]

not: {{UserTypeFilterInput}}

{{baseField1}}: {{BaseFilterInput1}}

...

{{baseFieldN}}: {{BaseFilterInputN}}

},

в котором:

{{UserTypeFiiterInput}} - произвольное имя входного объекта для пользовательского типа,

{{baseField1}...{{baseFieldN}} - поля пользовательского типа, представленные одним из базовых типов,

{{baseFilterInput1}}...{{baseFilterInputN}} - входные объекты для базовых типов, определенные в приложении N 6 к требованиям, утвержденным настоящим приказом;

7) все пользовательские типы, их поля и аргументы должны иметь описание на русском языке;

8) связь между двумя произвольными пользовательскими типами должна быть двухсторонней за исключением случаев, если один из пользовательских типов не имеет ни одного поля базового типа;

9) схема данных должна содержать все сервисные типы из перечня, определенного в приложении N 6 к настоящим требованиям.

9. Схема данных в части стандартных типов Query, Subscription (определяют доступные данные и параметры для поисковых запросов) языка GraphQL должна соответствовать следующим требованиям:

1) тип Query должен иметь поле "request" для задания поисковых запросов. Формат типа Query:

request: QueryMessage!

2) тип QueryMessage должен иметь следующую структуру:

Имя поля

Тип поля

Назначение поля

requestID

String

идентификатор запроса

offline

Boolean

признак выполнения запроса в отложенном режиме

maxPageSize

Int

максимальное количество элементов в списке с результатами выполнения поискового запроса для одной страницы, которое поддерживает ТС ОРМ

все имена пользовательских типов, имеющие хотя бы одно поле базового типа

тип для представления результатов выполнения поисковых запросов, соответствующий пользовательскому типу

задание параметров поиска и постраничной передачи результатов поиска для соответствующего пользовательского типа

Каждое поле типа QueryMessage, заданное списком пользовательского типа, должно иметь следующие аргументы:

filter - задает параметры поиска и представляется соответствующим входным объектом для данного пользовательского типа;

offset - задает начальное смещение для постраничной передачи результатов;

limit - задает максимальное количество элементов на одной странице при постраничной передаче результатов, но не более значения maxPageSize;

cursor - значение курсора при использовании курсорной постраничной передачи результатов.

Аргументы "offset" и "limit" должны использоваться для постраничной передачи результатов со смещением, аргументы limit и cursor - для курсорной постраничной передачи результатов.

Формат типа QueryMessage:

type QueryMessage {

requestID: String!

offline: Boolean!

maxPageSize: Int

{{userType1}}(filter: {{UserTypeFilterInput1}}!, offset: Int, limit:

Int, cursor: String): {{UserTypeResult1}}!

...

{{userTypeN}}(filter: {{UserTypeFilterInputN}}!, offset: Int, limit:

Int, cursor: String): {{UserTypeResultN}}!

},

в котором:

{{userType1}}...{{userTypeN}} - имена пользовательских типов, имеющих хотя бы одно поле базового типа;

{{UserTypeResult1}}...{{UserTypeResultN}} - Имена типов для представления результатов выполнения поисковых запросов, соответствующие пользовательским типам;

{{UserTypeFilterInput1}}...{{UserTypeFilterInputN}} - входные объекты, соответствующие пользовательским типам;

3) типы Query и Subscription должны также содержать все запросы, соответствующие сервисным типам, которые приведены в приложении N 5 к требованиям, утвержденным настоящим приказом.

10. На ТС ОРМ должны использоваться актуальные перечни базовых, сервисных типов и входных объектов для поиска.

11. Использование базовых, сервисных типов и входных объектов для задания параметров поиска, не приведенных в приложениях NN 4 - 6 к требованиям, утвержденным настоящим приказом, не допускается.

12. Названия всех пользовательских типов и их полей должны соответствовать следующим требованиям:

1) использование символа подчеркивания "_" в именах типов и их полей не допускается;

2) имена пользовательских типов пишутся с заглавной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово с заглавной буквы;

3) имена полей пользовательских типов пишутся со строчной буквы и могут состоять из нескольких слов, написанных слитно без пробелов, при этом каждое слово кроме первого с заглавной буквы.