Neo4j Http Adapter
This package is still a work in progress, what I have tested works so far but should not be used in a production environment yet
The purpose of this package is to provide a clean and easy way to work with the neo4j HTTP API v4 to run Cypher queries and return data.
Installation
Using composer:
$ composer require juststeveking/neo4j-http-adapter
You are then free to use it as needed within your projects.
Usage
Using this library is relatively simple.
Prepare your Adapter
The adapter build method accepts 2 parameters, connection string for your neo4j database and a database name that may be null.
Please note that an Exception will be thrown if your connection string does not start with either http
or https
<?php
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$adapter = HttpAdapter::build(
'http://neo4j:password@localhost:7474',
'my_database'
);
Selecting a database to query against
<?php
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$adapter = HttpAdapter::build(
'http://neo4j:password@localhost:7474',
'my_database'
);
$database = $adapter->on('database-name');
Starting to build up a transaction
Once you have an active adapter, and have chosen your database, you will want to start running queries against it.
<?php
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$adapter = HttpAdapter::build(
'http://neo4j:password@localhost:7474',
'my_database'
);
$database = $adapter->on('database-name');
// Add a query to the transaction pipeline.
$database->query('MATCH (person:Person) WHERE person.name = "Tom Hanks" RETURN person');
// Add another query to the transaction pipeline
$database->query('MATCH (film:Film) WHERE film.name = "Forrest Gump" RETURN film');
From here we are free to send this transaction to the server
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$adapter = HttpAdapter::build(
'http://neo4j:password@localhost:7474',
'my_database'
);
$database = $adapter->on('database-name');
// Add a query to the transaction pipeline.
$database->query('MATCH (person:Person) WHERE person.name = "Tom Hanks" RETURN person');
$response = $database->send();
A cleaner approach
The point with this package was to allow you to build up your queries and send them as you see fit, not how I think they should be handled. Here is an alternative method for sending queries:
<?php
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$adapter = HttpAdapter::build(
'http://neo4j:password@localhost:7474',
null
);
$actorsDatabase = $adapter->on('actors');
$tomHanks = $actorsDatabase->query('MATCH (person:Person) WHERE person.name = "Tom Hanks" RETURN person')->send();
Or if you would prefer to chain parts of the process:
<?php
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$tomHanks = HttpsAdapter::build(
'http://neo4j:password@localhost:7474',
'actors'
)->query('MATCH (person:Person) WHERE person.name = "Tom Hanks" RETURN person')->send();
If you want to use my other packages also, you can query like below:
<?php
use JustSteveKing\Graph\Builder\Cypher;
use JustSteveKing\Graph\Connection\ConnectionManager;
use JustSteveKing\Graph\Connection\Adapters\Neo4j\Adapters\Http\HttpAdapter;
$connection = ConnectionManager::create(HttpAdapter::build('http://neo4j:password@localhost:7474', null));
$query = Cypher::query()->match('Person', 'person')->where('person', 'name', '=', 'Tom Hanks')->return('person');
$connection->use('neo-http')->on('neo4j')->query($query)->send();
Tests
There is a composer script available to run the tests:
$ composer run test
However, if you are unable to run this please use the following command:
$ ./vendor/bin/phpunit --testdox
Security
If you discover any security related issues, please email juststevemcd@gmail.com instead of using the issue tracker.