Я согласен с ответом Дэвида, но просто для того, чтобы предложить другую точку зрения, есть, что сказать, чтобы не допускать пользовательских полей из типов, которые в противном случае не являются.Существует еще одна альтернатива, которая заключается в перемещении таких полей в запросе пользователя или средства просмотра, который уже возвращает данные, относящиеся к вошедшему в систему пользователю.Например, у вас может быть
type User {
id: ID!
username: String!
likedPosts: [Post!]!
# or better yet
likedPostIds: [ID!]!
}
Конечно, недостатком этого подхода является то, что ваш клиент должен быть достаточно "умным", чтобы использовать вышеприведенное, чтобы потом определить, понравился ли вам пост, что добавляет сложностивнешний интерфейс.
Положительным моментом является то, что если вы выполняете выход из системы или переключаете пользователей, вам нужно только повторно выполнить один запрос - вам не нужно удалять весь кэш, потому что он заполнен пользователем.конкретные данные, которые теперь необходимо будет обновить.
Такой подход также может способствовать повышению производительности.Любое реляционное поле, будь то для конкретного пользователя или нет, будет сопряжено с дополнительными расходами.При таком подходе ваш запрос на вход в систему может быть раздутым и медленным, но любые последующие запросы будут выполняться намного быстрее.По мере роста ваших данных как в плане широты, так и глубины эти приросты производительности могут быть значительными.