首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复合查询

复合查询
EN

Stack Overflow用户
提问于 2019-07-25 05:48:57
回答 1查看 26关注 0票数 0

我有一个接受自定义查询的RESTful服务,如下所示:

代码语言:javascript
复制
/entities/User?actions=

{
  "$link": {
    "entityType": "Manager",
    "entity": {
      "name": "John Smith"
    },
    "linkName": "managers",
    "backLinkName": "account",
    "$set": {
      "propertyName": "aclWrite",
      "propertyValue": {
        "$ref": {
          "propertyName": "entityId"
        }
      }
    }
  }
}

这仅仅意味着:

  • 创建类型为User的新实体
  • 使用字段名创建一个新的Manager类型实体,通过链接名称“Manager”将要创建的用户链接到此Manager
  • 然后用链接名"account“将要创建的Manager实体反向链接到用户,并将Manager实体设置为将创建的用户ID写入ACL (访问控制列表)。

我创建了这个查询结构,因为我找不到任何合适的查询语言来支持这样的操作/过程。

这里的问题是,是否有任何查询语言可以支持这样的复合操作/过程,或者GraphQL是否能够处理这种复合操作/过程?

EN

回答 1

Stack Overflow用户

发布于 2019-07-25 11:49:12

作为一种规范,GraphQL并不关心您的模式定义了哪些字段,这些字段采用了哪些参数,或者您的字段解析器对这些参数做了什么。因此,完全可以设计一个模式,让客户端组成一个等效的突变:

代码语言:javascript
复制
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游乐场这样的IDE,允许您使用自动完成编写查询也是一个很大的好处。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57195116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档