Retour au blog
PHP

GraphQL avec PHP et Symfony

10 Nov 2024 9 min
GraphQL PHP API

GraphQL : une alternative puissante au REST

GraphQL permet aux clients de demander exactement les données dont ils ont besoin. Dans des projets comme ceux de Matalto et Manymore, cette flexibilité a permis de réduire considérablement le nombre de requêtes API.

Installation avec Symfony

composer require overblog/graphql-bundle
composer require overblog/graphiql-bundle --dev

Définir un schéma

# config/graphql/types/Product.types.yaml
Product:
    type: object
    config:
        fields:
            id:
                type: "ID!"
            name:
                type: "String!"
            price:
                type: "Float!"
            category:
                type: "Category"
                resolve: "@=resolver('product_category', [value])"

Resolver

class ProductResolver implements ResolverInterface
{
    public function __construct(
        private ProductRepository $repository,
    ) {}

    public function resolve(Argument $args): array
    {
        if (isset($args['id'])) {
            return $this->repository->find($args['id']);
        }
        return $this->repository->findAll();
    }
}

class ProductCategoryResolver implements ResolverInterface
{
    public function resolve(Product $product): Category
    {
        return $product->getCategory();
    }
}

Requête GraphQL

query {
  products(first: 10) {
    id
    name
    price
    category {
      name
    }
  }
}

Avantages vs REST

  • Pas de sur-fetching : le client choisit les champs
  • Pas de sous-fetching : une seule requête pour des données liées
  • Typage fort : schéma auto-documenté
  • Évolution facile : ajout de champs sans casser les clients existants