CMS Strapi - 部分模型数据的响应

CMS Strapi - response with partial model data

我有一个网页,我想在该网页上展示一组客户的文章。一篇文章由 - 标题作者简短描述文章组成body。在主页上,我想以较短的形式显示所有可用的文章,仅包括 TitleShort description.

当我在 Strapi 的后端 collection 创建文章(具有上述字段)时,获取所有文章(通过 GET 请求)涉及获取所有文章的数据(Title作者简短描述文章的body),而在主页上唯一的信息需要的是标题简短描述

有没有办法在 Strapi 的后端设计它,以便在响应中只发送部分信息?

正如@zero298 所建议的那样,graphql 是实现您想要的效果的最佳方式。

另一种方法customizing your api's repsonse.

当您创建内容类型时,它会生成一个 API,其中包含以下列表 endpoints

这些端点中的每一个都会触发一个控制器操作。这是创建内容类型时默认存在的 controller actions 列表。

如果您检查生成的 API ./api/{content-type}/controller/{Content-Type}.js 的控制器文件,您将看到一个空文件。这是因为所有默认逻辑都由 Strapi 管理。但是您可以使用自己的代码覆盖这些操作。

参考以下文档Example。此示例准确解释了您想要的用例。

但是,我更喜欢使用 Strapi 提供的 graphQL enpoint。这更容易使用,特别是对于您的用例。

步骤:

  • 以超级管理员用户身份登录,select插件,然后安装graphql插件。 您还可以使用 npm 或 yarn 通过终端安装插件(例如 npm run strapi install graphql

  • 然后,启动您的应用并打开浏览器访问 http://localhost:1337/graphql(打开新 window)。您应该会看到界面 (GraphQL Playground),它将帮助您编写 GraphQL 查询来探索您的数据。

  • 要执行授权请求,您必须先获得 JWT。有关如何执行授权请求,请参阅 link

  • 要执行查询请求,您可以参考 Query api。对于每个模型,插件会自动生成适合您需要的查询和突变

这就是您开始使用 graphQL 的方式。顺便说一句,在你的应用程序中,你需要一个 graphql 客户端来执行请求。 graphql clients. For simple use cases, I prefer graphql-request.

的热门榜单可以参考这篇文章

对于部分用例数据的响应,您的 graphql-request 查询可能类似于:


import { GraphQLClient, gql } from 'graphql-request'

async function main() {
  const endpoint = 'your graphql endpoint'

  const graphQLClient = new GraphQLClient(endpoint, {
    headers: {
      authorization: 'Bearer MY_TOKEN',
    },
  })

  const query = gql`
    {
      Article {
        Title
        Short description
      }
    }
  `
  const data = await graphQLClient.request(query)
  console.log(JSON.stringify(data, undefined, 2))
}

main().catch((error) => console.error(error));

使用 graphql 而不是 REST 端点的 缺点 之一是,您需要在回复。因此,如果您需要端点的所有字段,则需要在查询中明确指定所有字段名称。