如何在 CakePHP 3 中使用 RESTful API 作为 ORM?

How to use a RESTful API as ORM in CakePHP 3?

在 CakePHP 1.x/2.x 中,通过定义自定义数据源,让模型的数据来自 REST API(相对于关系数据库)相当简单。 (Neil Crookes 的 CakePHP-ReST-DataSource-Plugin 是一个很好的起点。)将您的自定义数据源放在您的模型上,您就可以像查询 MySQL [= 一样进行调用 $this->MyModel->find() 37=] 称为 my_models.

我想知道如何在 CakePHP 3.0 下实现同样的效果。也就是说,对由 REST API.

驱动的 Table/Entity 进行 find()/save()/set()/get() 调用

由于 3.0 的 ORM 系统 A) 相当新,并且 B) 与旧的做事方式有很大的不同,我还没有找到 任何 有关的信息如何做这样的事情。事实上,基于 这个 SlideShare 来自 何塞·洛伦佐·罗德里格斯,听起来似乎不可能。

This means:

  • not going to connect to stuff that is not a relational database.

有没有更熟悉 CakePHP 3.0 的人可以澄清我正在寻找的东西在新的 ORM 系统下是否可行?如果是这样,您能否解释一下 类 您必须扩展或实现什么才能实现这样的功能?

如果您想使用 CakePHP 提供的接口和 classes 为您的 Rest 数据源创建一个完整的适配器,请查看 CakePHP 团队为 Elastic Search 创建数据源的早期实验。

Elastic Search 使用 Rest API,此插件尝试创建 class 与 CakePHP ORM 类似的工作方式:

https://github.com/cakephp/elastic-search

它的实现基本上是这样的:

  • 实现 RepositoryInterface
  • 的类型 class
  • 实现 EntityInterface
  • 的文档 class
  • 一个Queryclass可以作为集合对象并且有类似的方法

在不久的将来它将提供一个分页器适配器和一个表单助手适配器。

如果你想省去这个麻烦,因为对你来说将数据源公开为类似 ORM 的东西没有什么价值,你可以只使用 guzzle 或任何类似的库来与你的 API 交互并将其用作服务而不是成熟的层。

在我问这个问题后的一年里,UseMuffin 构建了一个 Webservice 插件,声称 "bring [...] the power of the CakePHP ORM to your favourite webservices." 这听起来正是我当时想要的。