【问题标题】:What is the proper way to set up API endpoints for usage with Keystone?设置 API 端点以与 Keystone 一起使用的正确方法是什么?
【发布时间】:2015-05-24 08:26:45
【问题描述】:

文档中并不清楚如何使用现有的 Keystone 模型来公开在 Keystone.js 应用程序中返回 json 的 API 端点。我只是希望能够使用 Keystone 公开 REST API 端点,并能够使用 Keystone CMS 功能通过与这些端点交互来管理内容。谢谢!

【问题讨论】:

  • 我不太清楚您所说的“设置”是什么意思。 Keystone 当前有一个 internal API,由管理 UI 使用。您不会在文档中找到任何内容,因为就像我说的那样,它是一个内部 API,不是供公众使用的(这并不是说您无论如何都不能使用它)。你总是可以创建自己的,我怀疑你已经知道了。那么,当您说“设置”时,您的意思是“配置现有的”还是“创建新的”?
  • 我希望能够使用 Keystone 模型来构建与 Keystone 的 CMS 一起使用的 CRUD API。当您说内部 API 时,是否意味着您不支持这种使用 REST API 的方法?
  • 当我说“内部”API 时,我指的是非“公开”的 API(即不打算供公众使用),这就是它没有被记录的原因。 Keystone 的管理 UI 使用它。这并不意味着你不能使用它。您当然可以免费使用它,但请记住,由于它不是公共 API,它可能会在不通知的情况下更改。该主题有未解决的问题(请参阅Keystone GH issue #396),其中一位贡献者(@creynders)创建了一个名为restful-keystone 的模块。

标签: keystonejs


【解决方案1】:

现在他们已经标准化了管理 API,我发现使用相同的方法非常简单。对于为我的 react 应用程序提供动力的只读 API,我已经在我的 routes/index.js 中放置了类似的内容

router.get('/api/:list/:format(export.csv|export.json)',middleware.initList,require('keystone/admin/server/api/list/download'));

我已经制作了自己的管理员 initList 中间件版本:

exports.initList = function(req, res, next) {
  console.log('req.keystone', req.keystone);
  req.keystone = keystone;
  req.list = keystone.list(req.params.list);
  if (!req.list) {
    if (req.headers.accept === 'application/json') {
      return res.status(404).json({ error: 'invalid list path' });
    }
    req.flash('error', 'List ' + req.params.list + ' could not be found.');
  }
  next();
};

【讨论】:

    【解决方案2】:

    您可以考虑使用:

    我从来没有真正使用过这些,因为我有自己的实现,一旦 Keystone 实现它的插件架构,我将开源它(参见Keystone Issue #912: Proposed Keystone Package Architecture)。

    我怀疑,一旦 Keystone 更加“插件友好”,许多其他类似的模块就会开始出现。

    【讨论】:

    • 对此的任何更新。我也在寻找类似的选择
    猜你喜欢
    • 1970-01-01
    • 2019-12-12
    • 2018-04-10
    • 2013-01-02
    • 1970-01-01
    • 2020-08-27
    • 2020-07-10
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多