A PHP port of GraphQL reference implementation
Go to file
Derek Lavigne d22385cc93 Update query variable coercion to meet the rules outlined in the
specification.

The framework currently coerces query variables similar to the way it
treats output values, which means it attempts to coerce the value into
the field's corresponding data type regardless of the received value.
According to items 3f and 3g in section 6.1.2
(http://facebook.github.io/graphql/#sec-Validating-Requests) of
Facebook's GraphQL specification query variables should be coerced
according to their type's input coercion rules laid out in section
3.1.1 (http://facebook.github.io/graphql/#sec-Scalars). If the value
can not be coerced into the correct type according the the input
coercion rules for the type a query error should be thrown. This
ensures that client provided query variables were of the correct format
and will be a valid format and type by the time they are passed into an
implementing resolver.

This patch fixes the above issue by updating the way query variables
are sanitized during the process of parsing the query. It directly
follows the rules for scalar input coercion laid out by the
specification and throws query errors when a value that cannot be
coerced to the correct type is given. Tests for isValidPHPValue will
also be updated to ensure that it is doing the correct type checks on
Values::isValidPHPValue for the given type and value provided. A new
test case will also be added to test Values::getVariableValues and make
sure it is also enforcing the scalar input coercion rules and throwing
errors for invalid values.
2017-09-18 12:14:09 -04:00
benchmarks Removed schema descriptor (as lazy loading of types can work without it now) 2017-08-14 01:42:02 +07:00
docs Fixed minor error in docblock comment 2017-08-21 00:19:07 +07:00
examples New example for server usage 2017-08-20 02:33:16 +07:00
src Update query variable coercion to meet the rules outlined in the 2017-09-18 12:14:09 -04:00
tests Update query variable coercion to meet the rules outlined in the 2017-09-18 12:14:09 -04:00
tools Docblocks improvements 2017-08-20 22:10:13 +07:00
.gitattributes Added .gitattributes for repository 2016-09-14 19:35:03 +07:00
.gitignore Updated .gitignore 2015-07-16 00:13:12 +06:00
.travis.yml Server: fixed broken Travis build 2017-08-15 21:56:21 +07:00
CHANGELOG.md v0.10.2 2017-08-30 23:33:58 +07:00
composer.json Added psr/http-message as a dev dependency to ensure that unit tests run without additional deps installation steps 2017-08-19 22:58:44 +07:00
CONTRIBUTING.md Added CONTRIBUTING.md and updated README.md 2017-08-22 17:05:54 +07:00
LICENSE Initial commit 2015-07-15 22:51:22 +06:00
mkdocs.yml Documentation improvements 2017-08-20 22:10:37 +07:00
phpbench.json Added phpbench for benchmarking 2016-09-14 18:41:02 +07:00
phpunit.xml.dist Changed ReactPromiseAdapter::all to preserve the array key order and added tests 2016-12-22 15:08:28 +02:00
README.md Added entry about graphql.org in the README + minor README tweaks 2017-08-22 17:24:17 +07:00
UPGRADE.md Added entries about deprecation of old server and type resolution strategies to UPGRADE.md document 2017-08-20 23:16:23 +07:00

graphql-php

Build Status Coverage Status Latest Stable Version License

This is a PHP implementation of the GraphQL specification based on the reference implementation in JavaScript.

Installation

Via composer:

composer require webonyx/graphql-php

Documentation

Full documentation is available on the Documentation site as well as in the docs folder of the distribution.

If you don't know what GraphQL is, visit this official website by the Facebook engineering team.

Examples

There are several ready examples in the examples folder of the distribution with specific README file per example.

Contribute

Please refer to CONTRIBUTING.md for information on how to contribute.

Old README.md

Here is a link to the old README.md.

Keep in mind that it relates to the version 0.9.x. It may contain outdated information for newer versions (even though we try to preserve backwards compatibility).