GraphQL fragments
для запросов, а не для определения схемы.
Когда я начал изучать GraphQL, меня это тоже раздражало, потому что я все еще думал RESTful. В большинстве случаев, имеющих свободу, чтобы установить определенные поля ненулевыми или удалить их полностью из типа ввода / вывода имеет неоценимое значение.
, например
input CreatePersonInput {
name: String!
slug: String
address: String
}
type Person {
id: ID! # Autogenerated on the server
name: String!
slug: String! # Will always exist, either user provided or computed
# address: String # Omitted for security reasons
}
Поначалу может показаться, что в коде много лишнего, но гибкость, которую вы получаете по сравнению со схемами, основанными на ресурсах, того стоит для долгосрочных проектов. Я видел, как это помогло десятки раз.
Вы также должны учитывать behavior
/ task-based
мутации над resource
или " анемичные мутации "
Я настоятельно рекомендую узнать о толстых запросах и прочитать о спецификации реле. Даже если вы не захотите использовать Relay на клиенте, следование некоторым их правилам действительно поможет устранить распространенные заблуждения относительно GraphQL.