GraphQL
GraphQL 组件对 thecodingmachine/graphqlite 进行抽象。
安装
composer require hyperf/graphql
快速开始
简单查询
<?phpnamespace App\Controller;use GraphQL\GraphQL;use GraphQL\Type\Schema;use Hyperf\Di\Annotation\Inject;use Hyperf\GraphQL\Annotation\Query;use Hyperf\HttpServer\Annotation\Controller;use Hyperf\HttpServer\Annotation\PostMapping;use Hyperf\HttpServer\Contract\RequestInterface;#[Controller]class GraphQLController{/*** @var Schema*/#[Inject]protected $schema;#[PostMapping(path: "/graphql")]public function test(RequestInterface $request){$rawInput = $request->getBody()->getContents();$input = json_decode($rawInput, true);$query = $input['query'];$variableValues = isset($input['variables']) ? $input['variables'] : null;return GraphQL::executeQuery($this->schema, $query, null, null, $variableValues)->toArray();}#[Query]public function hello(string $name): string{return $name;}}
查询:
{hello(name: "graphql")}
响应:
{"data": {"hello": "graphql"}}
类型映射
<?phpnamespace App\Model;use Hyperf\GraphQL\Annotation\Type;use Hyperf\GraphQL\Annotation\Field;#[Type]class Product{protected $name;protected $price;public function __construct(string $name, float $price){$this->name = $name;$this->price = $price;}#[Field]public function getName(): string{return $this->name;}#[Field]public function getPrice(): ?float{return $this->price;}}
在 GraphQLController 中加入
<?phpuse App\Model\Product;use Hyperf\GraphQL\Annotation\Query;#[Query]public function product(string $name, float $price): Product{return new Product($name, $price);}
查询:
{hello(name: "graphql")product(name: "goods", price: 156.5) {nameprice}}
响应:
{"data": {"hello": "graphql","product": {"name": "goods","price": 156.5}}}
更多使用方法可以查看 GraphQLite 的文档。
