问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Github 为什么开放了一套 GraphQL 版本的 API

发布网友 发布时间:2022-04-24 05:54

我来回答

3个回答

懂视网 时间:2022-05-12 03:32

GraphQL是一种新的API标准,本质是一个用于 API 的查询语言;它提供了一种高效、强大和灵活的数据查询方式。下面本篇文章就来带大家了解一下GraphQL,介绍GraphQL的优点和缺点,希望对大家有所帮助。

GraphQL是什么?

GraphQL是直接为不同的API创建的,一个用于 API 的数据查询语言,一种新的API标准,一个执行引擎。它主要目的是使用简单描述数据需求和交互的灵活语法和系统。

GraphQL的优点和缺点

没有人可以说工具是完全完美的。当您考虑开始使用GraphQL时,最好了解它的优点和缺点。

优点

1、请求并得到所要的数据

将GraphQL查询发送到您的API并获得您需要的内容;GraphQL查询始终返回可预测的结果;使用GraphQL的应用程序快速而稳定。

2、在单个请求中获取许多资源

GraphQL 询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。GraphQL 可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用 GraphQL 的应用也能表现得足够迅速。

3、描述类型系统的可能性

GraphQL是强类型的,查询基于字段及其关联的数据类型。如果GraphQL查询中存在类型不匹配,则服务器应用程序将返回明确且有用的错误消息。这有助于客户端应用程序顺利调试和轻松检测错误。GraphQL还提供了客户端库,可以帮助减少显式数据转换和解析。

4、功能强大的开发人员工具

GraphQL为文档和测试查询提供了丰富的开发人员工具。GraphiQL是一个出色的工具,可以生成查询及其模式的文档。它还提供了一个查询编辑器,用于在构建查询时测试GraphQL API和智能代码完成功能。

5、开发时间较短。

使用GraphQL的一个主要好处是,可以更快地完成一些开发工作。例如,代替编写巨大的代码文本,仅使用一个或两个主要功能来实现您的需求就足够了。

缺点

GraphQL缺乏适当的中间件结构。这可以通过将其划分为不同的方案来解决。可以创建API,以便根据需要关闭的中间件对功能进行分组,但许多方案不是最佳选择。

当然,如果整个项目功能紧凑,开发过程就不会停滞不前。请记住,您可能必须处理此类问题。

另一件事是bug的问题。我们必须承认并记住,在开发过程中,如果面临几个严重且有害的错误,这将导致无法正确管理API。

热心网友 时间:2022-05-12 00:40

背景

GitHub 宣布开放了一套使用 GraphQL 开发的公共 API。

GitHub 的 REST API 已经非常完善,设计得很优秀,很多公司开发自己的 REST API 时都会参考 GitHub,也有很多爱好者写了非常丰富的教程。

GraphQL 的核心是一套数据查询语言的规范,是 * 在2012年开发的,2015年开源,* 内部已经广泛应用,用于替代 REST。

GitHub 为什么选择 GraphQL?这是很多用户关心的问题,Github 对此做了解释。

REST API 有什么问题?

首要问题就是扩展性方面,随着 API 的不断发展,会变得越来越臃肿

REST API 的方式是:server定义一系列的接口,client调用自己需要的接口,获取目标数据进行整合

例如用户接口,刚开始时,返回的信息会比较少,例如只有 id,name

后来用户的信息增加了,就在用户接口中返回更多的信息,例如 id,name,age,city,addr,email,headimage,nick

但可能很多client只是想获取其中少部分信息,如 name,headimage,却必须得到所有的用户信息,然后从中提取自己想要的

这个情况会增加网络传输量,并且不便于client处理数据

还有一个不方便的地方,例如client在某个需求中,可能需要调用多个独立的 API 才能获取到足够的数据

例如client要显示一篇文章的内容,同时要显示评论、作者信息,那么就可能需要调用文章接口、评论接口、用户接口

这种方式非常不灵活

GitHub 还遇到其他一些 REST API 不好处理的问题,例如

想要确保client提供的参数的类型安全;想要从代码生成文档;想要识别每个端点的OAuth请求范围 ……

使用 GraphQL 有什么好处?

GraphQL 简单来说就是:取哪些数据是由client来决定

REST 中,给哪些数据是server决定的,client只能从中挑选,如果A接口中的数据不够,再请求B接口,然后从他们返回的数据中挑出自己需要的

GraphQL 中,client 直接对 server说想要什么数据,server负责精确的返回目标数据

例如,你想要获取用户的几个属性信息,你的 GraphQL 请求就是这样的

{
viewer {
login
bio
location
isBountyHunter
}
}
返回的响应信息如下

{
"data": {
"viewer": {
"login": "octocat",
"bio": "I've been around the world, from London to the Bay.",
"location": "San Francisco, CA",
"isBountyHunter": true
}
}
}
再看一个更复杂的例子,例如你想知道你给多少个项目点亮过星星、最初3个项目的名字、及他们star fork watcher的总数可以看到,返回的 JSON 数据中,key value 是和请求完全一致的

GraphQL 请求就是这样的

{
viewer {
login
starredRepositories {
totalCount
}
repositories(first: 3) {
edges {
node {
name
stargazers {
totalCount
}
forks {
totalCount
}
watchers {
totalCount
}
issues(states:[OPEN]) {
totalCount
}
}
}
}
}
}
响应信息如下

{
"data":{
"viewer":{
"login": "octocat",
"starredRepositories": {
"totalCount": 131
},
"repositories":{
"edges":[
{
"node":{
"name":"octokit.rb",
"stargazers":{
"totalCount": 17
},
"forks":{
"totalCount": 3
},
"watchers":{
"totalCount": 3
},
"issues": {
"totalCount": 1
}
}
},
{
"node":{
"name":"octokit.objc",
"stargazers":{
"totalCount": 2
},
"forks":{
"totalCount": 0
},
"watchers":{
"totalCount": 1
},
"issues": {
"totalCount": 10
}
}
},
{
"node":{
"name":"octokit.net",
"stargazers":{
"totalCount": 19
},
"forks":{
"totalCount": 7
},
"watchers":{
"totalCount": 3
},
"issues": {
"totalCount": 4
}
}
}
]
}
}
}
}
GraphQL 还有很多其他的特点,例如你只需要一个请求,就可以得到所有需要的数据

批量请求,可以定义两个独立请求的依赖关系,高效的获取数据

创建订阅,client 可以收到新的数据

数据延迟,可以对响应中一部分数据标识为时间不敏感

小结

不只是 Github,还有很多大公司已经使用 GraphQL,例如 Pinterest, Coursera, Shopify

Github 也表达了对 GraphQL API 的重视,接下来会持续完善,使其更加灵活

热心网友 时间:2022-05-12 01:58

因为graphql就是未来...
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怀孕甲状腺激素偏高正常吗 怀孕检查甲状腺素偏高是什么原因引起的 怀孕了甲状腺功能偏高是怎么回事 怀孕甲状腺高是什么引起的 孕中期促甲状腺激素偏高是什么原因 重钢别墅靠谱吗 重刚别墅的致命缺点 重钢别墅的优点和缺点各是什么 积食可以吃什么 车子换了点火线圈,分缸线,火花塞以后车子打不着。这是什么原因 如何导入 Maven 依赖关系在 Android 工作室/IntelliJ 《ImplementingDomain-DrivenDesign》pdf下载在线阅读,求百度网盘云资源 spring4中文文档哪里有 帮助翻译一下,着急使用,谢谢,拒绝机器翻译 创建java项目的步骤 word小窗口目录怎么显示 elasticsearch 怎么用源码启动 调试 如何导入 Maven 依赖关系在 Android studio/IntelliJ 求助 导入maven android工程 springboot gradle 怎么启动 spring data jpa + spring mvc的事务控制问题 谁知道宁夏幼师资格证的考试时间。。。 宁夏幼师资格证下半年啥时候报考,考不考心理教育学 2015宁夏报考教师资格证有年龄限制吗? 宁夏考生报考教师资格证有年龄限制吗? 各位我想问一下宁夏报考幼师资格证必须是具备幼儿师范毕业或者中等师范毕业才能报名吗?非师范毕业不能报 急求!!怎么进入网站后台?? 怎样进入网站的后台管理系统? 酒店装修细节注意事项有哪些 怎样进入网站后台? 有关于VOD视频点播系统的英文文献,最好基于校园网 9.1surface restmill怎么用 spring boot 怎么创建web 吃什么东西能减脂肪 吃什么食物可以脱脂(脂肪)? 吃什么代谢脂肪最快 吃什么东西减脂肪最快? 吃什么东西消脂最快? 吃什么脂肪燃烧最快 吃什么能最快降脂肪 吃什么食物燃烧脂肪最快 吃什么东西减脂肪? 吃什么可以快速消除身体上的脂肪!!! 吃什么食物能快速消耗脂肪 做农产品期货 现在做一手大概多少钱? 吃什么降脂肪最快 农产品期货要多少钱就可以玩? 便宜的农产品期货有哪些,多少钱一手黄金 期货开户要多少钱?(我想炒农产品期货) 投资农产品期货每次购买至少要多少钱?