【问题标题】:Design API endpoint for resource that needs to return different forms of data for different pages为需要为不同页面返回不同形式数据的资源设计 API 端点
【发布时间】:2023-02-10 15:02:32
【问题描述】:

我正在使用 prisma 与 db、嵌套关系等进行通信。

我有多个页面请求的资源。每个页面都需要来自资源的不同数据集,因此每个页面都会发送不同的查询参数。简化的例子是:一页需要价格和名称,另一页需要价格、名称和收藏。

示例查询将是

prisma.product.findMany({
  where: {
    ...(collectionName ? { collection: {
      is: {
        collectionName,
      },
    } } : {}),
    ...(productName ? { productName } : {}),
  },
  ...(select ? { // checking if its array and mapping it is omitted for the example
    select: {
      [select]: true, // no way to select fields from relation
  } } : {}),
});

但是随着我添加使用该资源的新页面,添加越来越多的过滤器和/或selects,查询变得更加复杂,如果不使用selects,页面最终会请求-接收不必要的数据。

感觉相当复杂,好像有办法让它变得更好,比如将端点拆分为多个或从前端发送整个Prisma.ProductFindManyArgs

如何降低复杂性并提高可重用性?

更新.从前端发送整个东西是个好主意,就像在 GraphQL 中所做的那样吗?我的意思是,在 GraphQL 中,您可以准确发送您想要的字段和附加数据,例如页面和每页的文档数量(用于分页)。所以我在想是否可以只发送整个对象,包含提供我需要的数据所需的所有信息(whereselectincludetakeskip、 ETC。)?

【问题讨论】:

    标签: api rest prisma api-design


    【解决方案1】:

    我建议您使用 GraphQL API,它允许客户端准确指定它想要接收的字段,从而允许进行更细粒度的查询。使用 GraphQL API 还可以提供更大的灵活性和定制化,还可以通过减少端点的数量来简化后端代码。

    【讨论】:

    • 我已经考虑过 graphql,但我没有时间从 rest 转换为 graphql。
    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    相关资源
    最近更新 更多