https://github.com/linkorb/graphael
Graphael: GraphQL Server library
https://github.com/linkorb/graphael
Last synced: about 1 month ago
JSON representation
Graphael: GraphQL Server library
- Host: GitHub
- URL: https://github.com/linkorb/graphael
- Owner: linkorb
- License: mit
- Created: 2017-11-08T14:53:34.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-10T13:10:00.000Z (almost 2 years ago)
- Last Synced: 2024-08-21T05:58:53.025Z (9 months ago)
- Language: PHP
- Size: 85 KB
- Stars: 0
- Watchers: 4
- Forks: 3
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Graphael
========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:
```json
"require": {
"linkorb/graphael": "^1.0"
}
```Create a `public/` directory, with an `index.php` file like the following:
```php
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_`:
```ini
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`)