在單體應用程序框架中,將GraphQL應用到 GenAI中會帶來什么?
譯文譯者 | 李睿
審校 | 重樓
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