- 2018 से 6 साल तक इस्तेमाल करने के बाद, मैं सच में GraphQL का बड़ा प्रशंसक था, लेकिन अब संदेह होने लगा है
- अब मैं GraphQL की सिफारिश क्यों नहीं करता और मेरे हिसाब से बेहतर विकल्प क्या हैं, यह बताना चाहता हूँ
attack surface
- GraphQL query language को expose करता है, जिससे attack surface बढ़ने का जोखिम होता है।
- authorization से जुड़ी समस्याएँ खास तौर पर महत्वपूर्ण हैं।
- हर field के लिए उचित permission check की ज़रूरत होती है।
- REST API में endpoint के हिसाब से authorization check करना ज़्यादा सरल है।
authorization
- हर field के लिए user permission की जाँच करनी पड़ती है।
- REST API में endpoint के हिसाब से authorization check करना ज़्यादा सरल है।
rate limiting
- GraphQL queries पर size limit नहीं होती, इसलिए वे server पर बड़ा load डाल सकती हैं।
- query complexity का अनुमान लगाकर, एक निश्चित complexity से ऊपर की queries को सीमित करने का तरीका है।
- REST API में request count को limit करना ज़्यादा सरल है।
query parsing
- गलत query string server की memory का अत्यधिक उपयोग करा सकती है।
- maximum error count सेट करके parsing रोकने का तरीका है।
performance
data fetching और N+1 समस्या
- field resolver बाहरी data source को कई बार call कर सकते हैं।
- Dataloader pattern का उपयोग करके इस समस्या को हल किया जा सकता है।
- REST में controller पर N+1 समस्या को हल करना ज़्यादा सरल है।
authorization और N+1 समस्या
- authorization code, N+1 समस्या पैदा कर सकता है।
- REST में यह समस्या नहीं होती।
coupling
- GraphQL codebase में business logic, transport layer के साथ बहुत मज़बूती से जुड़ जाता है।
- integration testing की ज़रूरत पड़ती है, और debugging कठिन हो जाती है।
complexity
- GraphQL की security और performance समस्याओं को हल करने के लिए अलग-अलग तरीके codebase की complexity बढ़ा देते हैं।
- REST solutions आम तौर पर अधिक सरल होते हैं।
alternatives
- OpenAPI 3.0+ का उपयोग करने वाली JSON REST API की सिफारिश की गई है।
- अगर static typed language में लिखे गए clients हैं, तो OpenAPI बेहतर विकल्प हो सकता है।
- OpenAPI अपने आप type-safe client code generate कर सकता है।
GN⁺ की राय
- GraphQL शक्तिशाली है, लेकिन security और performance समस्याओं को हल करने में बहुत मेहनत लगती है।
- REST API अपेक्षाकृत सरल है, और कई मामलों में अधिक उपयुक्त हो सकती है।
- OpenAPI type safety और automated tools देकर development productivity बढ़ा सकता है।
- GraphQL अपनाते समय security और performance समस्याओं पर पर्याप्त विचार करना चाहिए।
- REST और GraphQL के फायदे-नुकसान की तुलना करके प्रोजेक्ट के लिए उपयुक्त तकनीक चुनना महत्वपूर्ण है।
8 टिप्पणियां
6 साल बाद GraphQL छोड़ने की वजह
GraphQL थोड़ा परेशान करने वाला है (2022)
RPC की बड़ी लहर का दौर आ रहा है
वही तो... सिर्फ इसलिए कि कुछ fancy आ गया है, उसे तुरंत लपककर सिर-आंखों पर नहीं बिठा लेना चाहिए.. अब ORM की बारी है। तुम्हारी भी ज़्यादा दूर नहीं है...
ORM को आए 20 साल से ज़्यादा हो चुके हैं...
2018 तक आते-आते PQ इतना नया भी नहीं था (असल में GraphQL पहली बार घोषित होने के समय से ही इसकी सिफारिश की जाती थी), इसलिए यह हैरानी की बात है कि 6 साल तक इसे आज़माने की कोशिश ही नहीं की गई...
ऊपर बताए गए सभी कारणों की वजह से GraphQL को पूरी तरह खुद implement करना complexity और stability के लिहाज़ से मुश्किल है। मुझे लगता है कि DB के ऊपर hasura या postgraphile जैसी layer रखकर, ज़रूरत के अनुसार इस layer में GraphQL हो या REST, उसे जोड़ने के तरीके से development करना बेहतर होगा।
Hacker News की राय