Работа с нулевыми значениями в ответе API GraphQL

Недавно я получил задание на собеседование, где мне нужно было разработать приложение React с использованием GraphQL API. Рассматриваемый API — это API SpaceX GraphQL. В рамках задачи мне нужно было получить определенные поля, такие как название миссии, изображение патча миссии, дату запуска и статус успеха (логическое значение) для каждого запуска.

Но при запросе к API я столкнулся с проблемой, когда некоторые поля, в частности «launch_success» и «mission_patch», возвращали нулевые значения. После дальнейшего изучения я понял, что эта проблема распространяется и на другие области.

Ниже я привел пример запроса:

query Launches {
  launches {
    mission_name
    rocket {
      rocket_name
    }
    mission_id
    launch_success
  }
}

В этом запросе поле launch_success всегда возвращает нулевые значения, но это не так, поскольку когда я использовал REST API, было 80% успешных запусков. Поскольку я новичок в GraphQL, я не уверен в причинах этой проблемы и способах ее устранения.

Может ли кто-нибудь предложить какую-либо информацию о том, почему определенные поля возвращают нулевые значения, и предложить потенциальные шаги по устранению неполадок или исправления? Буду признателен за любые рекомендации!

P.S. Я уже пробовал то же самое с REST API и смог без проблем получить все значения (интервьюер предоставил оба решения, но мне нужно сделать это с помощью GraphQL)

Используемая площадка GraphQL: https://studio.apollographql.com/public/SpaceX-pxxbxen/variant/current/explorer

Я попробовал несколько стратегий для получения необходимых данных из API GraphQL, включая запросы к различным полям и использование различных структур запросов. В частности, я пробовал выполнять запросы launch_success с разных конечных точек и исследовал альтернативные поля, которые могли бы предоставить аналогичную информацию. Однако при каждой попытке поле launch_success всегда возвращало нулевые значения.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
259
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем запросе GraphQL нет ничего плохого. В GQL недопустимо, чтобы выбор любого другого поля мог повлиять на другое. Если это null, то это null с точки зрения сервера.

Я вполне уверен, что вы нашли ошибку в API SpaceX GQL. Схема GQL не объявляет это поле (или многие из них, если они вообще есть) как не допускающие значения NULL, то есть код вашего приложения должен обрабатывать, если эти поля имеют значение null. Однако то, почему оно равно нулю, если вы подтвердили существование данных другими способами, может быть проблемой только со стороны SpaceX.

Это также легко продемонстрировать, даже без очевидного наличия данных в REST API, если вы возьмете поле GQL details. Затем вы получите такие результаты, как:

{
    "details": "Engine failure at 33 seconds and loss of vehicle",
    "launch_date_utc": "2006-03-24T22:30:00.000Z",
    "launch_success": null
},

Что ясно показывает недостающие данные. Этот запуск не удался. Это соответствует действительности, поэтому разумно предположить, что существует проблема с API. В сочетании с данными о REST API это в значительной степени убедительно.

Я бы все равно создал код внешнего интерфейса для обработки всех трех возможных значений: null («Неизвестно»), true («Успех») и false («Ошибка»). Даже если он никогда не запускает последние два с текущими наборами данных. Это гарантирует, что вы выполнили свою работу, и код будет работать и обрабатывать все случаи, если ошибка будет исправлена ​​на их стороне.

Кроме того, это на самом деле дает вам возможность продемонстрировать некоторые навыки решения проблем. Я хотел бы заранее объяснить по электронной почте, что вы считаете, что это поле ошибочно равно нулю из-за проблемы с API SpaceX GQL, и что вполне может быть ошибка в API GQL (приведите все объяснения, которые вы дали). Попросите их дважды проверить то, что соответствует их пониманию, а затем предложите некоторые обходные пути, которые позволят вам выполнить задачу заранее, например, возможно, имитируя значение на данный момент, или используя водопадный вызов отдыха только для этого поля. Это демонстрирует прагматизм и активный подход.

adsy 28.03.2024 22:58

Например, вы можете создать перекрестную ссылку на один запуск (один и тот же идентификатор) из данных API REST и GQL и продемонстрировать разницу в значениях. Это то, что вы, будучи хорошим инженером, сделали бы в реальной жизни. Я буду впечатлен!

adsy 28.03.2024 22:59

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

adsy 28.03.2024 23:05

Другие вопросы по теме