Download the PHP package glesys/butler-graphql without Composer

On this page you can find all versions of the php package glesys/butler-graphql. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package butler-graphql

.github/workflows/test.yml Code Coverage Scrutinizer Code Quality Packagist CII Best Practices

Butler GraphQL

Butler GraphQL is an opinionated package that makes it quick and easy to provide a GraphQL API using Laravel.

Getting Started

  1. Install the glesys/butler-graphql package.

NOTE: If you're using Laravel < 5.5 or Lumen you need to register Butler\Graphql\ServiceProvider::class manually.

  1. Create a GraphQL schema file. The default location is app/Http/Graphql/schema.graphql.

  2. Create a resolver for the pendingSignups query.

  3. Create a controller with the Butler\Graphql\Concerns\HandlesGraphqlRequests trait.

  4. Add a route for your GraphQL API endpoint.

  5. Use something like GraphiQL or Insomnia to interact with your GraphQL API.

Digging Deeper

Queries

Query resolvers are represented by classes in the App\Http\Graphql\Queries namespace. They should be named the same as the query but StudlyCased, i.e. pendingSignups => PendingSignups.

Queries are invoked as a callable so all you need to do is implement the __invoke method.

The following parameters are passed to all resolving methods:

In addition to return arrayables and objects from the resolving methods you can also return callables that will be invoked with the same set of parameters.

Mutations

Mutation resolvers are represented by simple classes in the App\Http\Graphql\Mutations namespace.

Technically mutations and queries are the same thing. They can both accept arguments and return types with fields. Separating them are more of a convention than it is a requirement.

In REST, any request might end up causing some side-effects on the server, but by convention it's suggested that one doesn't use GET requests to modify data. GraphQL is similar - technically any query could be implemented to cause a data write. However, it's useful to establish a convention that any operations that cause writes should be sent explicitly via a mutation.

https://graphql.org/learn/queries/#mutations

Types

Resolving type fields is just as easy as queries and mutations. Define a simple class in the App\Http\Graphql\Types namespace and use camelCased method names for fields.

NOTE: If a field name in your GraphQL schema definition match the key (for arrayables) or property (for objects) of your source object, you don't need to define a resolver method for that field.

Interfaces

Butler GraphQL supports the use of interfaces in your schema but needs a little bit of help to be able to know what type to use for resolving fields.

The easiest way to tell Butler GraphQL what type to use is to provide a __typename key or property in your data. For example:

You can also use the resolveTypeFor[Field] in your parent's resolver to dynamically decide what type to use:

For queries and mutations you only have to define a resolveType method:

If none of the above are available Butler GraphQL will resort to the base class name of the data if it's an object.

N+1 and the Data Loader

Butler GraphQL includes a simple data loader to prevent n+1 issues when loading nested data. It's available in $context['loader'] and really easy to use:

NOTE: You can provide a default value as the second argument to the loader factory. This can be useful when you know some Articles might not have any Comments, like in the example above. Defaults to null.

Shared Data Loaders

If you have multiple resolvers working with the same underlying data you don't need to duplicate your code or deal with extra round trips to the database.

All you have to do is to define a separate loader function and reuse it in your resolvers:

Butler GraphQL will make sure that loadComments is only called once.

If you don't want to use Closure::fromCallable(...) you can change the accessibility of loadComments to public.

Splitting a Large Schema File Into Multiple Files

Butler GraphQL lets you easily split certain parts of your GraphQL schema file to separate files.

schema.graphql

schema-user-attributes.graphql

NOTE: A base schema is always required and it's recommended to stay away from multiple levels of extensions.

Customize

There's no real need to configure Butler GraphQL. It's designed with convention over configuration in mind and should be ready to go without any configuration.

If you want to override any of the available settings you can publish the configuration file using or just use the environment variables listed below.

Change the Schema Location and Namespaces

Change the Path and Pattern for Partial Schema Files

Debugging

Debugbar

Butler GraphQL has support for automatically decorating responses with additional debug information when using laravel-debugbar. Details such as database queries and memory usage will automatically be available in the response if barryvdh/laravel-debugbar is installed.

To install and activate it, simply install barryvdh/laravel-debugbar as a require-dev dependency.

When installed, make sure that APP_DEBUG is set to true, that's it.

Customizing what data to collect and include in the response is easily done by copying the default config file to config/debugbar.php and adjust as needed.

Authorization

If you need to authorize GraphQL request you can use the beforeExecutionHook method to inspect the schema and query and implement your authorization logic there.

How To Contribute

Development happens at GitHub; any typical workflow using Pull Requests are welcome. In the same spirit, we use the GitHub issue tracker for all reports (regardless of the nature of the report, feature request, bugs, etc.).

All changes are supposed to be covered by unit tests, if testing is impossible or very unpractical that warrants a discussion in the comments section of the pull request.

Code standard

As the library is intended for use in Laravel applications we encourage code standard to follow upstream Laravel practices - in short that would mean PSR-2 and PSR-4.


All versions of butler-graphql with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
amphp/amp Version ^2.5
illuminate/support Version ^11.0
webonyx/graphql-php Version ^14.3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package glesys/butler-graphql contains the following files

Loading the files please wait ....