Как внести изменения в схему graphQL дальше, чем было создано при настройке?

Итак, я изучаю GraphQL, используя Apollo и GraphCool в iOS. Вот шаги, которые я сделал из различных учебных пособий, которые я объединил.

  • Установить npm
  • Установите graphcool с помощью npm
  • Установите apollo CLI с помощью npm
  • Создать новый проект в Xcode
  • Инициируйте новую службу graphcool под названием «сервер» в папке проекта, которая создала несколько файлов, включая types.graphql и package.json.
  • Разверните «серверную» службу graphcool и получите конечную точку graphql.
  • Создайте pod-файл с pod Apollo, установленным для цели
  • У pod install
  • Откройте рабочее пространство Xcode, созданное при установке cocoapod.
  • Добавить сценарий запуска apollo на этапе сборки
  • Поместите этап сценария запуска apollo над этапом компиляции сценария
  • Скачать схему apollo (schema.json)
  • Поместите schema.json в ту же папку, что и AppDelegate.swift.
  • Скопируйте package.json из папки "server" в ту же папку, что и AppDelegate.swift.
  • Скомпилируйте приложение

До этого шага он все еще компилируется нормально, поскольку технически все это генерируется автоматически.

  • Создается Apollo API.swift
  • Добавить API.swift в проект

На автоматически сгенерированном types.graphql у меня есть тип User с элементами id, name и dateOfBirth.

type User @model {
  id: ID! @isUnique
  name: String
  dateOfBirth: DateTime
}

Итак, я создал еще один файл под названием User.graphql с таким содержимым:

query AllUsers {
  allUsers {
    id
    name
  }
}

А затем скомпилируйте приложение. До этого шага он все еще работает нормально.

Итак, теперь я экспериментирую, добавляя новое поле telephone на User.graphql.

query AllUsers {
  allUsers {
    id
    name
    telephone
  }
}

А затем скомпилируйте. На этом этапе Xcode начинает выдавать ошибку:

/User.graphql:5: Cannot query field "telephone" on type "User".

Хорошо, достаточно честно. Я не добавил поле telephone на types.graphql, поэтому Xcode протестует. Итак, я перехожу к types.graphql и добавляю telephone к типу User.

type User @model {
  id: ID! @isUnique
  name: String
  dateOfBirth: DateTime
  telephone: String
}

После этого я также убедился, что не забыл повторно развернуть изменения в graphcool с помощью graphcool deploy.

А потом перекомпилирую. Xcode по-прежнему выдает ошибку, что он не может запросить поле «телефон» типа «Пользователь».

Итак, вопрос: как я распространял изменения из types.graphql, которые я просто добавляю к типу User?

Я попытался удалить API.swift, а затем перекомпилировать. Но я все равно получаю ту же ошибку. И API.swift теперь даже не создается, если процесс компиляции был остановлен из-за ошибок.

У меня такое чувство, что решение очень простое, но я застрял в нем несколько дней и не могу найти никакого решения. Я не нашел учебника, в котором обсуждалась бы эта проблема. В этих руководствах предполагается, что вы вносите изменения в types.graphql, и Xcode автоматически поймет это при интерпретации других файлов graphql. И в Интернете я вряд ли найду кого-нибудь, у кого такая же проблема, как у меня.

Кто-нибудь может помочь? Пожалуйста, если кто-то может помочь, не пропускайте этот вопрос. По крайней мере, дайте мне несколько простых подсказок, где искать. Если вам нужно, чтобы я переписал или переформулировал свой вопрос, чтобы он стал более ясным, скажите мне это так, как вам нужно.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
401
1

Ответы 1

Наконец-то получил ответ.

Ответ действительно прост:

После повторного развертывания graphcool, чтобы сервер теперь использовал новые типы данных, повторная загрузкасхема (schema.json) и замените старый.

Ни один учебник для начинающих никогда не объясняет важность schema.json. На самом деле это похоже на «руководство по API», в котором хранятся такие вещи, как то, какие объекты вы можете запрашивать с сервера и каковы его элементы. Фактически схема для меня - это «перевод» модели в types.graphql (да и из других файлов graphql тоже). Надеюсь, что другие люди, которые спотыкались, как я, найдут это и быстрее открепятся.

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