Neo4j:使用非2xx HTTP响应代码使用批处理的cypher查询失败

时间:2014-06-04 01:20:16

标签: rest neo4j cypher

当您使用REST batch operations endpoint提交多个查询时,该过程是事务性的。来自文档:

“此服务是事务性的。如果执行的任何操作失败(返回非2xx HTTP状态代码),则将回滚事务并撤消所有更改。”

我想提交多个查询,如果第一个查询失败,则回滚整个事务。这方面的一个例子可能如下:

  • 验证用户
  • 更新用户公开个人资料

如果身份验证用户查询无法找到经过身份验证的用户,我希望cypher查询让Neo4j返回非2xx代码,这样第二个查询就不会运行。因为第一个查询是有效的查询,所以它不会使Neo4j返回非2xx代码,而是返回null,因为它找不到经过身份验证的用户。

有办法做到这一点吗?

可能的解决方法(因此其中一个不会作为答案添加):

  • 结合这两个查询,其缺点是增加了复杂性和代码重复
  • 使用事务方法,其缺点是额外的http请求。

1 个答案:

答案 0 :(得分:1)

使用transactional Cypher Endpoint

首先,将您的身份验证查询发送到/db/data/transaction,如果您没有找到用户删除tx-URL /db/data/transaction/<txid>。否则将更新查询发布到/db/data/transaction/<txid>/commit