This was a POC for a GraphQL API fore a very early Shopware 6.0 state. It is unmaintained and untested for newer versions since then. Handle with care!
A simple plugin that exposes an GraphQL-API for the Shopware Platform Core-API.
Clone this repo in your custom/plugins
folder of your Shopware Platform Template.
run:
cd custom/plugins/SwagGraphQL
composer install
cd ../../..
bin/console plugin:install SwagGraphQL
bin/console plugin:activate SwagGraphQL
After installation the GraphQL endpoint is available under {baseUrl}/graphql/query
.
Getting started with GraphQL.
The easiest way to fiddle around with the Shopware GraphQL-API is to use GraphiQL, for example as a Chrome-Extension
You can define your custom fields, by implementing the GraphQLField
Interface and tagging your Field
either with the swag_graphql.queries
or swag_graphql.mutations
tag.
In either case you have to specify the name under which the field will be queryable inside the service tag,
either as mutation
or query
####Example:
in services.xml
:
<service id="SwagGraphQL\Actions\GenerateUserKeyAction">
<tag name="swag_graphql.queries" query="generate_user_key"></tag>
</service>
your class:
class GenerateUserKeyAction implements GraphQLField
{
public function returnType(): Type
{
return new ObjectType([
'name' => 'UserAccessKey',
'fields' => [
'accessKey' => [
'type' => Type::nonNull(Type::id())
],
'secretAccessKey' => [
'type' => Type::nonNull(Type::id())
]
]
]);
}
public function defineArgs(): array
{
return [];
}
public function description(): string
{
return 'Generates the access keys for a user.';
}
public function resolve($rootValue, $args, Context $context, ResolveInfo $info)
{
return [
'accessKey' => AccessKeyHelper::generateAccessKey('user'),
'secretAccessKey' => AccessKeyHelper::generateSecretAccessKey(),
];
}
}
It uses webonyx/graphql-php for the GraphQL part and the Shopware 6 Framework-Bundle for schema generation and query resolving.
The Tests also depend on the Shopware 6 Content-Bundle.
Nested connections don't really work. The connection information (total, pageInfo and aggregation) aren't returned.