GraphQL突变,在一个请求中接受动态大小和常用标量类型的数组

问题描述:

我需要能够创建一个用户并添加它最喜欢的电影(引用Movies集合的对象数组以及他的个人评级每个电影)在一个单一的请求。GraphQL突变,在一个请求中接受动态大小和常用标量类型的数组

的东西看起来是这样的(伪),其

var exSchema = ` 
type Mutation { 
    addUser(
     name: String! 
     favMovies: [{ movie: String! #ref to movies coll 
         personal_rating: Int! # this is different for every movie 
        }] 
    ) : User 
} 
... 
` 

什么是在单个请求这样做的graphql方式?我知道我可以通过多个突变/请求获得结果,但是我希望能够一次完成。

+1

在具有'name'和'favMovies'的架构上定义一个[input type](http://graphql.org/learn/schema/#input-types)。让'addUser()'把这个类型的一个实例作为它的参数。 AFAIK,列表字段对输入类型有效。 – CommonsWare

+0

是的,我必须尝试一下,我正在寻找一个更好的例子,虽然 – octohedron

你可以传递一个数组这样

var MovieSchema = ` 
    type Movie { 
    name: String 
    } 
    input MovieInput { 
    name: String 
    } 
    mutation { 
    addMovies(movies: [MovieInput]): [Movie] 
    } 
` 

然后在你的基因突变,你可以通过像

mutation { 
    addMovies(movies: [{name: 'name1'}, {name: 'name2'}]) { 
    name 
    } 
} 

没有测试代码中的数组,但你的想法

+1

这将是如此酷,但当我更改'电影:字符串'到'电影:[MovieInput]'graphql抛出*错误:期望的输入类型*当然在此之前,我已经声明'类型MovieInput ' –

+0

对不起,它是'输入MovieInput',更新 – octohedron

+1

@octohedron非常感谢!我一直在试图弄清楚这一点。 – Woppi

将它们作为JSON字符串传递。我就是做这个的。

+0

@Gazta我有同样的问题,你有没有找到一种方式来传递JSON数组作为一个字符串?你是如何逃脱它的? –

+0

@EdmondTamas添加了解决方案 – octohedron