使用Strapi进行自定义API开发:创建自定义端点 ...

作者:API传播员 · 2025-12-29 · 阅读时间:5分钟

Strapi 是一款功能强大的无头 CMS,不仅可以帮助您管理内容,还支持创建自定义 API 端点。这些端点可以根据需求进行定制,以便为前端应用程序提供所需的数据,并允许您定义自己的路由和逻辑。在本指南中,我们将详细介绍如何在 Strapi 中生成和使用自定义 API 端点。


为什么需要自定义 API 端点?

虽然 Strapi 为内容类型提供了一组内置的 API 端点,但在某些情况下,您可能需要更高的控制或特定的数据输出。这时,自定义 API 端点就显得尤为重要。以下是它的一些主要用途:

  1. 数据转换:根据前端需求,自定义 API 返回的数据结构。
  2. 第三方集成连接外部 API 和服务,处理数据并提供给前端。
  3. 优化查询:为复杂的数据检索创建高效的定制查询。

在开始之前,请确保您已安装 Strapi,并且项目已启动运行。如果尚未设置 Strapi,可以参考相关入门教程。


创建自定义 API 端点

在本示例中,我们将创建一个名为 GET /api/get-articles 的自定义 API 端点,该端点将返回 article 集合类型的简化列表。

1. 生成 API 结构

首先,使用以下命令生成 API 结构:

npx strapi generate

如果您使用的是 Yarn,也可以运行:

yarn strapi generate

在 CLI 提供的选项中选择 “api – 生成基本 API”,将 API 命名为 get-articles,并确认该 API 不适用于插件。此命令会在项目的 src/api 文件夹中生成一个名为 get-articles 的新目录,其中包含以下三个子目录:

  • controllers:用于定义 API 操作的逻辑,处理请求并返回响应。
  • routes:定义 API 端点及其关联的控制器操作。
  • services:封装业务逻辑的可重用功能。

2. 配置路由

在 Strapi 中,路由定义了 API 如何响应传入的请求。打开 src/api/get-articles/routes 文件夹中的 get-articles.js 文件,并根据需求设置路由。


3. 编写控制器逻辑

控制器负责处理客户端请求并调用服务函数来执行业务逻辑。打开 src/api/get-articles/controllers 文件夹中的 get-articles.js 文件,并将内容替换为以下代码:

'use strict';

/**
 * A set of functions called "actions" for get-articles
 */module.exports = {
  getArticles: async (ctx, next) => {
    try {
      const data = await strapi
        .service("api::get-articles.get-articles")
        .getArticles();
      console.log("Data", data);
      ctx.body = data;
    } catch (err) {
      ctx.badRequest("Get articles controller error", { moreDetails: err });
    }
  }
};

4. 编写服务逻辑

服务包含实际的业务逻辑,是可重用的功能模块。打开 src/api/get-articles/services 文件夹中的 get-articles.js 文件,并将内容替换为以下代码:

  // Return the reduced data
return entriesReduced;
} catch (err) {
return err;
}

},
};

/**
* get-articles service
*/

module.exports = {
getArticles: async () => {
try {
// Fetching data
const entries = await strapi.entityService.findMany(
"api::article.article",
{
fields: ["id", "Title", "Content", "createdAt"],
populate: {
Author: {
fields: ["username", "email"],
},
Category: {
fields: ["name"],
},
},
}
);

// Reduce the data to the format we want to return
let entriesReduced;
if (entries && Array.isArray(entries)) {
entriesReduced = entries.reduce((acc, item) => {

acc = acc || [];

acc.push({
id: item?.id,

title: item.Title || "",
category: item.Category.name || "",
publishedDate: new Date(item.createdAt).toDateString() || "",
authorName: item.Author?.username || "",
authorEmail: item.Author?.email || "",
content: item.Content || ""

});
return acc;
}, []);
}

// Return the reduced data
return entriesReduced;
} catch (err) {
return err;
}
},
};

配置 API 的访问权限

默认情况下,自定义 API 端点可能无法被公开访问。您需要在 Strapi 仪表盘中设置相应的权限:

  1. 进入 “设置” > “角色” > “Authenticated”
  2. 如果需要公开访问,则进入 “设置” > “角色” > “Public”
  3. get-articles 路由权限中,选择所需的访问权限。

注意:确保为 ArticleCategoryUsers-Permissions(用户)正确配置访问权限,否则可能无法获取所有字段的数据。


通过以上步骤,您已经成功创建了一个自定义 API 端点,并能够根据需求返回简化的文章列表。希望本指南对您有所帮助!

原文链接: https://sachini-dissanayaka.medium.com/custom-api-development-with-strapi-creating-custom-endpoints-for-your-frontend-applications-573ff762b918