Я полагаю, что ваш второй вариант - лучший, но вы могли бы сделать что-то вроде этого.
type Query {
user(id: ID, username: String): User
}
Если параметры не требуются, ваш распознаватель может использовать некоторую логику, чтобы определить, должен ли он основываться на пользователях.на идентификатор или имя пользователя.
if (args.id) {
return getUserById(args.id)
} else {
return getUserByUsername(args.username)
}
Однако по причинам, которые были упомянуты в этом выступлении https://youtu.be/pJamhW2xPYw?t=750 (может быть, примерно в 12:30), я считаю, что ваш второй вариант - лучший выбор дизайна.Надеюсь, это поможет!