使用REST API持久化实体


Persisting entities using a REST API

对于Symfony2中的项目,我需要能够使用外部RESTful API而不是数据库来持久化/检索实体。由于Doctrine将实体映射到数据库表的一行,我认为创建从实体到外部API的映射也应该很容易。然而,这对我来说是新的,我似乎找不到任何关于这方面的描述/教程。(也许我找不到合适的词来形容我的谷歌功能)

我希望有一个类似于条令的解决方案。我宁愿不使用基于ActiveRecord模式的东西,因为我希望持久逻辑与实体分离。实体不应该知道它是如何持久化的。

我希望能够做一些类似的事情:

$entity = new Entity();
$em = $this->getREST()->getManager(); // get REST Entity Manager
$em->persist($entity); // save the entity using a POST request
$em->flush();

这个:

$em = $this->getREST()->getManager(); // get REST Entity Manager
// retrieve the entity using a GET request
$entity = $em->getRepository('AcmeDemoBundle:Entity')->find($id);

这个:

$em = $this->getREST()->getManager(); // get REST Entity Manager
// retrieve all entities using a GET request
$entities = $em->getRepository('AcmeDemoBundle:Entity')->findAll();

换言之,如果语法可以与Doctrine的语法几乎相同,那就太好了。

此外,我希望在外部文件(例如YAML)中配置映射,而不是在实体中通过注释进行配置。(正如我所说,实体不应该知道它们是如何持久化的)

Forgottenbas已经提到了几个解决方案,但它们并不能完全满足我的要求,我希望会有更多的解决方案,因为我相信我不是第一个必须解决这个问题的人。

有人能给我指正确的方向吗?

Well Circle为Doctrine构建了一个完整的REST驱动程序,这意味着您可以使用完全相同的语法,因为它是充当REST客户端的Doctrine:

https://github.com/CircleOfNice/DoctrineRestDriver

大约一年前,我试图找到同一个问题的答案,但运气不佳,并创建了自己的捆绑包。不幸的是,我不能分享它,因为它是专有的,不打算开源(少量设置​​专门针对我们的企业API等)。但我可以给你一些链接

  1. 一开始,有一个用于反序列化的jms序列化程序+用于http查询的buzz。你可以用一些服务和完成的工作来包装它。

  2. 学说有一些失败的解决方案,称为drest(学说休息)。

  3. 我还发现了一些有趣的解决方案,也叫drest。我不想用它,因为它相对较新。文档看起来不错。

您正在为rest api寻找一个条令dbal驱动程序,我认为

我在搜索相同功能时发现了这个问题。然而,一段时间过去了,现在似乎有了实现这一点的解决方案。

来自文件:

RAPL(RESTful API持久层)是Doctrine的ORM的RESTful变体。它实现了相同的接口,但允许您从远程(RESTful)API而不是从数据库存储和检索实体。