You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Strapi中创建API获取并存储外部接口数据?

Strapi自定义API实现外部数据缓存逻辑

核心需求

实现一个Strapi API,首次调用时从外部服务拉取数据并存储到本地数据库,后续调用直接返回本地存储的缓存数据。

步骤实现

1. 创建存储外部数据的模型

先在Strapi中创建一个用于存储外部数据的模型(比如命名为external-data),根据外部API返回的数据结构定义对应字段。例如外部API返回文章信息,可定义以下字段:

  • title(字符串,必填)
  • content(文本)
  • source_id(字符串,唯一,标记外部数据的唯一标识)
  • fetched_at(日期,记录数据拉取时间)

2. 编写自定义API路由

在src/api/external-data/routes/external-data.js中添加路由配置:

module.exports = {
  routes: [
    {
      method: 'GET',
      path: '/external-data',
      handler: 'external-data.fetchOrReturnCached',
      config: {
        policies: [],
      },
    },
  ],
};

3. 实现控制器逻辑

在src/api/external-data/controllers/external-data.js中编写核心逻辑,先检查本地缓存,无数据则拉取外部API并存储:

const axios = require('axios');

module.exports = {
  async fetchOrReturnCached(ctx) {
    // 查询本地是否已有存储的数据
    const cachedData = await strapi.db.query('api::external-data.external-data').findMany();

    if (cachedData.length > 0) {
      // 有缓存直接返回
      return ctx.send({
        data: cachedData,
        message: '返回本地缓存数据'
      });
    }

    // 无缓存时调用外部API
    try {
      const externalResponse = await axios.get('https://外部API地址');
      const externalData = externalResponse.data;

      // 将外部数据批量存入Strapi
      const storedData = await Promise.all(
        externalData.map(item => 
          strapi.db.query('api::external-data.external-data').create({
            data: {
              title: item.title,
              content: item.content,
              source_id: item.id,
              fetched_at: new Date()
            }
          })
        )
      );

      return ctx.send({
        data: storedData,
        message: '首次拉取并存储外部数据'
      });
    } catch (error) {
      return ctx.badRequest('拉取外部数据失败', error.message);
    }
  }
};

原文档关键内容翻译(适配需求部分)

当需要从外部数据源获取数据并集成到Strapi时,核心思路是通过自定义控制器处理数据的拉取与存储逻辑:

  1. 优先检查本地数据库是否存在目标数据,避免重复调用外部API
  2. 若本地无数据,使用HTTP客户端(如Axios)请求外部API
  3. 将获取到的数据转换为Strapi模型所需的格式,存入数据库
  4. 后续请求直接返回本地存储的数据,提升响应速度并减少外部API依赖

内容的提问来源于stack exchange,提问作者Ugur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:15:41