Graphael is a framework for rapidly building GraphQL API Servers.
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();The server is being instantiated with a $config array that contains the following configuration required options:
environment_prefix: Prefix of your environment config variablestype_path: Directory to scan for Type class filestype_namespace: Namespace of your Type classes. Should match PSR 4 namespace in yourcomposer.jsontype_postfix: Postfix of your type classes. Defaults toType.
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 absencerolesclaim (default:'AUTHENTICATED')
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=supersecretSupported environment variables:
DEBUG: Set to1to run the app in debug modePDO_URL: Connection string to your database. Supports all PDO backendsJWT_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.
If the JWT_KEY environment variable is defined, the server checks for a JWT in one of two places:
- A
jwtquery parameter (i.e./graphql?jwt=abc.def.ghi) - A
AuthorizationHTTP header (i.e.Authorization: Bearer abc.def.ghi)