chekun / gremlin-php
php的gremlin-server客户端
Requires (Dev)
- yiisoft/yii2-apidoc: 2.0.0-beta
This package is not auto-updated.
Last update: 2024-09-18 09:06:39 UTC
README
这是一个PHP的Gremlin服务器客户端。 支持版本:M9-RC3
变更
有很多变更,以下是一些如果您之前使用过rexpro-php可能会注意到的最显著的变更
- 客户端现在会抛出错误,您需要捕获这些错误
- 连接参数已更改
- 消息类已重写,并且与连接独立(请参阅文档了解如何使用此功能)
- 单元测试需要一些额外的配置
- 默认情况下无会话运行(rexpro-php 2.3 & 2.4+ 以会话作为默认运行)
- Gremlin代码更改g.V/E应现在写成g.V()/E()
安装
PHP Gremlin-Server客户端
对于Gremlin-Server 3.0.0-M5+
推荐的方法是通过composer。将以下内容添加到您的composer.json
文件中
{ "repositories": [ { "type": "git", "url": "https://github.com/PommeVerte/gremlin-php.git" } ], "require": { "brightzone/gremlin-php": "master" } }
如果您只想拉取并使用库,请执行以下操作
git clone https://github.com/PommeVerte/gremlin-php.git cd gremlin-php composer install --no-dev # required to set autoload files
命名空间
连接类存在于rexpro
命名空间中。(历史:rexpro曾经是Tinkerpop2中驱动程序使用的旧协议)。这意味着您必须执行以下两种操作之一
require_once('vendor/autoload.php'); use \brightzone\rexpro\Connection; $db = new Connection;
或者
require_once('vendor/autoload.php'); $db = new \brightzone\rexpro\Connection;
示例
您可以通过阅读wiki中的API来找到更多信息。
以下是一些基本用法。
示例 1
$db = new Connection; //you can set $db->timeout = 0.5; if you wish $db->open('localhost', 'graph'); $result = $db->send('g.V(2)'); //do something with result $db->close();
请注意,“graph”是gremlin-server中配置的图的名字(而不是遍历的引用,即g = graph.traversal()
)
示例 1 bis(使用消息对象编写相同的内容)
$db = new Connection; //you can set $db->timeout = 0.5; if you wish $db->open('localhost', 'graph'); $db->message->gremlin = 'g.V(2)'; $result = $db->send(); //automatically fetches the message //do something with result $db->close();
示例 2(使用绑定)
$db = new Connection; $db->open('localhost:8182', 'graph'); $db->message->bindValue('CUSTO_BINDING', 2); $result = $db->send('g.V(CUSTO_BINDING)'); //mix between Example 1 and 1B //do something with result $db->close();
示例 3(使用会话)
$db = new Connection; $db->open('localhost:8182'); $db->send('cal = 5+5', 'session'); $result = $db->send('cal', 'session'); // result = [10] //do something with result $db->close();
示例 4(事务)
$db = new Connection; $db->open('localhost:8182','graphT'); $db->transactionStart(); $db->send('n.addVertex("name","michael")'); $db->send('n.addVertex("name","john")'); $db->transactionStop(FALSE); //rollback changes. Set to true to commit. $db->close();
请注意,“graphT”上方指的是支持事务的图。事务会自动开始会话。
示例 5(使用消息对象)
$message = new Messages; $message->gremlin = 'g.V()'; $message->op = 'eval'; $message->processor = ''; $message->setArguments([ 'language' => 'gremlin-groovy', // .... etc ]); $message->registerSerializer('\brightzone\rexpro\serializers\Json'); $db = new Connection; $db->open(); $result = $db->send($message); //do something with result $db->close();
当然,您也可以通过$db->message以相同的方式影响当前数据库消息。
添加序列化器
此库附带Json和一个未使用的旧Msgpack序列化器。任何实现了SerializerInterface的序列化器都可以通过以下方式动态添加
$db = new Connection; $serializer = $db->message->getSerializer() ; // returns an instance of the default JSON serializer echo $serializer->getName(); // JSON echo $serializer->getMimeType(); // application/json $db->message->registerSerializer('namespace\to\my\CustomSerializer', TRUE); // sets this as default $serializer = $db->message->getSerializer(); // returns an instance the CustomSerializer serializer (default) $serializer = $db->message->getSerializer('application/json'); // returns an instance the JSON serializer
您可以通过这种方式添加多个序列化器。当gremlin-server响应对您的请求时,gremlin-client-php将能够使用适当的一个来反序列化消息。
单元测试
您需要运行以下配置文件来运行gremlin-server:src/tests/gremlin-server-php.yaml
只需将此文件复制到<gremlin-server-root-dir>/conf/
,然后使用以下命令运行服务器:
bin/gremlin-server.sh conf/gremlin-server-php.yaml
请注意,如果没有titan09-SNAPSHOT安装和自定义配置,您将无法测试事务。如果您需要更多信息,请开始一个问题。