Skip to content
This repository has been archived by the owner on Aug 7, 2024. It is now read-only.

Latest commit

 

History

History
94 lines (72 loc) · 2.67 KB

readme.md

File metadata and controls

94 lines (72 loc) · 2.67 KB

Attention!

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!

SwagGraphQL

A simple plugin that exposes an GraphQL-API for the Shopware Platform Core-API.

Installation

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

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

Custom Fields

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(),
        ];
    }
}

Dependencies

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.

Known Problems

Nested connections don't really work. The connection information (total, pageInfo and aggregation) aren't returned.