nepster-web
@nepster-web

Как получить список запрошенных полей в GraphQL?

Работаю вот с этой библиотекой: https://github.com/webonyx/graphql-php, а точнее учусь с ней работать.

Организовал небольшой пример:

Запрос
{
    Record(id: "7", alias: "test") {
        id,
        alias
    }
}


Схема
...
        $contentType = new ObjectType([
            'name' => 'Content',
            'description' => 'Информационная сущность.',
            'fields' => [
                'id' => [
                    'type' => new NonNull(Type::string()),
                    'description' => 'Уникальный идентификатор',
                ],
                'alias' => [
                    'type' => Type::string(),
                    'description' => 'Альтернативное уникальное именование',
                ],
                'visible' => [
                    'type' => Type::boolean(),
                    'description' => 'Статус отображения',
                ],
                ...
            ],
        ]);

        $queryType = new ObjectType([
            'name' => 'Query',
            'fields' => [
                'Record' => [
                    'type' => $contentType,
                    'args' => [
                        'id' => Type::string(),
                        'alias' => Type::string(),
                    ],
                    'resolve' => function ($root, $args) {
                        return [
                            'id' => '1',
                            'alias' => 'alias',
                            'visible' => true,
                            'title' => 'Заголовок',
                            'short_text' => 'Короткое описание',
                            'full_text' => 'Подробное описание',
                            'secret' => 'Секрет',
                        ];
                    },
                ],
            ],
        ]);
...


Все работает, все хорошо. Однако, как я понял в 'resolve' я должен сделать запрос на получение данных, это можно увидеть в тестах: https://github.com/webonyx/graphql-php/blob/master...

Все-бы хорошо, но если клиент запрашивает, к примеру, только id и alias, то мне нет необходимости доставать все данные включая реляции и тп. Я понимаю, что при выводе они показаны не будут, однако запрос на них все-равно пойдет. Было бы не плохо получить список полей (id, alias), которые я запрашиваю в 'resolve', чтобы построить оптимальный запрос.

Подскажите пожалуйста как это можно сделать?

П.С. Интересует, что-то такое:

$queryType = new ObjectType([
            'name' => 'Query',
            'fields' => [
                'Record' => [
                    'type' => $contentType,
                    'args' => [
                        'id' => Type::string(),
                        'alias' => Type::string(),
                    ],
                    'resolve' => function ($root, $args) {
                          // тут получаем список запрашиваемых полей для Record. В нашем случае id и alias 
                          // формируем оптимальный запрос
                    },
                ],
            ],
        ]);
  • Вопрос задан
  • 520 просмотров
Решения вопроса 1
nepster-web
@nepster-web Автор вопроса
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы