具有多个对象的GraphQL:我应该将所有对象保留在单个查询中吗?

时间:2017-10-24 16:39:45

标签: graphql

我正在构建一个由几个不同对象组成的SaaS B2B应用程序。例子:

  • 用户
  • 客户
  • StockItens
  • StockLevels
  • 价目表
  • 销售
  • 返回
  • 等等...

我会有大约40个不同的对象,可以单独列出,创建,编辑和删除。

首次面对GraphQL概念,我是否应该为所有对象构建一个大型模式,如下面的示例,或者我应该将每个对象保留在自己的查询中。

query {
  viewer {
    Users {
      id
      firstName 
      lastName
      address
      city
      ...
    }
    Customers {
        id
        firstName
        lastName
        address
        city
        rating
        ...

    }
    StockItens {
        id 
        item_id
        sales {
            id
            dateTime
            qty
            unitValue
            totalValue
            ...
        }
        ...
    }
    StockLevels {
        ...
    }
    PriceList {
        ...
    }
    Sales {
        id
        dateTime
        qty
        unitValue
        totalValue
        ...
    }
    Returns {
        ...
    }
  }
}

寻找第一个选项(将所有内容保存到单个查询中)看起来很合理,因为我将使用片段来访问所需的信息,但之后我将拥有一个包含大量相互关系的庞大模式。

PLease建议该用例的最佳实践。

1 个答案:

答案 0 :(得分:0)

我建议您不要在其中添加所有需要的数据,而是使用已经指出的片段概念。

您只获取当前页面所需的数据。因此吞吐量保持最小。

e.g。 如果您有一个更新用户的页面,您只需在专门的查询中获取该用户所需的数据。查询由片段组成。 片段与页面中使用的子组件相关,例如显示用户数据的表单。 表单的片段定义了用户需要的数据,更新页面将片段与查询相结合。

// in user form component
const userFormFragments = {
  name: "UserForm",
  document: `fragment UserForm on User {
    id
    name
  }`
};

// in update user page
const userQuery = `query getUserQuery($userId: ID!) {
  getUser(userId: $userId) {
    ...${userFormFragment.name}
  }
  ${userFormFragment.document}
}`