ipld-eth-server/postgraphile/README.md
2019-05-02 09:55:25 -04:00

2.5 KiB

Vulcanize GraphQL API

This application utilizes Postgraphile to expose GraphQL endpoints for exposure of the varied data that VulcanizeDB tracks.

Docker use

Note: currently this image is ~500MB large (unpacked)

Build the docker image in this directory. Start the GraphiQL frontend by:

  • Setting the env variables for the database connection: DATABASE_HOST, DATABASE_NAME, DATABASE_USER, DATABASE_PASSWORD (and optionally DATABASE_PORT if running on non-standard port).
    • The specified user needs to be superuser on the vulcanizeDB database, so postgraphile can setup watch fixtures keeping track of live schema changes.
  • To limit the amount of available queries in GraphQL, a restricted user can be used for postgraphile introspection by adding env variables GQ_USER and GQ_PASSWORD.
    • By doing GRANT [SELECT | EXECUTE] on tables/functions for this user, you can selectively assign things you want available in GraphQL.
    • You still need to pass in a superuser with DATABASE_USER & DATABASE_PASSWORD for the postgraphile watch fixtures to work.
  • By default, postgraphile publishes the public schema. This can be expanded with for example GQ_SCHEMAS=public,maker
  • Run the container (ex. docker run -e DATABASE_HOST=localhost -e DATABASE_NAME=my_database -e DATABASE_USER=superuser -e DATABASE_PASSWORD=superuser -e GQ_USER=graphql -e GQ_PASSWORD=graphql -e GQ_SCHEMAS=public,anotherSchema -d my-postgraphile-image)
  • GraphiQL frontend is available at :3000/graphiql GraphQL endpoint is available at :3000/graphql

By default, this build will expose only the "public" schema and will disable mutations - to change mutation behaviour, you can use an optional config file config.toml and set the env var POSTGRAPHILE_CONFIG_PATH to point to its location. Example toml:

[database]
    name     = "vulcanize_public"
    hostname = "localhost"
    port = 5432
    gq_schemas = ["public", "yourschema"]
    gq_user = "graphql"
    gq_password = "graphql"
    disable_default_mutations = false

Building

This application assumes the use of the Yarn package manager. The use of npm may produce unexpected results.

Install dependencies with yarn and execute yarn build. The bundle produced by Webpack will be present in build/dist/.

Running

Provide the built bundle to node as a runnable script: node ./build/dist/vulcanize-postgraphile-server.js

Testing

Tests are executed via Jasmine with a console reporter via the yarn test task.