Releases: thecodingmachine/graphqlite
v4.0.3
v4.0.2
Bugfix release
Warning! This release contains a (minor) BC break about the name given to enum types.
Given the fact that enum types where almost non functionals in v4.0.1,
and given the fact it is unlikely they have been used until now, I'm exceptionnaly introducing
this BC break to introduce Enum types that are behaving in a more consistent way. See #235 for details.
- #227 #233 Fixed "enum failed to work (most of the time) as output parameters"
- #235 #232 Changed the way enums are named in the schema
Note: I do not have a clear visibility of the usage of this feature in the wild since the release of 4.0 a few weeks ago. My bet is noone will be impacted. If you are impacted by this breaking change, please fill an issue to let me know.
v4.0.1
v4.0.0
This is a complete refactoring from 3.x. While existing annotations are kept compatible, the internals have completely
changed.
New features:
- You can directly annotate a PHP interface with
@Type
to make it a GraphQL interface - You can autowire services in resolvers, thanks to the new
@Autowire
annotation - Added user input validation (using the Symfony Validator or the Laravel validator or a custom
@Assertion
annotation - Improved security handling:
- Unauthorized access to fields can now generate GraphQL errors (rather that schema errors in GraphQLite v3)
- Added fine-grained security using the
@Security
annotation. A field can now be marked accessible or not depending on the context.
For instance, you can restrict access to the field "viewsCount" of the typeBlogPost
only for post that the current user wrote. - You can now inject the current logged user in any query / mutation / field using the
@InjectUser
annotation
- Performance:
- You can inject the Webonyx query plan in a parameter from a resolver
- You can use the dataloader pattern to improve performance drastically via the "prefetchMethod" attribute
- Customizable error handling has been added:
- You can throw GraphQL errors with
TheCodingMachine\GraphQLite\Exceptions\GraphQLException
- You can specify the HTTP response code to send with a given error, and the errors "extensions" section
- You can throw many errors in one exception with
TheCodingMachine\GraphQLite\Exceptions\GraphQLAggregateException
- You can throw GraphQL errors with
- You can map a given PHP class to several PHP input types (a PHP class can have several
@Factory
annotations) - You can force input types using
@UseInputType(for="$id", inputType="ID!")
- You can extend an input types (just like you could extend an output type in v3) using the new
@Decorate
annotation - In a factory, you can exclude some optional parameters from the GraphQL schema
Many extension points have been added
- Added a "root type mapper" (useful to map scalar types to PHP types or to add custom annotations related to resolvers)
- Added "field middlewares" (useful to add middleware that modify the way GraphQL fields are handled)- Added a "parameter type mapper" (useful to add customize parameter resolution or add custom annotations related to parameters)
New framework specific features:
Symfony:
- The Symfony bundle now provides a "login" and a "logout" mutation (and also a "me" query)
Laravel:
- Native integration with the Laravel paginator has been added
Internals:
- The
FieldsBuilder
class has been split in many different services (FieldsBuilder
,TypeHandler
, and a
chain of root type mappers) - The
FieldsBuilderFactory
class has been completely removed. - Overall, there is not much in common internally between 4.x and 3.x. 4.x is much more flexible with many more hook points
than 3.x. Try it out!
v3.1.1
v3.1.0
v3.0.1
v3.0.0
First stable release of GraphQLite
GraphQLite is PHP library that allows you to write your GraphQL queries in simple-to-write controllers.
- Create a complete GraphQL API by simply annotating your PHP classes
- Framework agnostic, but Symfony and Laravel bindings available!
- Comes with batteries included: queries, mutations, mapping of arrays / iterators, file uploads, extendable types and more!
After several months of work, we are very happy to announce the availability of GraphQLite v3.0.
If you are wondering where are v1 and v2... yeah... GraphQLite is a fork of "thecodingmachine/graphql-controllers" that already had a v1 and a v2. But so much has changed that it deserved a new name!
Basic example
First, declare a query in your controller:
class ProductController
{
/**
* @Query()
*/
public function product(string $id): Product
{
// Some code that looks for a product and returns it.
}
}
Then, annotate the Product
class to declare what fields are exposed to the GraphQL API:
/**
* @Type()
*/
class Product
{
/**
* @Field()
*/
public function getName(): string
{
return $this->name;
}
// ...
}
That's it, you're good to go 🎉! Query and enjoy!
{
product(id: 42) {
name
}
}