- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
GraphQL在微服务架构中的实践架构
目录
?GraphQL是什么? 1
GraphQL在微服务架构中的使用 2
GraphQL在实践過程中碰到的棘手問題 3
合理的GraphQL微服务架构的设计 4
GraphQL是什么?
简朴對象访問协议(SOAP)從今天来看已經是一门非常古老的Web服务技术了,虽然诸多服务仍然在使用遵照SOAP的接口,不過到今天REST風格的面向资源的API接口已經非常深入人心,也非常的成熟;不過這篇文章要简介的主角其实是另一门愈加复杂、完备的查询語言GraphQL。
作為Facebook在年推出的查询語言,GraphQL可以對API中的数据提供一套易于理解的完整描述,使得客户端可以愈加精确的获得它需要的数据,目前包括Facebook、Twitter、GitHub在内的诸多企业都已經在生产环境使用GraphQL提供API;其实無论我們与否决定生产环境中使用GraphQL,它确实是一门值得學习的技术。
二、GraphQL在微服务架构中的使用
类型系统
GraphQL的强大体現能力重要還是来自于它完备的类型系统,与REST不一样,它将整個Web服务中的所有资源當作一种有连接的图,而不是一种個资源孤岛,在访問任何资源時都可以通過资源之间的连接访問其他的资源。
如上图所示,當我們访問User资源時,就可以通過GraphQL中的连接访問目前User的Repo和Issue等资源,我們不再需要通過多种REST的接口分别获取這些资源,只需要通過如下所示的查询就能一次性拿到所有的成果:
{
user{
id
username
repos(first:10){
id
url
name
issues(first:20){
id
author
title}
}
}
}
GraphQL這种方式可以将原有RESTful風格時的多次祈求聚合成一次祈求,不仅可以減少多次祈求带来的延迟,還可以減少服务器压力,加紧前端的渲染速度。它的类型系统也非常丰富,除了標量、枚举、列表和對象等类型之外,還支持接口和联合类型等高级特性。
為了可以更好的表达非空和空字段,GraphQL也引入了Non-Null等標识代表非空的类型,例如String!表达非空的字符串。
schema{
query:Query
mutation:Mutation
}
Schema中绝大多数的类型都是一般的對象类型,不過每一种Schema中均有两個特殊类型:query和mutation,它們是GraphQL中所有查询的入口,在使用時所有查询接口都是query的子字段,所有变化服务器资源的祈求都应當属于mutation类型。
集中式vs分散式
GraphQL以图的形式将整個Web服务中的资源展示出来,其实我們可以理解為它将整個Web服务以“SQL”的方式展示給前端和客户端,服务端的资源最终都被聚合到一张完整的图上,這样客户端可以按照其需求自行调用,类似添加字段的需求其实就不再需要後端多次修改了。
与RESTful不一样,每一种的GraphQL服务其实對外只提供了一种用于调用内部接口的端點,所有的祈求都访問這個暴露出来的端點。
GraphQL实际上将多种HTTP祈求聚合成了一种祈求,它只是将多种RESTful祈求的资源变成了一种從根资源Post访問其他资源的Comment和Author的图,多种祈求变成了一种祈求的不一样字段,從原有的分散式祈求变成了集中式的祈求,這种方式非常适合單体服务直接對外提供GraphQL服务,可以在数据源和展示层建立一种非常清晰的分离,同步也可以通過某些强大的工具,例如GraphiQL直接提供可视化的文档;不過在业务复杂性指数提高的今天,微服务架构成為了处理某些問題時必不可少的处理方案,因此怎样在微服务架构中使用GraphQL提高前後端之间的沟通效率并減少開发成本成為了一种值得考虑的問題。
Relay原则
假如說RESTful其实是客户端与服务端在HTTP协议通信時定义的固定原则,那么Relay其实也是我們在使用GraphQL可以遵照的一套规范。
這种原则的出現可以让不一样的工程師開发出较為相似的通信接口,在某些場景下,例如標识對象和分页這种常見的需求,引入设计良好的原则可以減少開发人员之间的沟通成本。
Relay原则其实為三個与API有关的最常見的問題制定了某些规范:
提供可以重新获取對象的机制;
提供對怎样對连接進行分页的描述;
原则化mutation祈求,使它們变得愈加可
您可能关注的文档
- 2025年设备产品运输方案.doc
- 2025年建设工程结算综合审计方案.doc
- 2025年七年级英语一般现在时专项练习.doc
- 2025年会议系统的设备维护方案设计.doc
- 2025年农贸市场招商综合方案.doc
- 2025年物业前期介入全过程控制要点.doc
- 2025年关于财务转型工作的探讨.doc
- 2025年风险隐患双重预防体系建设实施方案.doc
- 2025年安平县第三实验小学智慧校园申报书.doc
- 2025年能源评审报告.doc
- 2025年中国不锈钢复合管市场调查研究报告.docx
- 2025年中国不锈钢带壶火锅市场调查研究报告.docx
- 2025年中国不锈钢封板市场调查研究报告.docx
- 2025年中国不锈钢家用电器市场调查研究报告.docx
- 2025年中国不锈钢尾箱市场调查研究报告.docx
- 2025年中国不锈钢导向牌市场调查研究报告.docx
- 2025年中国不锈钢外丝市场调查研究报告.docx
- 2025年中国不锈钢圆地漏市场调查研究报告.docx
- 2024_2025学年新教材高中化学专题3水溶液中的离子反应第一单元第一课时强电解质和弱电解质学案苏教版选择性必修1.doc
- 2025年中国不锈钢容器及带温控夹套砂磨筒市场调查研究报告.docx
文档评论(0)