GraphQL Mutation:如何使用动态参数

阅读时长 6 分钟读完

GraphQL是一种查询语言,它允许客户端定义查询的数据形式。在GraphQL中,通过Mutation可以实现对服务端资源进行创造、修改、删除等操作。对于需要动态参数的Mutation,我们需要对Mutation的输入类型进行定义,以达到传入参数的目的。

Mutation基础

Mutation和Query很像,它们都需要一个操作类型和一个操作名称。

上面这个例子,Mutation操作的名称是"createTodo",操作类型是"mutation"。而且它传递了一个input类型作为参数,里面包括了title和description属性。

在服务端,定义一个mutation类似下面这样:

动态参数传递

当我们需要更加灵活地传递参数,我们需要将input类型编程自定义的GraphQL类型,并且需要添加自己的字段定义。例如下面这个例子:

-- -------------------- ---- -------
---- --------- -
  ------ -------
  ------------ -------
  ---------- --------
  -------- -----
-

---- -------- -
  ----------------- ------------------ -----
-

----- --------------- -
  ---------- ----------
-
展开代码

这个例子中,我们定义了TodoInput类型,用于描述一个Todo的详细信息。同时,我们还定义了Mutation操作,名称是"createTodo",并且输入参数CreateTodoInput包含了一个todoInput字段,它是由TodoInput类型定义的。

客户端可以这样请求:

我们可以看到,客户端通过传递CreateTodoInput类型来实现了对于动态参数的传递,而且传递的参数是一个对象。

动态参数的指导

上面的例子是一个简单的示例,但是在实际应用中,我们往往需要更加复杂的参数传递方式,例如分页、排序和过滤等操作,这些都需要我们进行合理的设计。

在定义动态参数时,我们需要考虑以下几个方面:

1. 参数名称

参数名称需要符合命名规范,能够清晰明了的表达参数的含义。如果需要传递多个参数,可以采用对象的形式进行传递,这样既清晰又能够避免参数命名冲突的问题。

2. 参数类型

参数类型需要定义清楚,在客户端和服务端之间需要保持一致。对于复杂的参数,可以定义为自定义的类型,这样方便进行参数的复用和维护。

3. 参数说明

参数说明应当清晰明了,对于必填项和可选项应当进行明确的说明。如果需要传递多个参数,可以对每个参数进行说明。

4. 参数限制

对于参数的限制应当明确,例如字符串长度、数据类型和数值范围等。避免非法数据的传递和处理,从而提高程序的健壮性和安全性。

示例代码

下面是一个复杂参数传递的示例:

-- -------------------- ---- -------
---- --------- -
  ------ -------
  ------------ -------
  ---------- --------
  -------- -----
  --------- ---------
-

---- -------- -
  ----
  ------
  ---
-

---- ----- -
  ----------- ----
  --------- ---------
  ------ ------------
-

---- -------- -
  ------- ---
  ----- -----
-

---- ---- -
  --- ---
  ------ -------
  ------------ -------
  ---------- --------
  -------- -----
  --------- ---------
-

---- ----- -
  ------------ ---- ------ ------- ----- ---- ------- ------- ---------- ------- ---------- ------- -------- ---------------- ------
-

---- -------- -
  ----------------- ------------------ -----
-

----- ----------- -
  ------ -------
  --------- ---------------
  ------ -------
-

---- -------------- -
  ------
  ---------
  ------------
  --
-

----- --------------- -
  ---------- ----------
-
展开代码

这个示例中,我们定义了一个Todo类型和一个Todos类型,其中Todo包含了title、description、completed、dueDate、priority等字段。而且我们定义了一个CreateTodoInput类型,它的输入参数包含了一个todoInput字段,它类型是自定义的TodoInput类型。在创建Todo时,我们需要为它传递title、description、completed、dueDate、priority等动态参数。

对于查询Todo列表,我们定义了一个todos操作,它包含了分页、排序和过滤等参数。其中,filters参数是一个数组类型,包含了多个FilterInput类型的参数。

在使用Mutation操作时,我们可以这样请求:

-- -------------------- ---- -------
-------- ---------- -
  ----------------- -
    ---------- -
      ------ ------- ------- 
      ------------ ------- ------------- 
      ---------- ------ 
      -------- ------------- 
      --------- ----
    -
  -- -
    --
    -----
    -----------
  -
-
展开代码

结语

动态参数传递是GraphQL的一个重要特性,在应用开发中具有广泛的应用。在设计参数类型时,需要充分考虑应用的复杂度和灵活性,从而实现良好的可维护性和扩展性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67c41ad56e1fc40e36cf3ce6

纠错
反馈

纠错反馈