作为一位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资源总结:

  • 官网https://graphql.github.io/
  • 中文官网http://graphql.cn/
  • GraphQL 使用指南https://www.howtographql.com/
  • Prisma https://www.prisma.io/with-graphql/
  • Apollo Graph  https://www.apollographql.com/
  • GraphQL .Net https://graphql-dotnet.github.io/docs/getting-started/introduction/ (后续的如何使用GraphQL的Demo就是参照这个文档写的)

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

  

转载于:https://www.cnblogs.com/kingkangstudy/p/10471466.html

GraphQL 01--- GraphQL 介绍及资源总结相关推荐

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

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

  2. 【GraphQL】---GraphQL的基本使用

    GraphQL介绍 GraphQL是Facebook开发的一种数据查询语言,并于2015年公开发布.它是REST API的替代品. GraphQL既是一种用于API的查询语言也是一个满足你数据查询的运 ...

  3. 【经验整理.01】Xilinx网站资源导读 ISE11版

    [经验整理.01]Xilinx网站资源导读 ISE11版 标签:   ISE   Xilinx   入门   资源   2009-09-01 20:41 序 虽然自己也曾想过,但如果不是向农要求,把曾 ...

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

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

  5. html5学习笔记---01.HTML5介绍,02.HTML5的新特性

    2013/6/10 01.HTML5介绍 a.创梦技术qq交流群:CreDream:251572072 -------------------- a.创梦技术qq交流群:CreDream:251572 ...

  6. 纪元2205量子计算机,《纪元2205》北极资源图鉴与介绍 北极资源有哪些

    原标题:<纪元2205>北极资源图鉴与介绍 北极资源有哪些 纪元2205是许多玩家的热爱,今天小编就为大家带来了纪元2205北极资源图鉴与介绍,非常直观清晰,下面就让我们一起来看看纪元22 ...

  7. Koa 学习 01 Koa 介绍和基本使用(路由、静态资源托管、中间件)

    Koa 介绍 Koa 是一个新的 web 框架,由 Express 幕后的原班人马打造,致力于成为 web 应用和 API 开发领域中的一个更小.更富有表现力.更健壮的基石. 官网:https://k ...

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

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

  9. Gatsby 学习 - 01 Gatsby 介绍、创建页面

    本文 Gatsby 版本为 v3. Gatsby 介绍 Gatsby 是一个基于 React 的静态站点生成器. Gatsby 通过 React 开发应用,当应用开发完成后,Gatsby 可以把这个 ...

最新文章

  1. 兰大博士神论文: 我和同门亲师妹是如何走到一起的?
  2. ecshop入门第一步,替换ecshop模板的显示图片
  3. 周伯文对话斯坦福教授曼宁:人机对话智能新进展需要新“图灵测试”
  4. 调优 DB2 UDB v8.1 及其数据库的最佳实践-IBM developerWorks
  5. LLBL Gen Pro 设计器使用指南
  6. 让div margin属性消失_为什么div里面打一个字之后就会有高度了呢?
  7. [深度学习] 自然语言处理 --- 基于Attention机制的Bi-LSTM文本分类
  8. 前端学习(1832):前端面试题之跨域
  9. 网页获取服务器时间,通过AFNetworking获取服务器时间
  10. 趣学 C 语言(十)—— 控制台交互(getch() vs. getchar())
  11. 扇贝有道180628每日一句
  12. 你确认退出吗 html,按退出会 执行2次弹出确认窗口,为何?
  13. 人工智能技术专家系统
  14. 客户画像、精准营销与数字化运营
  15. OpenGL ES 2.0 入门(持续更新)
  16. 2015年4月25日浙江省ACM比赛题解
  17. unityUI控制角色的动画
  18. 信息学奥赛一本通-1055:判断闰年
  19. 不一样的视角,不一样的VR
  20. (附源码)springboot公选课在线选课系统 毕业设计 142011

热门文章

  1. highcharts加载数据库数据(java版)
  2. thirft支持双向通信
  3. 使用NDK开发SQLite3
  4. Windows Phone 模拟器(Emulator) 加载程序一闪而过就自动退出的解决办法
  5. 第九步:仓库管理(成品)
  6. python实现字符串切割
  7. 机械制图中外螺纹的画法_机械制图中图纸上的各种符号代表什么意思?
  8. ios NSString 正则表达式 其它字符
  9. Java学习_day005:循环结构
  10. Xamarin XAML语言教程基本视图ContentViewg构架范围框架