GraphQL API vs REST API
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的更多相关文章
- 用API网关把API管起来
最开始只是想找个API网关防止API被恶意请求,找了一圈发现基于Nginx的OpenResty(Lua语言)扩展模块Orange挺好(也找了Kong,但是感觉复杂了点没用),还偷懒用Vagrant结合 ...
- lumen 构建api(dingo api)
什么是 API API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力, ...
- ASP.NET Core Web API 开发-RESTful API实现
ASP.NET Core Web API 开发-RESTful API实现 REST 介绍: 符合REST设计风格的Web API称为RESTful API. 具象状态传输(英文:Representa ...
- 通过beego快速创建一个Restful风格API项目及API文档自动化
通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...
- HTML5之本地文件系统API - File System API
HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...
- 返璞归真 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 上传文件, ...
- 【百度地图API】百度API卫星图使用方法和卫星图对比工具
原文:[百度地图API]百度API卫星图使用方法和卫星图对比工具 百度地图API推出卫星图接口也有一个月啦~ 本文除了介绍如何使用百度地图API来操作卫星图外,还顺带制作了个卫星图对比工具. 一.百度 ...
- 谈谈微服务中的 API 网关(API Gateway)
前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...
- 【quickhybrid】API的分类:短期API、长期API
前言 一切就绪,开始规划API,这里在规划前对API进行了一次分类:短期API.长期API 首先申明下,这个是在实际框架演变过程中自创的一个概念,其它混合框架可能也会有这个概念,但应该是会在原生底层来 ...
- 阿里云API网关(2)开放 API 并接入 API 网关
网关指南: https://help.aliyun.com/document_detail/29487.html?spm=5176.doc48835.6.550.23Oqbl 网关控制台: https ...
随机推荐
- Spring:Spring项目多接口实现类报错找不到指定类
spring可以通过applicationContext.xml进行配置接口实现类 applicationContext.xml中可以添加如下配置: 在application.properties中添 ...
- hsdis反汇编java源码工具的使用方法
下载地址: hsdis linux下将hsdis.so拷贝到 /usr/lib/jvm/java-11-openjdk-11.0.7.10-4.el7_8.x86_64/lib/server 目录下( ...
- STM32笔记一
1.脉冲宽度调制是(PWM):用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量.通信到功率控制与变换的许多领域中.一般用于直流电机调速. 2.外部中断:外部中断是单片机实 ...
- C语言:结构体应用
#include <stdio.h> #include <stdlib.h> #include <assert.h> typedef struct student{ ...
- python 子类调用 父类的构造函数
class A(object): def __init__(self): self.nameaa = 'aa' def funca(self): print('function a %s' % sel ...
- c++中的静态成员
引言 有时候需要类的一些成员与类本身相关联,而不是与类的每个对象相关联.比如类的所有对象都要共享的变量,这个时候我们就要用到类的静态成员. 声明类的静态成员 声明静态成员的方法是使用static关键字 ...
- 家庭账本开发day10
系统的增删改查基本功能完成,进行业务流程完整测试.完善相关功能,编写搜索 功能,通过日期,类型等关键字进行搜索,对搜索到的数据表格完成重载 // 监听搜索操作 form.on('subm ...
- 日志采集工具Flume的安装与使用方法
安装Flume,参考厦门大学林子雨教程:http://dblab.xmu.edu.cn/blog/1102/ 并完成案例1 1.案例1:Avro source Avro可以发送一个给定的文件给Flum ...
- [009] - JavaSE面试题(九):集合之Set
第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [009] - JavaSE面试题(九):集合之Set 第1问:List和Set的区别? List ...
- 使用xampp在本地环境配置虚拟域名
最近在学习ThinkPHP5.1.手册里面提到"实际部署中,应该是绑定域名访问到public目录,确保其它目录不在WEB目录下面."所以把使用xampp在本地配置虚拟域名的过程记录 ...