资讯专栏INFORMATION COLUMN

GraphQL 科普 前端向

Bmob / 1854人阅读

摘要:样例前端传入字段和结构。后台按照前端的需求返回数据。则将前后台通信直接分为两大类和。顾名思义,是默认的操作符,代表查询,是不会给服务端带来副作用的请求。文档文档部分文档就是前端向后台描述所需的字段。降低前后端沟通成本。

简介

GraphQL是基于「类型系统」来执行查询的查询语言。

Facebook 2012 年开始使用 GraphQL,15年开源。

graph定义了一套标准,用于描述服务端和客户端的通信。可以使用任意语言来实现graph所描述的功能。就和ECMAScript标准之于JavaScript一样。

样例

前端传入字段和结构。后台按照前端的需求返回数据。

一个GraphQL请求由两部分组成。 操作符文档

操作符

GraphQL作为前后台交互的中间层,不能只有查询功能,在REST中,有GETPOSTDELETE等类型的请求。

GraphQL则将前后台通信直接分为两大类 querymutation

query

顾名思义,query默认的操作符,代表查询,是不会给服务端带来副作用的请求。没有操作符的话会默认是query操作符,上面的动图就是省略了query操作符。 完整的请求其实是这样的。

query {
    hero {
       name
    }
}
mutation

mutation代表一个动作,会给服务器带来修改。比如增删改。例如:

mutation addMessage($input: MessageType!) {
  addMessage(input: $input) {
    id
    text
  }
}

返回结果

{
    "addMessage": {
      "label": "测试的一个message",
      "id": "0RaqSeOL0"
    }
}

($input: MessageType!) 可能会一头雾水,这写只是定义传参的一些语法,过过文档就可以学会。

subscription

subscription, 订阅操作符还未纳入标准,但是已经被实现应用了。订阅操作符的功能是像服务端监听一个操作。就像VUE里面的watch一样。只是我们watch的是服务端。一旦服务端发生了我们订阅的改变,服务端就会主动把变化推送给我们。自己的业务代码里面再也不要维护什么轮询,定时器啦。

文档

文档部分:

{
  hero {
    name
    height
  }
}

文档就是前端向后台描述所需的字段。也是前端觉得最爽的地方,数据结构清晰明了。发送什么样的请求,拿到什么样的数据。

观察文档,文档是由 类型字段 构成的。GraphQL是强类型语言。如果使用过typescript就很好理解。

可以认为,我们规定了一种对象,它们一定有定义的属性。

hero就是一个类型。nameheight就是字段。

特点

获取多类资源,只用一个请求。

前端控制:是客户端指定的查询,端从被动为主动,想要什么拿什么。

层次结构化: 操作粒度为字段级别,可读性好,查询的结构和结果非常相似。

开发友好:得益于强类型,GraphQL可以在编写代码时就检查语句是否错误,也能智能提示类型下的字段。可以自动生成文档,提供丰富的体验。

降低前后端沟通成本。

REST对比

随着系统发展,REST的接口持续平面增长,GraphQL 只需增加类型,更加利于维护。

如果是复杂的客户端,一个页面往往需要调用多个接口,GraphQL 只需调用一次即可,一次请求到所有数据。

REST 所操作的资源相对是离散的(接口接口接口),GraphQL的数据更有整体性(因为是类型构成)。

社区框架

目前前端客户端主要有ApolloRelay,他们的作用就和axios一样,方便我们构造请求。因为业务中主要用到vue,有vue-apollo所以我选择的是Apollo

vue-apollo自带了store层,方便进行数据缓存,vuex也可以去掉了。

资料

我用vue-cli生成了一个简单的增删改查的项目。 可以对照着文档自己敲代码。 GraphQL_demo

文章

阻碍你使用 GraphQL 的十个问题

30分钟理解GraphQL核心概念

RPC vs REST vs GraphQL

文档

graphql官方文档

vue-apollo文档

apollo文档

github的graph样例接口(在线把玩)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100729.html

相关文章

  • 前端每周清单第 55 期: MobX 4 特性概览,iOS Hacks 分享, 分布式事务详解

    摘要:异步剪贴板操作过去的数年中,各浏览器基本上都在使用来进行剪贴板交互。而提供了新的,则为我们提供了另一种异步式的剪贴板操作方式,本文即是对该机制与接口规范的详细介绍。 showImg(https://segmentfault.com/img/remote/1460000013854167); 前端每周清单第 55 期: MobX 4 特性概览,iOS Hacks 分享, 分布式事务详解 ...

    zombieda 评论0 收藏0
  • GraphQL:一种更高效、强大和灵活的数据提供方式

    摘要:我们知道是一种从服务器公开数据的流行方式。描述所有的可能类型系统基于类型和字段的方式进行组织,而非入口端点。因此,需要对后端进行调整,以满足新的数据需求,这会降低生产力并显著降低将用户反馈集成到产品中的能力。 showImg(https://segmentfault.com/img/remote/1460000017875905?w=2234&h=974); 在前几天的《StateOf...

    waruqi 评论0 收藏0
  • GraphQL:一种更高效、强大和灵活的数据提供方式

    摘要:我们知道是一种从服务器公开数据的流行方式。描述所有的可能类型系统基于类型和字段的方式进行组织,而非入口端点。因此,需要对后端进行调整,以满足新的数据需求,这会降低生产力并显著降低将用户反馈集成到产品中的能力。 showImg(https://segmentfault.com/img/remote/1460000017875905?w=2234&h=974); 在前几天的《StateOf...

    zzbo 评论0 收藏0
  • GraphQL:一种更高效、强大和灵活的数据提供方式

    摘要:我们知道是一种从服务器公开数据的流行方式。描述所有的可能类型系统基于类型和字段的方式进行组织,而非入口端点。因此,需要对后端进行调整,以满足新的数据需求,这会降低生产力并显著降低将用户反馈集成到产品中的能力。 showImg(https://segmentfault.com/img/remote/1460000017875905?w=2234&h=974); 在前几天的《StateOf...

    eccozhou 评论0 收藏0
  • GraphQL:一种更高效、强大和灵活的数据提供方式

    摘要:我们知道是一种从服务器公开数据的流行方式。描述所有的可能类型系统基于类型和字段的方式进行组织,而非入口端点。因此,需要对后端进行调整,以满足新的数据需求,这会降低生产力并显著降低将用户反馈集成到产品中的能力。 showImg(https://segmentfault.com/img/remote/1460000017875905?w=2234&h=974); 在前几天的《StateOf...

    DTeam 评论0 收藏0

发表评论

0条评论

Bmob

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<