正如@zero298 建议的那样,graphql 是实现您想要的最佳方式。
其他方式是customizing your api's repsonse.
当您创建内容类型时,它会生成一个 API,其中包含以下 endpoints 列表。
每个端点都会触发一个控制器动作。这是创建内容类型时默认存在的controller actions列表。
如果您检查生成的 API ./api/{content-type}/controller/{Content-Type}.js 的控制器文件,您将看到一个空文件。这是因为所有默认逻辑都由 Strapi 管理。但是您可以使用自己的代码覆盖这些操作。
请参阅以下文档Example。此示例准确地解释了您想要的用例。
但是,我更喜欢使用 Strapi 提供的 graphQL enpoint。这使用起来要简单得多,尤其是对于您的用例。
步骤:
-
以超级管理员用户身份登录,选择插件,然后安装graphql插件。
您也可以通过终端使用 npm 或 yarn 安装插件(例如npm run strapi install graphql)
-
然后,启动您的应用程序并在 http://localhost:1337/graphql 打开您的浏览器(打开新窗口)。您应该会看到界面(GraphQL Playground),它将帮助您编写 GraphQL 查询来探索您的数据。
-
要执行授权请求,您必须首先获得 JWT。如何执行授权请求请参考link。
-
要执行查询请求,您可以参考Query api。对于每个模型,插件会自动生成适合您需求的查询和突变
这是您可以开始使用 graphQL 的方法。顺便说一句,从您的应用程序中,您将需要一个 graphql 客户端来执行请求。 graphql clients的热门列表可以参考这篇文章。对于简单的用例,我更喜欢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 端点的缺点之一是,您需要在响应中指定所需的所有字段。因此,如果您需要端点的所有字段,则需要在查询中明确指定所有字段名称。