CMS Strapi - 部分模型数据的响应
CMS Strapi - response with partial model data
我有一个网页,我想在该网页上展示一组客户的文章。一篇文章由 - 标题、作者、简短描述、文章组成body。在主页上,我想以较短的形式显示所有可用的文章,仅包括 Title 和 Short 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
端点的 缺点 之一是,您需要在回复。因此,如果您需要端点的所有字段,则需要在查询中明确指定所有字段名称。
我有一个网页,我想在该网页上展示一组客户的文章。一篇文章由 - 标题、作者、简短描述、文章组成body。在主页上,我想以较短的形式显示所有可用的文章,仅包括 Title 和 Short 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
端点的 缺点 之一是,您需要在回复。因此,如果您需要端点的所有字段,则需要在查询中明确指定所有字段名称。