在單體應(yīng)用程序框架中,將GraphQL應(yīng)用到 GenAI中會(huì)帶來(lái)什么?
譯文譯者 | 李睿
審校 | 重樓
GraphQL是Facebook公司在2015年推出的一種強(qiáng)大的API查詢語(yǔ)言,也是一種使用現(xiàn)有數(shù)據(jù)執(zhí)行這些查詢的運(yùn)行時(shí)(Runtime)。當(dāng)GraphQL在單體應(yīng)用程序框架上的生成式人工智能(GenAI)中應(yīng)用時(shí),它將帶來(lái)很多好處,但也面臨一些挑戰(zhàn)。評(píng)估GraphQL如何在單體應(yīng)用程序中運(yùn)行是一件特別有趣的事情——單體應(yīng)用程序是一種將用戶界面和數(shù)據(jù)訪問(wèn)代碼從單個(gè)平臺(tái)組合到單個(gè)程序中的軟件架構(gòu)。
單體應(yīng)用程序框架和GraphQL之間的相互作用
單體應(yīng)用程序被設(shè)計(jì)為一個(gè)單一的、不可分割的軟件單元,其中應(yīng)用程序的組件(例如數(shù)據(jù)庫(kù)、客戶端用戶界面和服務(wù)器端應(yīng)用程序)是相互連接和相互依賴的。每個(gè)模塊都是為特定的操作而設(shè)計(jì)的,但與其他模塊相連,形成了一個(gè)單一而連貫的系統(tǒng)。
生成式人工智能是一種人工智能模型,它可以利用GraphQL在單體應(yīng)用程序中有效地訪問(wèn)和操作數(shù)據(jù)。通過(guò)使用GraphQL, GenAI可以查詢處理所需的特定數(shù)據(jù),減少不必要的數(shù)據(jù)檢索量,并提高效率。
GraphQL在單體應(yīng)用中的工作機(jī)制
1.編制數(shù)據(jù)請(qǐng)求
當(dāng)客戶端或單體應(yīng)用程序的前端向服務(wù)器或后端發(fā)送請(qǐng)求時(shí),這一過(guò)程就開(kāi)始了。這不僅僅是請(qǐng)求;它是一個(gè)GraphQL查詢,概述了所需數(shù)據(jù)的結(jié)構(gòu),指定了客戶端所需的確切數(shù)據(jù)字段。
在GraphQL中,查詢的結(jié)構(gòu)如下:
JavaScript
graphql
query {
user(id: "1") {
name
email
friends {
name
}
}
}
2.服務(wù)器端數(shù)據(jù)聚合
在接收到這個(gè)GraphQL查詢之后,服務(wù)器不僅僅是從單個(gè)端點(diǎn)提取數(shù)據(jù)。與其相反,它從組成單體應(yīng)用程序的各個(gè)模塊中聚合所需的數(shù)據(jù)。這是與REST API的一個(gè)關(guān)鍵區(qū)別,REST API通常需要多次往返各個(gè)端點(diǎn)以收集必要的數(shù)據(jù)。使用GraphQL,服務(wù)器將完成所有繁重的工作,只需進(jìn)行一次有效的調(diào)用即可精確地檢索所需的內(nèi)容。
以下是上述查詢的一個(gè)示例:
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.回應(yīng)制作和交付
一旦服務(wù)器聚合了所有必要的數(shù)據(jù),它就會(huì)制作一個(gè)響應(yīng)。但是,服務(wù)器并不是發(fā)送一個(gè)通用的預(yù)定義對(duì)象,而是調(diào)整響應(yīng)以匹配原始 GraphQL 查詢定義的結(jié)構(gòu)。這可以確??蛻舳私邮盏剿蟮膬?nèi)容,而沒(méi)有任何不必要或冗余的數(shù)據(jù),從而減少了網(wǎng)絡(luò)上的負(fù)載,并增強(qiáng)了應(yīng)用程序的整體性能。
在服務(wù)器完成聚合數(shù)據(jù)的工作之后,它向客戶端發(fā)回一個(gè)響應(yīng)。來(lái)自服務(wù)器的響應(yīng)與查詢的模式匹配。對(duì)于上述請(qǐng)求,可能的響應(yīng)是:
JavaScript
json
{
"data": {
"user": {
"name": "John Doe",
"email": "john@example.com",
"friends": [
{
"name": "Jane Doe"
},
{
"name": "Richard Roe"
}
]
}
}
}
在單體應(yīng)用程序中使用GraphQL的好處
1.高效的數(shù)據(jù)加載
在單體應(yīng)用程序中使用GraphQL的最大好處是它允許精確、高效的數(shù)據(jù)加載。通過(guò)使客戶機(jī)能夠準(zhǔn)確地指定它需要的數(shù)據(jù),可以將需要傳輸?shù)臄?shù)據(jù)量降至最低,從而減少帶寬使用并縮短加載時(shí)間。
2.降低服務(wù)器負(fù)載
由于服務(wù)器可以在單次訪問(wèn)中檢索所有必要的數(shù)據(jù),因此降低了服務(wù)器的總體負(fù)載,從而提高了性能。
3.增強(qiáng)開(kāi)發(fā)人員體驗(yàn)
GraphQL提供了更高效的數(shù)據(jù)查詢功能和更好的性能,從而帶來(lái)卓越的開(kāi)發(fā)人員體驗(yàn)。它的類型系統(tǒng)有助于確保從一開(kāi)始就正確構(gòu)建應(yīng)用程序,減少錯(cuò)誤和bug的數(shù)量。
總之,將GraphQL引入單體應(yīng)用程序提供了一種更高效的方法,并且在單體應(yīng)用程序框架上將GraphQL集成到生成式人工智能中可以提高效率、性能和開(kāi)發(fā)人員體驗(yàn)。但是,必須仔細(xì)考慮如何管理復(fù)雜的查詢、錯(cuò)誤和安全性。
原文標(biāo)題:An In-Depth Analysis of GraphQL Functioning Using GenAI Within a Monolithic Application Framework,作者:Elias Naduvath Varghese