使用REST API保留实体

时间:2013-12-04 16:09:01

标签: php api rest orm persistence

对于Symfony2中的项目,我需要能够使用外部RESTful API而不是数据库来持久化/检索实体。由于Doctrine将实体映射到数据库表的一行,我认为创建从实体到外部API的映射应该很容易。但是,这对我来说是新的,我似乎无法找到任何关于此的描述/教程。 (也许我错过了我的Google-fu的正确用语)

我希望有一个类似于Doctrine的解决方案。我宁愿不使用基于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已经提到了几个解决方案,但它们并不能完全满足我的要求,我希望会有更多的解决方案,因为我确信我不是第一个有解决方案的人。解决这个问题。

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

4 个答案:

答案 0 :(得分:3)

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

https://github.com/CircleOfNice/DoctrineRestDriver

答案 1 :(得分:2)

大约一年前,我试图在没有运气的情况下找到相同问题的答案并创建自己的捆绑。不幸的是,我不能分享它,因为它是专有的,并不打算是开源的(少量的设置,专门为我们的公司API等)。但我可以给你一些链接

  1. 开始时,对于http查询,有jms serializer用于反序列化+ buzz。你可以用一些服务包装它并完成工作。

  2. Doctrine有一些名为drest的失去解决方案(教条休息)。

  3. 我还发现了一些名为drest的有趣解决方案。我不尝试使用它,因为它是相对较新的。 Documentation看起来很不错。

答案 2 :(得分:1)

你正在寻找一个学习dbal司机休息apis我认为

答案 3 :(得分:0)

我在搜索相同功能时发现了这个问题。然而,一段时间过去了,现在似乎有a solution implementing this

来自文档:

  

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