本篇文章带大家了解一下GraphQL,并详细介绍PHP中安装和使用GraphQL的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
关于 GraphQL
GraphQL 是一种现代化的 HTTP API 接口构建方式,客户端可以按需
查询需要的数据。
GraphQL 可以提升 API 调用的灵活性,我们可以像写数据库查询语句一样来请求 API 来获取所需要的数据,这对构建复杂的 API 查询来说非常有用。
与REST对比
REST的核心思想就是资源,每个资源都能用一个URL来表示,你能通过一个GET请求访问该URL从而获取该资源。根据当今大多数API的定义,你很有可能会得到一份JSON格式的数据响应,整个过程大概是这样:
GET /user/1 { "username":"姓名", "age":20,<i>1本文来#源gaodai$ma#com搞$代*码*网</i><pre>搞代gaodaima码
"sex":"男"
}
GET /book/1 { "book":"书名", "author":"作者", "country":"中国" }
从上面的示例可以看出,如果前端需要user/1
和book/1
的时候需要调用2次
接口,并且如果前端只需要user/1
里面的username
,而上面的接口获取了username
以外的数据,那么对于前端而言,除 username
之外的数据无处可用,造成了资源的浪费。
如果我们使用GraphQL
来进行查询的话,与REST方式相比,只需要调用一次并且可以查询我们指定的字段,避免了资源的浪费,并且更加高效。
query { user(id:1) { username } book(id:1){ book, author, country } }
安装graphql-php包
composer require webonyx/graphql-php
开始
1、安装完成之后,我们先编写一个简单示例,来看看graphql-php怎么用,具体代码如下:这段代码中,我们定义了一个名为phoneNumber
的字段,然后通过postman来调用我们编写的代码。
<?php require_once __DIR__ . '/vendor/autoload.php'; use GraphQL\Type\Schema; use GraphQL\Type\Definition\ObjectType; use GraphQL\Type\Definition\Type; use GraphQL\GraphQL; $queryType = new ObjectType([ 'name' => 'Query', 'fields' => [ 'phoneNumber' => [ 'type' => Type::int(), 'resolve' => function () { return 1875555555; } ] ], ]); $schema = new Schema([ 'query' => $queryType, ]); $rawInput = file_get_contents('php://input'); $input = json_decode($rawInput, true); $query = $input['query']; $variableValues = isset($input['variables']) ? $input['variables'] : null; try { $rootValue = ['prefix' => 'prefix: ']; $result = GraphQL::executeQuery($schema, $query, $rootValue, null, $variableValues); $output = $result->toArray(); } catch (\Exception $e) { $output = [ 'errors' => [ [ 'message' => $e->getMessage() ] ] ]; } header('Content-Type: application/json'); echo json_encode($output);
2、使用postman来调用我们刚刚编写的代码,以下是我们查询结果的示例