graphQL相关

  • 入门介绍

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。
    
  • 查询和其结果拥有几乎一样的结构。这是 GraphQL 最重要的特性,因为这样一来,你就总是能得到你想要的数据,而服务器也准确地知道客户端请求的字段。

  • GraphQL 查询能够遍历相关对象及其字段,使得客户端可以一次请求查询大量相关数据,而不像传统 REST 架构中那样需要多次往返查询。

  • 在类似 REST 的系统中,你只能传递一组简单参数 —— 请求中的 query 参数和 URL 段。但是在 GraphQL 中,每一个字段和嵌套对象都能有自己的一组参数,从而使得 GraphQL 可以完美替代多次 API 获取请求。甚至你也可以给 标量(scalar)字段传递参数,用于实现服务端的一次转换,而不用每个客户端分别转换。

  • 没看明白,

  • graphQL比rest好在哪?

    rest一次只能请求一个资源,会造成太多的http请求
    http 三次握手
    
  • graphQL查询还是走的http协议

  • http协议属于tcp/ip协议中的一种,是需要经过三次握手的操作的

  • post请求去查

  • 参数为

    {query: "{↵ test↵}↵", variables: null}
      query: "{↵  test↵}↵"
      variables: null
    
  • 增加数据

    mutation{
      createPapers(
        id: "paper_id_5",
        paperName: "paper_name_5",
        updateTime: "2020-08-20"
      ){
        id
        paperName
        updateTime
      }
      createBooks(
        id: "5"
        name: "name5"
      ){
        id
        name
      }
    }
    
  • 查询数据

    query{
      papers{
        id
        paperName
        updateTime
      }
      books{
        id
        name
      }
      book{
        id
        name
      }
      test
    }
    
  • 修改数据

    
    
  • graphQL可以与哪些存储结合?

    • neo4j
    • mysql
    • elasticsearch
  • 整理一下graphQL的特性

    1、graphQL是声明式的数据查询,即调用方需要什么字段的数据,就把什么字段名传给被调用方,服务器会按数据查询的格式返回同样结构的 JSON 数据、真正照顾了客户端的灵活性,这是graphQL最重要的特性: 所查即所得。举例如下:
    	查询体:
    	query{
          papers{
            id
            paperName
            updateTime
          }
          books{
            id
            name
          }
          book{
            id
            name
          }
          test
        }
        返回值:
        {
          "data": {
            "papers": [
              {
                "id": "paper_id_1",
                "paperName": "paper_name_1",
                "updateTime": "2020-08-19"
              },
              {
                "id": "paper_id_2",
                "paperName": "paper_name_2",
                "updateTime": "2020-08-19"
              },
              {
                "id": "paper_id_3",
                "paperName": "paper_name_3",
                "updateTime": "2020-08-19"
              },
              {
                "id": "paper_id_4",
                "paperName": "paper_name_4",
                "updateTime": "2020-08-19"
              }
            ],
            "books": [
              {
                "id": "1",
                "name": "name1"
              },
              {
                "id": "2",
                "name": "name2"
              },
              {
                "id": "3",
                "name": "name3"
              },
              {
                "id": "4",
                "name": "name4"
              }
            ],
            "book": {
              "id": "1",
              "name": "name1"
            },
            "test": "test"
          }
        }
    2、GraphQL 的数据操作也分为 Query, Mutation, Subscription 三种类型。简单来讲, Query 就是获取数据的基本查询;Mutation 支持对数据的增、删、改等操作;而 Subscription 则用于监听数据变动、并靠 Websocket 等协议推送变动的消息给订阅方。这些操作中每一种都只是根据 GraphQL 标准构造的一段字符串而已。
    3、graphQL本身只是一个查询语言,当graphql查询请求传送到后端时,后端接收到的只是一个graphql的schema,通过后台代码对schema的解析实现数据的查询。
    
  • 整理一下graphql的优点

    1、声明式地数据获取
    	如之前看到的那样,GraphQL 在使用查询语句式,使用声明式的方式获取数据。客户端在一个查询请求中,选择需要的数据和相关的字段实体。客户端根据其 UI 来决定需要的字段。你可以说这是 UI 驱动地数据获取。比方说,Airbnb 使用 GraphQL的例子,在 Airbnb 中的一个搜索界面,经常需要搜索房屋的住房体验和其他相关的一些信息,为了能在一个请求中检索所有的数据,一个 GraphQL 查询会根据 UI 选择数据中的一部分达到完美的匹配。毕竟,GraphQL 提供了极佳的关注点分离方式:客户端知道它需要什么数据,服务端知道数据的结构,以及如何从一些数据源(比如数据库、微服务、第三方 API)中拉取数据。
    2、在 GraphQL 中没有过度获取
    	使用 GraphQL 不会存在过度获取的现象。使用与 Web 客户端公用的一个 RESTful API,一个移动客户端很可能会获取过多的数据,但是使用同样的 GraphQL API,移动客户端可以选择和 Web 客户端不同的数据字段。因此移动客户端能减少获取的信息,因为相对于 Web 应用的更大的屏幕,小屏幕上可能显示不了那么多信息。GraphQL 通过最开始按客户端需求选择数据,减少了传输数据的大小。
    3、优化查询效率
    	当要查询多个数据源的不同字段数据时,往往restful接口要请求多次,而通过graphql查询只需要请求一次。
    4、GraphQL 不需要进行接口的版本维护
    	在 GraphQL 中没有 API 版本的说法。在 REST 中,通常会提供一个 API 的多个版本(比如 http://api.domain.com/v1/、http://api.domain.com/v2/),因为随着时间过去,可能资源的结构也会发生变化。在 GraphQL 中,API 废弃可以做到字段级别,因此当一个客户端减少到一个废弃的字段,会得到一个废弃相关的警告。当没有客户端再使用这个废弃知道后,就可以从 schema 汇总移除这个字段了。这让一个 GraphQL API 不需要使用版本化的方式来演进。
    
  • 整理一下graphql的缺点

    1、当我们需要请求一个数据源的数据时,restful接口只需要请求一次,graphql接口也是需要请求一次,并且graphql和restful接口都是走的http协议,而http协议就免不了网络上三次握手的过程,在这种场景下,graphql并没有查询上的优势。
    2、graphql支持查询的字段,在后台都需要代码去解析,这样往往会造成这种现象:使用graphql的后台代码量会比使用restful的后台代码量多出很多。
    3、使用graphql提供接口时,会将后台支持的数据源和字段都公开出来,这样有可能会导致数据泄露等安全问题。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值