Итак, я изучаю GraphQL, используя Apollo и GraphCool в iOS. Вот шаги, которые я сделал из различных учебных пособий, которые я объединил.
npmgraphcool с помощью npmapollo CLI с помощью npmtypes.graphql и package.json.pod Apollo, установленным для целиpod installschema.json)schema.json в ту же папку, что и AppDelegate.swift.package.json из папки "server" в ту же папку, что и AppDelegate.swift.До этого шага он все еще компилируется нормально, поскольку технически все это генерируется автоматически.
API.swiftAPI.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. И в Интернете я вряд ли найду кого-нибудь, у кого такая же проблема, как у меня.
Кто-нибудь может помочь? Пожалуйста, если кто-то может помочь, не пропускайте этот вопрос. По крайней мере, дайте мне несколько простых подсказок, где искать. Если вам нужно, чтобы я переписал или переформулировал свой вопрос, чтобы он стал более ясным, скажите мне это так, как вам нужно.





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