REST API使用 HTTP协议传输,数据采用JSON格式,以至于他能被需要计算机语言和平台使用。尽管如此,准备开始使用之前,看一些可以重用的模式是非常有用的。在这 个简短的概述中,我们将为你展示如何通过REST API创建一个或者多个简单图并且查询他里面存在的数据。
在我们准备在Neo4j服务端做任何操作之前,我们需要先启动他,可以参考:3.7.1. 数据库服务端安装。
WebResource resource = Client.create() .resource( SERVER_ROOT_URI );
ClientResponse response = resource.get( ClientResponse. class );
System.out.println( String.format( "GET on [%s], status code [%d]" ,
SERVER_ROOT_URI, response.getStatus() ) );
response.close(); |
如果返回的状态码是200 OK
, 那我们就确定 Neo4j 服务端已经成功运行,我们可以继续使用了。如果连接到服务端失败,请参考:3.7. Neo4j数据库服务端。
![]() |
注意
如果你获得的返回码大于200 OK (特别是 4xx 或者 5xx ),那请您检查你的配置并查看在目录data/log中的日志。 |
REST API 使用 POST
来创建节点. 在Java中封装的接口使用Jersey客户端便可以非常容易使用:
final String nodeEntryPointUri = SERVER_ROOT_URI + "node" ;
WebResource resource = Client.create() .resource( nodeEntryPointUri );
// POST {} to the node entry point URI ClientResponse response = resource.accept( MediaType.APPLICATION_JSON ) .type( MediaType.APPLICATION_JSON )
.entity( "{}" )
.post( ClientResponse. class );
final URI location = response.getLocation();
System.out.println( String.format( "POST to [%s], status code [%d], location header [%s]" ,
nodeEntryPointUri, response.getStatus(), location.toString() ) );
response.close(); return location;
|
如果调用成功完成,他会在后台发送一个包含JSON数据的HTTP请求给服务端。服务端会在数据库中创建一个新的节点并且返回状态码 201 Created
和访问这个新节点的地址
。
在我们的范例中,我们将调用这个功能两次以便在数据库中创建两个节点。
一旦我们在数据库中有了节点,我们可以使用他们来保存有用的数据。在这个范例中,我们将在我们的数据库中保存音乐信息。下面让我们浏览下面的代码, 代码中,我们创建了节点并且给节点增加属性。这里,我们新增一个节点“Joe Strummer”,并且增加了一个属性 “brand”,属性值是: “The Clash”。
URI firstNode = createNode(); addProperty( firstNode, "name" , "Joe Strummer" );
URI secondNode = createNode(); addProperty( secondNode, "band" , "The Clash" );
|
在方法addProperty
内部,我们确定了代表节点属性的名称,以及该属性的值。然后我们使用PUT
将该属性发送到服务端。
String propertyUri = nodeUri.toString() + "/properties/" + propertyName;
// http://localhost:7474/db/data/node/{node_id}/properties/{property_name} WebResource resource = Client.create() .resource( propertyUri );
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON ) .type( MediaType.APPLICATION_JSON )
.entity( "\"" + propertyValue + "\"" )
.put( ClientResponse. class );
System.out.println( String.format( "PUT to [%s], status code [%d]" ,
propertyUri, response.getStatus() ) );
response.close(); |
如果一切顺利,我们将会得到返回码:204 No Content
,表示服务端已经受理这个请求,整个请求不会回显属性的值。
现在我们有了表示Joe Strummer 和 The Clash的节点,我们可以关联他们。REST API通过一个POST
方式支持对节点建立关系。在Java中相应地,我们POST>
一些JSON到节点Joe Strummer的节点地址,确定了该节点和The Clash节点之间的关系。
URI relationshipUri = addRelationship( firstNode, secondNode, "singer" ,
"{ \"from\" : \"1976\", \"until\" : \"1986\" }" );
|
在addRelationship
方法中,我们确定了Joe Strummer节点的地址,然后POST
一些JSON数据从而建立关系。这些JSON数据包括目标节点,关系的类型以及一些关系的属性等。
private static URI addRelationship( URI startNode, URI endNode,
String relationshipType, String jsonAttributes )
throws URISyntaxException
{ URI fromUri = new URI( startNode.toString() + "/relationships" );
String relationshipJson = generateJsonRelationship( endNode,
relationshipType, jsonAttributes );
WebResource resource = Client.create()
.resource( fromUri );
// POST JSON to the relationships URI
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.entity( relationshipJson )
.post( ClientResponse. class );
final URI location = response.getLocation();
System.out.println( String.format(
"POST to [%s], status code [%d], location header [%s]" ,
fromUri, response.getStatus(), location.toString() ) );
response.close();
return location;
} |
如果一切正常,我们将得到返回码:201 Created
和一个地址Location
,这个地址是我们刚建立的关系的地址。
像节点一样,管东西一样拥有属性。自从我们大量关注Joe Strummer和 The Clash以来,我们增加了他们的关系的属性:等级,以至于我们可以看到一个五星级的品牌属性。
addMetadataToProperty( relationshipUri, "stars" , "5" );
|
在addMetadataToProperty
方法中,我们确定了关系的地址,然后PUT
我们新的值到服务端,这些新的值会覆盖过去已经存在的,所以请在操作之前务必谨慎。
private static void addMetadataToProperty( URI relationshipUri,
String name, String value ) throws URISyntaxException
{ URI propertyUri = new URI( relationshipUri.toString() + "/properties" );
String entity = toJsonNameValuePairCollection( name, value );
WebResource resource = Client.create()
.resource( propertyUri );
ClientResponse response = resource.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.entity( entity )
.put( ClientResponse. class );
System.out.println( String.format(
"PUT [%s] to [%s], status code [%d]" , entity, propertyUri,
response.getStatus() ) );
response.close();
} |
假设一切正常,我们将得到返回码:200 OK
(我们也可以通过调用ClientResponse.getStatus()
来检查),到此,我们已经建立起了一个小型的图数据库网络,我们已经可以从中查询一些有价值的数据了。
跟图数据嵌入模式一样,Neo4j服务端模式也使用图遍历来查询数据。当前,Neo4j服务端希望得到一个JSON格式的查询请求通过POST
发送给他以便遍历数据库。(虽然这在以GET
方式传送的适合随时都会发生变化)。
为了启动这个查询,我们使用了一个能做JSON转换的类,准备POST
数据到服务端。在这种情况下,我们硬编码到遍历查询条件中,查找所有有类型是"singer"
的输出关系的节点。
// TraversalDescription turns into JSON to send to the Server TraversalDescription t = new TraversalDescription();
t.setOrder( TraversalDescription.DEPTH_FIRST ); t.setUniqueness( TraversalDescription.NODE ); t.setMaxDepth( 10 );
t.setReturnFilter( TraversalDescription.ALL ); t.setRelationships( new Relationship( "singer" , Relationship.OUT ) );
|
一旦我们确定了遍历的参数,我们只需要转换它。我们确定了遍历的开始节点,然后POST
JSON数据到服务端开始查询。
URI traverserUri = new URI( startNode.toString() + "/traverse/node" );
WebResource resource = Client.create() .resource( traverserUri );
String jsonTraverserPayload = t.toJson(); ClientResponse response = resource.accept( MediaType.APPLICATION_JSON ) .type( MediaType.APPLICATION_JSON )
.entity( jsonTraverserPayload )
.post( ClientResponse. class );
System.out.println( String.format( "POST [%s] to [%s], status code [%d], returned data: "
+ System.getProperty( "line.separator" ) + "%s" ,
jsonTraverserPayload, traverserUri, response.getStatus(),
response.getEntity( String. class ) ) );
response.close(); |
一旦这个请求完成,我们将得到我们的歌手的数据集以及他们属于的品牌:
[ { "data" : {
"band" : "The Clash" ,
"name" : "Joe Strummer"
},
"all_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/all/{-list|&|types}" ,
"outgoing_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/out/{-list|&|types}" ,
"incoming_typed_relationships" : "http://localhost:7474/db/data/node/82/relationships/in/{-list|&|types}" ,
}, { "data" : {
},
"all_typed_relationships" : "http://localhost:7474/db/data/node/83/relationships/all/{-list|&|types}" ,
"outgoing_typed_relationships" : "http://localhost:7474/db/data/node/83/relationships/out/{-list|&|types}" ,
"incoming_typed_relationships" : "http://localhost:7474/db/data/node/83/relationships/in/{-list|&|types}" ,
} ] |
这就是我们使用REST API的方式。自然对于对HTTP协议不了解的,我们提供了对HTTP操作的封装,包括通过DELETE
移除节点和关系。当然,如果你想了解更多,你可以尝试在Jersey客户端代码中采用.post()
来代替.delete()
。
HTTP API 提供了大量客户端基本操作的实现,也包括HTTP和REST。在将来,虽然 REST API的方式占有一定的优势,但是我们还是期望出现语言级的方式来做客户端,能更轻松的绑定到Neo4j的嵌入模式(比如python)。关于当前 Neo4j REST客户端以及嵌入封装,请查看:http://www.delicious.com/neo4j/drivers。
http://www.neo4j.org.cn/2012/07/30/server-java-rest-client-example/#maodian001
http://docs.neo4j.org.cn/
相关推荐
Neo4j 是一个高性能的NoSQL图数据库,它以图结构...以上内容基于文档所提供的Neo4j REST API 3.3版本的部分内容摘录,详细介绍了Neo4j REST API的核心概念和操作方法,为用户提供了深入了解和操作Neo4j数据库的能力。
适用于Node.js的Neo4j REST API包装器 主分支: 开发分支: 安装 npm install node-neo4j --save 用法 为了使用该库,您必须创建一个应用并添加或在本地安装它。 如果您使用的是OS XI,则强烈建议通过安装Neo4j。 ...
【标题】"neocons:Neo4J REST API的功能丰富的惯用Clojure客户端"指的是一个针对Neo4J数据库的Clojure库,它提供了方便的接口,用于通过REST API与Neo4J进行交互。这个库旨在使Clojure开发者能够更加高效、便捷地...
森林api 使用内存数据库,超简单的Angular JS前端和Mockito进行单元测试的Spring Data Neo4j REST API示例。 创建为SDN和Spring Boot的示例用法。资料模型在这里,您可以看到用于此示例项目的数据模型。
node-neo4j, node.js的Neo4j 图形数据库驱动程序( REST API 客户端) Node-Neo4j这是访问 Neo4j的客户端库,它是一个图形数据库,来自 node.js 。 它使用 Neo4j REST API的,并支持 Neo4j 1.5通过 Neo4j 2.1.现在,像...
Windows API(Application Programming Interface)是微软为Windows操作系统提供的核心接口,允许程序员访问系统服务和硬件资源,实现各种复杂的软件功能。Windows API包含了丰富的函数、结构体、常量和消息,是构建...
Neo4j API包装器 io.js的另一个Neo4j 包装器,提供了Promise api。 用法 npm install neo4j-io --save var neo4j = require( ' neo4j-io ' )([url]) 原料药 暗号 var cypher = 'MATCH (n:NODE) RETURN n LIMIT 1' ...
尽快使用Neo4j和Flask构建REST API! gREST(基于图的REST API框架)是基于Python,Flask,Neo4j和Neomodel的RESTful API开发框架。 其主要目的是轻松完成RESTful API的开发,并减少代码量。 Python版本相容性 如果...
用于Neo4j数据库的最先进,和高效的REST客户端,涵盖100%的测试。 Fibers可以为开发人员提供全新的体验,而无需进行回调地狱和阻塞操作。 速度和低资源消耗是neo4j-fiber软件包的重中之重。 100%的测试覆盖率对于...
例如,在Neo4j REST API中,可以利用Serviceroot来发现REST API的基本起点和数据库信息。Serviceroot包含了一些基本的起点,如节点和关系的URL,以及节点和关系索引的URL等。此外,REST API还支持流式传输,这样可以...
【描述】:“新4j,鸡计划的neo4j REST客户端”指的是一个用于与Neo4j图形数据库交互的客户端,它基于RESTful API进行通信。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于...
用于 Node.js 的 Neo4j REST API 包装器 安装 npm install neo4js 用法 {Neo4js} = require('neo4js') neo = new Neo4js() neo .createNode() .then((data) -> console.log data ) .fail((data) -> console....
本篇文章将深入探讨如何在Go语言中创建一个Neo4j的REST API客户端。 首先,我们需要理解 Neo4j 的 REST API 工作原理。Neo4j 服务器通过暴露一组基于HTTP的端点来提供服务,这些端点接受JSON格式的数据并返回响应。...
- **核心API**:Neo4j REST API的核心部分包括了用于管理节点、关系和属性的操作。例如,创建新节点可以通过发送POST请求到`/db/data/node`端点来实现。 - **扩展API**:除了基本功能外,Neo4j还提供了扩展API,如...
详细讲解了Neo4j REST API的使用方法,帮助开发者通过HTTP协议与Neo4j服务器交互。 **Python应用中的Neo4j:** 这部分内容专门针对Python开发者,提供了在Python应用程序中集成Neo4j的方法。 #### 四、操作指南 *...
用户可以学习如何通过这些API与数据库交互,以及如何将Neo4j与其他系统(如Spring框架或REST服务)集成。 7. **备份与恢复**:文档将涵盖如何进行数据备份、恢复和迁移,以确保数据的完整性和可用性。 8. **故障...
Neo4j-REST-API 的事务参与 这是一个 Neo4j 服务器扩展,使参与由启动的。 为什么我需要它? Neo4j 服务器的许多操作目前无法使用 Cypher 完成,但作为 REST-API 端点公开。 尤其是使用、和。 当 Cypher 端点启动...
neo4j-timetree, 在 Neo4j 中,用于处理表示树的时间的Java和 REST api GraphAware Neo4j TimeTree | 下载| Javadoc | 最新版本: 3.3.2.51. 27GraphAware TimeTree是一个简单的库,用于将 Neo4j 中的时间表示为时间...
回送连接器neo4j图介绍使用 Neo4j REST API客户端库的基于Cypher的Neo4j连接器,用于回送数据源杂耍者。 此回送连接器是通过参考的代码库开发的。 感谢所有的nodejs开源社区,上述库的开发人员和贡献者以及其他...