译者 | 李睿
审校 | 重楼
GraphQL是Facebook公司在2015年推出的一种强大的API查询语言,也是一种使用现有数据执行这些查询的运行时(Runtime)。当GraphQL在单体应用程序框架上的生成式人工智能(GenAI)中应用时,它将带来很多好处,但也面临一些挑战。评估GraphQL如何在单体应用程序中运行是一件特别有趣的事情——单体应用程序是一种将用户界面和数据访问代码从单个平台组合到单个程序中的软件架构。
单体应用程序框架和GraphQL之间的相互作用
单体应用程序被设计为一个单一的、不可分割的软件单元,其中应用程序的组件(例如数据库、客户端用户界面和服务器端应用程序)是相互连接和相互依赖的。每个模块都是为特定的操作而设计的,但与其他模块相连,形成了一个单一而连贯的系统。
生成式人工智能是一种人工智能模型,它可以利用GraphQL在单体应用程序中有效地访问和操作数据。通过使用GraphQL, GenAI可以查询处理所需的特定数据,减少不必要的数据检索量,并提高效率。
GraphQL在单体应用中的工作机制
1.编制数据请求
当客户端或单体应用程序的前端向服务器或后端发送请求时,这一过程就开始了。这不仅仅是请求;它是一个GraphQL查询,概述了所需数据的结构,指定了客户端所需的确切数据字段。
在GraphQL中,查询的结构如下:
JavaScript
graphql
query {
user(id: "1") {
name
email
friends {
name
}
}
}
2.服务器端数据聚合
在接收到这个GraphQL查询之后,服务器不仅仅是从单个端点提取数据。与其相反,它从组成单体应用程序的各个模块中聚合所需的数据。这是与REST API的一个关键区别,REST API通常需要多次往返各个端点以收集必要的数据。使用GraphQL,服务器将完成所有繁重的工作,只需进行一次有效的调用即可精确地检索所需的内容。
以下是上述查询的一个示例:
JavaScript
javascript
const resolvers = {
Query: {
user(parent, args, context, info) {
return context.db.loadUserByID(args.id);
},
},
User: {
friends(user) {
return context.db.loadFriendsForUser(user);
},
},
};
3.回应制作和交付
一旦服务器聚合了所有必要的数据,它就会制作一个响应。但是,服务器并不是发送一个通用的预定义对象,而是调整响应以匹配原始 GraphQL 查询定义的结构。这可以确保客户端接收到它所要求的内容,而没有任何不必要或冗余的数据,从而减少了网络上的负载,并增强了应用程序的整体性能。
在服务器完成聚合数据的工作之后,它向客户端发回一个响应。来自服务器的响应与查询的模式匹配。对于上述请求,可能的响应是:
JavaScript
json
{
"data": {
"user": {
"name": "John Doe",
"email": "john@example.com",
"friends": [
{
"name": "Jane Doe"
},
{
"name": "Richard Roe"
}
]
}
}
}
在单体应用程序中使用GraphQL的好处
1.高效的数据加载
在单体应用程序中使用GraphQL的最大好处是它允许精确、高效的数据加载。通过使客户机能够准确地指定它需要的数据,可以将需要传输的数据量降至最低,从而减少带宽使用并缩短加载时间。
2.降低服务器负载
由于服务器可以在单次访问中检索所有必要的数据,因此降低了服务器的总体负载,从而提高了性能。
3.增强开发人员体验
GraphQL提供了更高效的数据查询功能和更好的性能,从而带来卓越的开发人员体验。它的类型系统有助于确保从一开始就正确构建应用程序,减少错误和bug的数量。
总之,将GraphQL引入单体应用程序提供了一种更高效的方法,并且在单体应用程序框架上将GraphQL集成到生成式人工智能中可以提高效率、性能和开发人员体验。但是,必须仔细考虑如何管理复杂的查询、错误和安全性。
原文标题:An In-Depth Analysis of GraphQL Functioning Using GenAI Within a Monolithic Application Framework,作者:Elias Naduvath Varghese