GraphQL介绍-2 Mutation,input

GraphQL 介绍-2

上一篇提到了type和field的一些基础介绍,也有说明了如何定义一个query的方法.本篇将会针对mutation进行说明名

Mutation

Mutation是什么?

还记得上一篇文章中有提到在查询时Type Name为Query,除此之外在使用新增,更新和删除时的Type Name一律皆为Mutation

如和使用Mutation?

想像一下在传统的RESTful在进行新增和更新时,在前端是否会将大量的资讯(栏位)传到后端,那么在GraphQL这边我们应该怎么做?

create

先来看create时会发生什么事情

type Meal {  id: ID!  itemName: String!  price: Int!  isStopSelling: Boolean!}type Mutation {  createMeal(    itemName: String!    price: Int!    isStopSelling: Boolean!  ): Boolean!

http://img2.58codes.com/2024/20144476yRTvIv3Cxn.png

update

从图片中可以看到,我们成功的定义了一个createMeal的方法,我们可以再来看一下update的案例

type Meal {  id: ID!  itemName: String!  price: Int!  isStopSelling: Boolean!}type Mutation {  updateMeal(    itemName: String!    price: Int!    isStopSelling: Boolean!    id: ID!  ): Boolean!

http://img2.58codes.com/2024/20144476ylBfbFMiQf.png
会发现到其实create和update的差异性除了id之外都相同,如果今天前端的栏位多了一个栏位:特价(specialOffer),这个时候可能就要"分别"去createMeal和updateMeal新增这个栏位,虽然看起来好像是一件小事情,但还是可能还是会有少调整到的问题发生因此我们可以使用"Input"帮我们包装资料

Input

input是属于type Declaration里面的另一种关键字,用途就是目前的情境,把一些需要的资料打包起来,一样透过!来定义该资料是否为必填

# Typestype Meal {  id: ID!  itemName: String!  price: Int!  isStopSelling: Boolean!}# inputinput MealInput {  itemName: String!  price: Int!  isStopSelling: Boolean!}type Mutation {  createMeal(input: MealInput!): Boolean!  updateMeal(input: MealInput!, id: ID!): Boolean!

可以看到在这样的状况下,不论我们是要新增或是减少栏位,都只要调整MealInput就可以完成了,不过使用时仍然需要注意是否create和update的传入资料真的完全相同(包含是否为必填),这些还是要依照前端的逻辑来进行处理,若真的不一样时,可能还是得把MealInput拆分为CreateMealInput和updateMealInput来分别管理

delete

最后再来说一下蛮单纯的删除

# Typestype Meal {  id: ID!  itemName: String!  price: Int!  isStopSelling: Boolean!}type Mutation {  deleteMeal(id: ID!): Boolean!}

其实和RESTful的概念很类似,通常也是传一个id给后端而已

小结:说到这边已经了解了怎么定义一个Type(Meal),还有如何使用Query和Mutation来定义CRUD.此外,在新增和更新时若有相同的栏位可以透过"input"将其包装起来

大概还会有两篇会继续介绍一些GraphQL,虽然会是一些实用性可能没那么高的部分,但还是想完整的分享给大家,如果想了解实作的读者们,可能还得再等等

以上若有错误,还请不吝指教.谢谢

下一篇 GraphQL-Aliases,Fragments,Operation Name


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章