Neo4j的服务除了提供了基于java的客户端驱动包,同时也支持我们通过rest服务访问它,这一点非常便捷,意味着任何支持http访问的编程语言都可以使用cypher的rest来访问neo4j,同时支持http报文以streaming的形式的返回数据,以获得更好的性能,并大幅度节省内存,当然前提是需要我们在每个request请求中在header中加入:
X-Stream: true
默认想要访问neo4j服务,是需要授权认证的,第一次安装的
neo4j在登录(http://localhost:7474)时是需要改密码的,默认是neo4j:neo4j,改完密码之后,每次登录需要验证用户名和密码的。
#### 1,执行单个cpyher语句事务的http请求
查询neo4j节点总数的例子
curl http://192.168.10.31:7474/db/data/transaction/commit -u neo4j:dong -H "Content-Type: application/json" -d '{"statements" : [ { "statement" : "match (n) return count(n)" } ]}'
返回的结果如下:
{ "results": [ { "columns": [ "count(n)" ], "data": [ { "row": [], "meta": [] } ] } ], "errors": [ ] }
注意上面的curl语句里面:
(1)需要加上用户名和密码,如果开启了权限认证
(2)要设置内容类型为json数据,同时采用了post请求
此外,如果不需要保持打开的事务横跨多个http请求,我们可以使用打开单个事务,然后执行cypher语句,最后提交仅仅单个http请求中。
#### 2,执行多个cpyher语句事务的http请求
我们在同一个http请求中也可以发送多个cpyher语句,响应的结果体中会包含每个cpyher语句结果。
一个例子如下:
POST http://localhost:7474/db/data/transaction/commit
Accept: application/json; charset=UTF-8
Content-Type: application/json
post请求体
{ "statements" : [ { "statement" : "CREATE (n) RETURN id(n)" }, { "statement" : "CREATE (n {props}) RETURN n", "parameters" : { "props" : { "name" : "My Node" } } } ] }
响应:
{ "results" : [ { "columns" : [ "id(n)" ], "data" : [ { "row" : [ 56 ], "meta" : [ null ] } ] }, { "columns" : [ "n" ], "data" : [ { "row" : [ { "name" : "My Node" } ], "meta" : [ { "id" : 57, "type" : "node", "deleted" : false } ] } ] } ], "errors" : [ ] }
#### 3,回滚打开的事务
DELETE http://localhost:7474/db/data/transaction/36
Accept: application/json; charset=UTF-8
响应的结果:
{ "results" : [ ], "errors" : [ ] }
注意上面是一个delete的rest请求。
#### 4,开启查询的系统统计信息
POST http://localhost:7474/db/data/transaction/commit Accept: application/json; charset=UTF-8 Content-Type: application/json
请求体如下:
{ "statements" : [ { "statement" : "CREATE (n) RETURN id(n)", "includeStats" : true } ] }
请求结果如下:
{ "results" : [ { "columns" : [ "id(n)" ], "data" : [ { "row" : [ 58 ], "meta" : [ null ] } ], "stats" : { "contains_updates" : true, "nodes_created" : 1, "nodes_deleted" : 0, "properties_set" : 0, "relationships_created" : 0, "relationship_deleted" : 0, "labels_added" : 0, "labels_removed" : 0, "indexes_added" : 0, "indexes_removed" : 0, "constraints_added" : 0, "constraints_removed" : 0 } } ], "errors" : [ ] }
总结:
neo4j服务暴露的http rest接口还是非常不错的,本篇文章简单的介绍了通过curl调用neo4j的方法,如果深入学习或者研究,可以参考官网文档https://neo4j.com/docs/developer-manual/current/http-api/
有什么问题可以扫码关注微信公众号:我是攻城师(woshigcs),在后台留言咨询。
技术债不能欠,健康债更不能欠, 求道之路,与君同行。