Представим, что у меня есть мутация createPost, которая вставляет новый пост. В типичном приложении эта мутация может:
Post.Я бы хотел реализовать средний сценарий, при котором мутация проходит успешно (возвращается Post); но также каким-то образом возвращает предупреждение пользователю (например, Your post is similar to post XYZ или подобное).
Что было бы хорошим шаблоном GraphQL для реализации этого? Добавление поля warning к типу Post кажется немного странным, но опять же, я не уверен, как вернуть и Post, и Warning в одной и той же мутации? Любые идеи?
(Обратите внимание, что я использую этот сценарий в качестве примера, меня интересует общая схема возврата дополнительных данных после мутации, а не нахождение похожих сообщений конкретно)


Все мои мутации возвращают тип полезной нагрузки упаковки, а не один тип значения (например, Post в вашем случае), я также никогда не добавляю GraphQL, если это не настоящая системная ошибка - если это следствие ввода пользователя или иное ожидаемый случай, я моделирую его в возвращаемом типе.
Возврат полезной нагрузки упаковки обычно считается лучшей практикой, потому что а) ваша мутация должна возвращать точки входа для все в графике, которые могли измениться (а не только новый пост), и б) это дает вам легкую возможность добавлять новые поля в возвращаемый тип позже.
Помните, что мутация - это, по сути, функция, которая принимает некоторые входные данные и текущий график и возвращает новый график. Обычно ошибочно думать о REST-подобных операциях CRUD.
type CreatePostError = {
// Whatever you want
}
type CreatePostSuccess = {
post: Post!
warning: String
}
union CreatePostPayload = CreatePostSuccess | CreatePostError
mutation {
// Other mutations
createPost(/* args /*): CreatePostPayload
}
@AndrewIngram не будет работать, пока клиент запрашивает предупреждение. Я обнаружил, что этот пост ищет способ, возможно, вернуть некоторые предупреждающие сообщения, такие как скоро устаревшие функции и т. д.
В этом есть большой смысл, и если поспрашивать, это действительно кажется наилучшей практикой консенсуса. Спасибо!