[英]Why can't I submit data in a query, and get data in a mutation in GraphQL?
我通讀了graphql的所有文檔和至少4個博客,解釋了graphql的查詢和突變概念,但是在這些資源中我都沒有發現為什么我們必須使用查詢來獲取數據,以及為什么必須使用變異提交數據?
觀察他們的方案,它們在描述根查詢/突變,然后定義類型+解析器方面看起來非常相似。 查詢和變異都是以這種方式編寫的。
當組成看起來非常相似時,為什么不能使用突變獲取數據或使用查詢來提交數據呢?
查詢 :
const RootQuery = new GraphQLObjectType({
name: 'Root',
fields: () => ({
viewer: {
type: Viewer,
resolve: () => getViewer()
}
})
});
變異 :
var MutationType = new GraphQLObjectType({
name: 'ArticleGraph Mutations',
description: 'These are the things we can change',
fields: () => ({
deleteArticle: {
type: ArticleType,
description: 'Delete an article with id and return the article that was deleted.',
args: {
id: { type: new GraphQLNonNull(GraphQLInt) }
},
resolve: (value, { id }) => {
return ArticleServices.delete(id);
}
}
}),
});
您可以將所有變異內容放在查詢之后,就像您可以在RESTful框架中將每個端點實現為GET
。 沒什么能阻止你的。
但是在非graphql系統中使用GET
, POST
和其他HTTP動詞的原因也適用於此。 在冪等的“獲取一些數據”操作與副作用“更改某些內容”操作之間划一條鮮紅的線非常有用。
同樣從實際的角度來看,graphql系統將應用程序的整個表面積組合到單個端點中。 它不會是最大的開發者的人體工程學設計的任意混合read
和write
東西。 一些標記需要發生。
而且,也許最重要的是,這就是Facebook選擇實施的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.