作为一位web开发人员,在使用REST API的时候,是否遇到过这样的问题:  

  1.调用一个API的时候,总是会返回一些不需要的信息。

  2. 对于一个资源的调用,如果想获取到更多的信息,可能需要发送多次请求才能获取。

那么现在是时候了解一下GraphQL了。

一、什么是GraphQL?

  GraphQL是FaceBook于2012年在内部开发的数据查询语言,在2015年开源,旨在提供RESTful架构的替代方案。根据官网的介绍:

GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data. GraphQL provides a complete and understandable description of the data in your API, gives clients the power to ask for exactly what they need and nothing more, makes it easier to evolve APIs over time, and enables powerful developer tools.

  GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。---- 
来源:掘金

二、为什么使用GraphQL?

  在介绍这个问题之前,先来看看REST的API吧。

  在使用了 RPC 远程过程调用接口之后,你会发现REST API的优越,这正是你梦寐以求的API定义模式。

    • 对于系统本身耦合性低,调用者不再需要了解接口内部处理和实现细节
    • 重复使用了一些 http 协议中的已定义好的部分状态动词,增强语义表现力
    • API可以随着时间而不断演进

  但随着项目的开展,你会发现有这样一些问题:

  当需要查询一个实体数据集的时候,如购物系统查询一本书籍,按照接口的定义,我们可以获取到一本书籍的所有信息。如他的ISBN,ID,name,价格,描述,等等信息。

  问题:

  1. 对于查询数据的接口,有时候需要获取数据的信息不一样,如在手机APP上,我可能需要一本书籍的ID,Name,价格。在Web应用上,我可能需要获取一本书籍的ISBN,Name,价格,描述等信息。这时候应该怎么办?

    如果只定义一个接口,那么在手机APP上获取的数据有部分内容是冗余字段。如果定义多个接口,代码会有很多冗余代码。

  2. 同样对于查询数据接口,如果获取书籍的数据的同时,我还需要获取到最近这本书籍的评价,以及相关附加信息(如标签,卖家信息)。这时候怎么办?

    你可能会说,多设计几个接口,然后根据书籍的ID 等信息,多发送几次请求,就可以获取到相关信息了。但多发送几次请求,就多传递了很多附加信息。在网络带宽低的时候,也许就是个灾难了。

  对于这两个问题,作为前端工程师的你可能需要追着后端开发工程师,希望他能给你提供一个便捷的方案。如改接口什么的,对于公司项目,尤其是多端(web、App、小程序等)的项目,改接口可能是牵一发而动全身的工作。

  那么这个时候GraphQL闪亮登场:

  就像GraphQL官方文档中说的:(要你想要的)

Ask for what you need, get exactly that

三、谁在使用GraphQL

  Facebook当然不用说,全球最大同性交友网站GitHub, Twitter,国内好像现在比较少。

四、GraphQL资源总结:

下篇文章将介绍如何使用GraphQL.Net 与C#  结合

  

GraphQL 01--- GraphQL 介绍及资源总结的更多相关文章

  1. 让ASP.NET Core支持GraphQL之-GraphQL的实现原理

    众所周知RESTful API是目前最流行的软件架构风格之一,它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. RESTful的优越性是毋庸置疑 ...

  2. 开源Math.NET基础数学类库使用(01)综合介绍

    原文:[原创]开源Math.NET基础数学类库使用(01)综合介绍 开源Math.NET基础数学类库使用系列文章总目录:   1.开源.NET基础数学计算组件Math.NET(一)综合介绍    2. ...

  3. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  4. [GraphQL] Use GraphQL's List Type for Collections

    In order to handle collections of items in a GraphQL Schema, GraphQL has a List Type. In this video, ...

  5. Nmap原理-01选项介绍

    Nmap原理-01选项介绍 1.Nmap原理图 Nmap包含四项基本功能:主机发现/端口扫描/版本探测/操作系统探测.这四项功能之间存在大致的依赖关系,比如图片中的先后关系,除此之外,Nmap还提供规 ...

  6. vue.js 2.0 官方文档学习笔记 —— 01. vue 介绍

    这是我的vue.js 2.0的学习笔记,采取了将官方文档中的代码集中到一个文件的形式.目的是保存下来,方便自己查阅. !官方文档:https://cn.vuejs.org/v2/guide/ 01. ...

  7. 01.课程介绍 & 02.最小可行化产品MVP

    01.课程介绍 02.最小可行化产品MVP 产品开发过程 最小化和可用之间找到一个平衡点

  8. .NET开源项目介绍及资源推荐:数据持久层

    在.NET平台下,关于数据持久层框架非常多,本文主要对如下几种做简要的介绍并推荐一些学习的资源: 1.NHibernate 2.NBear 3.Castle ActiveRecord 4.iBATIS ...

  9. GraphQL ---02 GraphQL和C#结合的实战项目

    本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方文档进行实践 一.项目结构: 为了更好的和原有的项目结合在一起,尽可 ...

随机推荐

  1. Bootstrap 模态框(Modal)插件id冲突

    <!DOCTYPE html><html><head>    <meta charset="utf-8">     <titl ...

  2. QProcess与外部程序的调用

    项目做到一定阶段,常常须要在原来的project上调用外部程序. Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信. 一.启动外部程序的两种方式:(1)一体式: ...

  3. Vue针对性笔记

    Github原文阅读 MVVM(Model-View-ViewModel)模型 MVVM分为Model.View.ViewModel三部分. Model代表数据模型,定义数据和业务逻辑,访问数据层 V ...

  4. Linux-系统调用理解

    系统调用即为Linux内核中设置的一组用于实现各种系统功能的子程序,操作系统通过系统调用为运行在其上的进程提供服务. 由于进程一般不能访问内核所占内存空间以及调用内核函数,为了与用户态进程进行交互,内 ...

  5. 超越村后端开发(3:安装djangorestframework+序列化+API开发前期准备)

    1.安装djangorestframework 1.安装djangorestframework及其依赖包markdown.django-filter. pip install djangorestfr ...

  6. JavaScript DOM 高级程序设计读书笔记一

    创建可重用的对象 简而言之,对象就是包含一组变量(称为属性)和函数(称为方法)的集合的实例.对象通常由类派生而来,而类中定义了对象拥有的属性和方法.如果你的脚本中都是对象之间的交互操作,那么就可以称之 ...

  7. Angular+Ionic+RSA实现后端加密前端解密功能

    因业务需要,需要给android应用安装证书,通过读取证书文件内容实现某些功能的控制: 流程:后台通过publicKey对指定内容的文件进行加密,生成文件共客户下载,客户下载后选择该证书文件读取到应用 ...

  8. 0412ooday01.txt=============对象和类(上)

    对象和类(上) 面向对象程序设计:面向过程的结构化程序设计.什么是抽象数据类型.什么是类 定义一个类:定义类的成员变量.定义类的方法 创建并使用对象:使用new关键字创建对象.引用类型变量.访问对象的 ...

  9. 树莓派3B+ 安装系统

    安装概要步骤: 官网下载系统->刷入TF卡->设置开启显示器和SSH->通电->进入系统 1. 进入官方网站下载系统镜像 下载页面:https://www.raspberryp ...

  10. ArcGIS——使用符号级别区分重叠的面图层

    1.有这样一个面图层shp文件(区域相重叠),需要做出如下右图的效果: 2.导入shp文件后,右键shp文件,属性->符号系统 3.高级->符号级别 将面积最大的图层的级别设为最小,面积最 ...