在啥情况下 Neo4J 的 Rest API 会返回 404 Not Found?

Posted

技术标签:

【中文标题】在啥情况下 Neo4J 的 Rest API 会返回 404 Not Found?【英文标题】:In what case would Neo4J's Rest API return a 404 Not Found?在什么情况下 Neo4J 的 Rest API 会返回 404 Not Found? 【发布时间】:2014-08-12 15:26:49 【问题描述】:

我正在编写一个批处理作业以在 Neo4J 中 POST 到 /db/data/batch,这里的文档是:http://docs.neo4j.org/chunked/2.0.4/rest-api-batch-ops.html

我正在通过 POST 操作创建一个节点,然后通过 POST 从先前存在的节点创建一个关系到批处理中创建的那个。 Neo4J 在 previously existing 节点的关系 URL 上返回 404 - Not Found。

这是请求:

[ 
    "method" : "POST",
    "to"     : "/node",
    "id"     : 0,
    "body"   : 
      "entityType"  : "TimeOff",
      "start"       : "2014-08-13",
      "end"         : "2014-08-13",
      "status"      : "Approve",
      "reqId"       : 13579
    
  , 
    "method" : "POST",
    "to"     : "/node/1234/relationships",
    "id"     : 1,
    "body"   : 
      "to"   : "0",
      "type" : "REQUEST"
    
  
]   

如果我通过 SSH 和 cURL 重复此操作,它可以正常工作。相同的数据库服务器和相同的应用程序服务器。 404 似乎是由“/node/1234/relationships”引起的,尽管 cURL GET 到“/node/1234”和“/node/1234/relationships/all”工作正常,以及通过 cURL 的 POST。

我觉得导致 404 的服务器有问题,可能是由于超时或类似原因。这可能吗?

【问题讨论】:

为什么不在这里使用 Cypher? 批处理 api 调用使用什么库?也许它在某处错过了 application/json 的一些接受或内容类型标头? 【参考方案1】:

可能更好的是使用新的事务端点,并执行 Cypher 语句,请参阅 http://docs.neo4j.org/chunked/stable/rest-api-transactional.html

MATCH (n)
WHERE id(n) = 1234
WITH n
CREATE (node:TimeOffreqId:1234) -[:REQUEST]->(n)

【讨论】:

我最终在某些部分使用了 cypher,但这是一个相对较旧的系统,并且在很多地方都需要大量的 cypher(这只是一个示例)。值得,但困难且耗时。此外,Batch RestAPI 就是为此目的而存在的,但似乎实施和记录不佳。 我会接受这个答案,但我不得不说,从我最近几周使用 Neo 的情况来看,它不值得在生产环境中使用。 有什么问题? REST API、Cypher 还是 Batch 端点? 很抱歉回复延迟。问题在于 Batch 端点,其中引用在先前的批处理条目中创建的节点,用于创建关系或添加到索引。如文档中所述,通过批处理创建的节点似乎在上下文中不可用。可以通过有一个计划的 id 或执行多个批次来解决它,但是可能应该更新文档以指示创建的节点在同一批次中并不真正可用。

以上是关于在啥情况下 Neo4J 的 Rest API 会返回 404 Not Found?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有 REST API 的情况下为 neo4j 集群配置用户和密码

使用 Spring Boot 和 Neo4j 通过 REST API 插入实体时出错

r 直接从Neo4j REST API获取图形数据到R.对于R igraph用户有用。

Java 在啥情况下要重写toString

在啥情况下“Openwrt”优于“Buildroot”框架?

在啥情况下 alloca() 有用?