加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

介绍PHP中如何安装和使用GraphQL

发布时间:2022-07-19 13:39:15 所属栏目:PHP教程 来源:互联网
导读:关于 GraphQL GraphQL 是一种现代化的 HTTP API 接口构建方式,客户端可以按需查询需要的数据。 GraphQL 可以提升 API 调用的灵活性,我们可以像写数据库查询语句一样来请求 API 来获取所需要的数据,这对构建复杂的 API 查询来说非常有用。 与REST对比 REST
  关于 GraphQL
  GraphQL 是一种现代化的 HTTP API 接口构建方式,客户端可以按需查询需要的数据。
  GraphQL 可以提升 API 调用的灵活性,我们可以像写数据库查询语句一样来请求 API 来获取所需要的数据,这对构建复杂的 API 查询来说非常有用。
 
  与REST对比
  REST的核心思想就是资源,每个资源都能用一个URL来表示,你能通过一个GET请求访问该URL从而获取该资源。根据当今大多数API的定义,你很有可能会得到一份JSON格式的数据响应,整个过程大概是这样:
 
  
 
  GET /user/1
 
  {
 
      "username":"姓名",
 
      "age":20,
 
      "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
 
   }
 
  }
 
  推荐学习:《PHP视频教程》
 
  安装graphql-php包
 
  composer require webonyx/graphql-php
 
  开始
  1、安装完成之后,我们先编写一个简单示例,来看看graphql-php怎么用,具体代码如下:这段代码中,我们定义了一个名为phoneNumber的字段,然后通过postman来调用我们编写的代码。
 
  
 
  <?php
 
  require_once __DIR__ . '/vendor/autoload.php';
 
  use GraphQLTypeSchema;
 
  use GraphQLTypeDefinitionObjectType;
 
  use GraphQLTypeDefinitionType;
 
  use GraphQLGraphQL;
 
  
 
  $queryType = new ObjectType([
 
      'name' => 'Query',
 
      'fields' => [
 
          'phoneNumber' => [
 
              'type' => Type::int(),
 
              'resolve' => function () {
 
                  return 1875555555;
 
              }
 
          ]
 
  $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) {
 
  }
 
  header('Content-Type: application/json');
 
  echo json_encode($output);
 
  2、使用postman来调用我们刚刚编写的代码,以下是我们查询结果的示例
 
  1.png
 
  介绍
  从上面的示例中,我们可以看到示例主要引入了4个类
  
 
 
  use GraphQLTypeSchema;
 
  use GraphQLTypeDefinitionObjectType;
 
  use GraphQLTypeDefinitionType;
 
  use GraphQLGraphQL;
 
  Schema 类
  Schema 是类型层次结构的容器,它接受构造函数中的根类型并向内部 GrahpQL 工具提供接收你的类型信息的方法。
 
  配置选项
  包含以下选项的数组:
 
  Option Type Notes
  query ObjectType 必须。 读取 API 中包含根级字段的对象类型 (通常命名为 "Query"),用于读取数据
  mutation ObjectType 写入 API 中包含根级字段的对象类型 (通常命名为 "Mutation"),数据变更时会用到
  subscription ObjectType 保留用于将来的描述实现。目前表现为 graphql-js 自检查询的兼容,用于各种客户端 (如 Relay 或 GraphiQL)
  directives Directive[] 默认包含内建指令 @skip 和 @include 。
 
  如果你传递自定义指令并且依然想使用内建指令,请声明添加它们。例如:
 
  array_merge(GraphQL::getStandardDirectives(), [$myCustomDirective]);
  types ObjectType[] 对象类型类表,它在静态 schema 解析期间是不能被 graphql-php 发现的。
 
  配置选项
  Option Type Notes
  name string 必须。 Schema 中此对象的唯一名称
  fields array or callable 必须。 描述对象字段或可调用返回此类数组的数组。
  description string 呈现于客户端的参数文本说明(例如:用于 GraphiQL 自动生成文档 )
  interfaces array or callable 此类型实现的接口列表或返回此类列表的可调用接口。
  内置标量类型
 
  Type::float();   // Float 类型
 
  Type::boolean(); // Boolean 类型
 
  Type::id();      // ID 类型
 
  字段参数
  GraphQL 对象类型上的所有字段都有 0 个或多个参数,使用在 args 的字段定义上。每个参数数组参考以下说明:
 
  Option Type Notes
  name string 必须。 参数名称。 为空时,使用 args 数组键值
  type Type 必须。
  description string 呈现于客户端的参数文本说明
  defaultValue scalar 当前参数默认值

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读