A very simple web application using Neo4j with Elixir, Phoenix, and: Bolt.Sips; an Elixir driver for Neo4j's Bolt network protocol.
These are the components of our Web Application:
- Application type: Elixir Phoenix web application
- Web framework: Phoenix
- Persistence Access: Bolt.Sips
- Database: Neo4j Server
- Frontend: jquery, bootstrap
- Elixir and Phoenix
- a local (or remote) Neo4j graph database server. This demo will connect to a local Neo4j server instance, available at:
localhost
, with the Bolt protocol enabled on port:7687
- the Neo4j Movie Database. Open the Neo4j Browser.
Then install the Movies dataset with
:play movies
, click and hit the "Run" button.
$ git clone https://github.com/florinpatrascu/bolt_movies_elixir_phoenix
$ cd bolt_movies_elixir_phoenix
$ mix do deps.get, deps.compile
Edit the config/config.exs
and describe the Neo4j server endpoint, example:
config :bolt_sips, Bolt,
hostname: 'localhost',
port: 7687,
pool_size: 10,
max_overflow: 5
If your server requires basic authentication, add/uncomment this in your config file:
basic_auth: [username: "neo4j", password: "*********"],
more details and examples, here: Bolt.Sips
Note that to get Jason to work, this is added in the movie_controller.ex
. You will not need this if you are going back to Poison.
require Protocol
Protocol.derive(Jason.Encoder, Bolt.Sips.Types.Node)
Protocol.derive(Jason.Encoder, Bolt.Sips.Types.UnboundRelationship)
Start the Phoenix server:
$ cd bolt_movies_elixir_phoenix
$ mix phoenix.server
Point your browser to: http://localhost:4000
, and you'll see the following "welcome" screen:
Click on the movie names, to see the cast and the roles for each member of the crew. Or just search movies by typing in a partial name, i.e. atlas
, apollo
, and so on.
Oh, oh, and some HTTP REST endpoints too, of course :)
# JSON object for single movie with cast
$ curl -H "Accept:application/json" \
http://localhost:4000/movies/findByTitle?title=The%20Matrix
# list of JSON objects for movie search results
$ curl -H "Accept:application/json" \
http://localhost:4000/movies/findByTitleContaining?title=matrix
# JSON object for the whole graph viz (nodes, links - arrays)
$ curl -H "Accept:application/json" \
http://localhost:4000/movies/graph?limit=100
- using most of the UI from: neo4j-examples/movies-java-spring-data-neo4j-4. Thank you!