linkorb/graphael

Graphael: GraphQL Server builder

Installs: 652

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 4

Forks: 3

Open Issues: 2

Type:application

v1.22.1 2023-04-12 14:31 UTC

README

Graphael is a framework for rapidly building GraphQL API Servers.

Usage

Create a new project directory, and add the following line to your composer.json in the require section:

"require": {
  "linkorb/graphael": "^1.0"
}

Create a public/ directory, with an index.php file like the following:

<?php

use Graphael\Server;
use Symfony\Component\Dotenv\Dotenv;

$loader = require_once __DIR__.'/../vendor/autoload.php';

// Load .env file if it exists
$envFilename = __DIR__ . '/../.env';
if (file_exists($envFilename)) {
    $dotenv = new Dotenv();
    $dotenv->load($envFilename);
}

// Application level configuration
$config = [
    'environment_prefix' => 'MY_API_',
    'type_namespace' => 'MyApi\\Type', //
    'type_path' => __DIR__ . '/../src/Type' // Directory to scan for Type classes
    'type_postfix' => 'Type',
];

// Instantiate a GraphQL server based on the configuration
$server = new Server($config);
$server->handleRequest();

Application configuration

The server is being instantiated with a $config array that contains the following configuration required options:

  • environment_prefix: Prefix of your environment config variables
  • type_path: Directory to scan for Type class files
  • type_namespace: Namespace of your Type classes. Should match PSR 4 namespace in your composer.json
  • type_postfix: Postfix of your type classes. Defaults to Type.

And following optional:

  • jwt_username_claim: Claim in JWT that will be used to get username (default: 'username')
  • jwt_roles_claim: Claim in JWT for user roles (default: 'roles')
  • jwt_default_role: Default user role in case of absence roles claim (default: 'AUTHENTICATED')

Environment configuration

Create a .env file (or use other means to configure your application's environment variables).

Each variable is prefixed with the environment_prefix defined earlier, in this example MY_API_:

MY_API_DEBUG=1
MY_API_PDO_URL=mysql://username:password@localhost/my_db
MY_API_JWT_KEY=supersecret

Supported environment variables:

  • DEBUG: Set to 1 to run the app in debug mode
  • PDO_URL: Connection string to your database. Supports all PDO backends
  • JWT_KEY: Optional. If defined, the API only allows connections with JWTs signed with this key. Can be a string value or an absolute path to a public key file.

Authentication

If the JWT_KEY environment variable is defined, the server checks for a JWT in one of two places:

  1. A jwt query parameter (i.e. /graphql?jwt=abc.def.ghi)
  2. A Authorization HTTP header (i.e. Authorization: Bearer abc.def.ghi)