REST是构建API的一种流行方法,而且比GraphQL应用更广泛,让我们看看GraphQL和REST的区别。

Rest是一个概念

REST是一个事实上的架构标准,但它实际上没有规范,有大量的非官方定义。GraphQL有一个规范草案,它是一种查询语言,而不是一个架构,有一套围绕它的定义良好的工具(和一个繁荣的生态系统)。

REST是建立在现有的架构之上的,如HTTP,而GraphQL则是建立自己的一套规则。这可能是一个优势点,也可能不是,因为REST可以使用HTTP层上的缓存。GraphQL必须在系统中建立自己的缓存。

单一的端点

GraphQL只有一个端点,你在那里发送你的所有查询。通过REST方法,你创建了多个端点,并使用HTTP动词来区分读取动作(GET)和写入动作(POST、PUT、DELETE)。GraphQL不使用HTTP动词来确定请求类型。

根据您的需求定制

使用REST,您通常无法选择服务器返回给您的内容,除非服务器实现部分响应稀疏字段集,并且客户端使用该功能。 API维护人员无法强制执行此类过滤。

API通常会返回比你需要的多得多的信息,除非你也负责API服务,并为每个不同的请求定制响应。

在GraphQL中,情况就不同了:你向一个端点发出一个请求,只取回你需要的东西。

它避免了服务端大量冗余数据的返回,查询速度更快,更灵活。

下面我们来看一个Pizza endpoint的例子。

如果你调用GET /pizza/margherita,你将得到一个Margherita比萨。如果你调用GET /pizza/napoli,你将得到一份Napoli比萨。

如果你有30种不同的口味,你就会有30个端点(除非你把比萨饼的名字作为参数传给GET /pizza)

但也许你想要一种特定的比萨,这很容易向服务员描述,但很难向REST endpoint表达。

一个GraphQL端点可以让你调用/pizza,描述你要求的特定成分,以建立你想要的完美比萨。

GraphQL使监测字段的使用变得容易

在REST中,通常没有办法确定一个字段是否被客户端所需要,所以当涉及到重构或废弃时,不可能确定实际的使用情况。

GraphQL可以知道哪些字段被客户使用。

访问嵌套的数据资源

GraphQL产生更少的网络请求。

举个例子。访问一个人的所有朋友的姓名。如果你的REST API暴露了一个端点/person/1/friends,返回一个人朋友的信息列表,你首先通过GET /person/1得到/person/1,然后GET /person/1/friends。

除非一个人的朋友列表已经包含了朋友的名字,否则如果有100个朋友,你就需要向/person端点做101次HTTP请求,这是一个巨大的时间和资源的浪费。

使用GraphQL,你只需要一个请求,即询问一个人的朋友的名字。

类型

API是基于JSON的,不能提供类型控制。GraphQL有一个类型系统。

哪一个更好?

现在,全世界的开发者正试图找出从REST迁移到GraphQL是否适合他们的需求。

当你需要公开复杂的数据表示时,客户可能只需要数据的一个子集,或者他们经常执行嵌套查询以获得他们需要的数据时,GraphQL是一个完美的选择。

与编程语言一样,没有单一的赢家,这完全取决于你的需求。

另外,我想说的是:你可以同时使用。

你可以根据你的需要混合和使用REST和GraphQL,有时这是最好的做法。

GraphQL API vs REST API的更多相关文章

  1. 用API网关把API管起来

    最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vagrant结合 ...

  2. lumen 构建api(dingo api)

    什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...

  3. ASP.NET Core Web API 开发-RESTful API实现

    ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输(英文:Representa ...

  4. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  5. HTML5之本地文件系统API - File System API

    HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...

  6. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  7. 【百度地图API】百度API卫星图使用方法和卫星图对比工具

    原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...

  8. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

  9. 【quickhybrid】API的分类:短期API、长期API

    前言 一切就绪,开始规划API,这里在规划前对API进行了一次分类:短期API.长期API 首先申明下,这个是在实际框架演变过程中自创的一个概念,其它混合框架可能也会有这个概念,但应该是会在原生底层来 ...

  10. 阿里云API网关(2)开放 API 并接入 API 网关

    网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...

随机推荐

  1. RabbitMQ重试机制

    消费端在处理消息过程中可能会报错,此时该如何重新处理消息呢?解决方案有以下两种. 在redis或者数据库中记录重试次数,达到最大重试次数以后消息进入死信队列或者其他队列,再单独针对这些消息进行处理: ...

  2. 其他:IntelliJ IDEA设置运行内存

    1. 打开idea的安装路径,进去bin目录  2. 修改idea.exe.vmoptions  将idea内存设置为-Xms512m -Xmx2048m -XX:ReservedCodeCacheS ...

  3. JDBC:Connection.close()

    https://www.2cto.com/database/201501/369246.html Connection对象在执行close() 方法之后,并不是直接把Connection对象设置为nu ...

  4. Java实验项目三——编程实现Person类,学生类的设计及其继承关系

    Program: 编程实现Person类,学生类的设计及其继承关系 代码如下: 定义抽象类Person 1 /* 2 * Description:建立抽象类 3 * 4 * Written By:Ca ...

  5. leetcode 字符串转换整数 (模拟)

    思路分析 1.跟着题意模拟,分成几种情况来看待 2.一种全是空格 3.有可能有空格,然后有符号的 4.有可能有空格,无符号数字 5.有可能有空格,非数字开头 6.最后还需要考虑一个越界的问题,所以要除 ...

  6. Python报错“UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)”的解决办法

    最近在用Python处理中文字符串时,报出了如下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ...

  7. luogu P2710 数列

    (这是个双倍经验呀! 题目描述 维护一个可以支持插入.删除.翻转.区间赋值.求和.求值和求最大子段和操作的序列.(真·简洁) solution 基本不用什么神奇操作,平衡树硬上就行.(我用的 Spla ...

  8. C语言:冒泡排序例子

    //冒泡排序 //14个数字排序:14个数的组合:14*13/2=91次 理论上比较91次 ,实际只有39次进行了变量交换 #include <stdio.h> void bubble_s ...

  9. excel带格式复制python

    openpyxl 复制cell单元格包括所有样式 target_cell.data_type = source_cell.data_type target_cell.fill = copy(sourc ...

  10. [刘阳Java]_Spring IOC程序代码如何编写_第3讲

    第2讲我们介绍了Spring IOC的基本原理,这篇文章告诉大家Spring IOC程序代码是如何编写的,从而可以更好的理解IOC和DI的概念(所有的Java类的初始化工作扔给Spring框架,一个J ...