我有一个RESTful服务,可以接受自定义查询,如下所示:
/entities/User?actions=
{
"$link": {
"entityType": "Manager",
"entity": {
"name": "John Smith"
},
"linkName": "managers",
"backLinkName": "account",
"$set": {
"propertyName": "aclWrite",
"propertyValue": {
"$ref": {
"propertyName": "entityId"
}
}
}
}
}
这只是意味着:
之所以创建此查询结构,是因为我找不到任何似乎可以支持此类操作/过程的查询语言。
这里的问题是,是否有任何查询语言可以支持这种复合操作/过程,或者GraphQL可以处理这种复合语言?
答案 0 :(得分:1)
作为一个规范,GraphQL不在乎您的模式定义哪些字段,这些字段采用哪些参数或您的字段解析器使用这些参数做什么。因此,设计一种模式可以让客户端组成一个等效的突变是完全可行的:
mutation {
link(
entityType: "Manager"
entity: {
name: "John Smith"
}
linkName: "managers"
backLinkName: "account"
set: {
propertyName: "aclWrite"
propertyValue: {
ref: {
propertyName: "entityId"
}
}
}
) {
# some fields here to return in the response
}
}
GraphQL不支持对同一查询内其他节点的引用,因此您可能仍需要一个输入与您现有API相同的突变。也就是说,由于请求验证,使用GraphQL可能仍然是更可取的,对于这样的复杂请求,这尤为重要。拥有GraphiQL或GraphQL Playground之类的IDE允许您使用自动完成功能编写查询也是一大优势。