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

Итак, я изучаю 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: невозможно запросить поле «телефон» типа «Пользователь».

Хорошо, достаточно справедливо. Я не добавил поле 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. И в Интернете я вряд ли смогу найти кого-то, кто сталкивался бы с такой же проблемой, как я.

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

1 Ответ

0 голосов
/ 09 января 2019

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

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

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

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

...