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



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

  • 用户
  • 客户
  • 库存Itens
  • 库存水平
  • 价目表
  • 销售
  • 返回
  • 等。。。

我将有大约 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 {
        ...
    }
  }
}

寻找第一个选项(将所有内容保留在一个查询中)被认为是合乎逻辑的,因为我将使用片段来访问所需的信息,但随后我将拥有一个包含大量相互关系的巨大模式。

请提供该用例的最佳实践建议。

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

并且您仅获取当前页面所需的数据。因此,吞吐量保持在最低水平。

例如如果您有一个更新用户的页面,您只需在专用查询中获取该用户的所需数据。查询由片段组成。片段与页面中使用的子组件相关,例如显示用户数据的表单。表单片段定义它需要从用户获得的数据,更新页面将这些片段合并到查询中。

// 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}
}`

最新更新