# GraphQL और gRPC — रेस्ट एपीआई डिज़ाइन

Source: https://www.geekswithgeeks.com/hi/restapi/api-graphql-grpc

> दो अन्य शैलियाँ, और वे साधारण REST से कब बेहतर हैं।

## GraphQL: एक एंडपॉइंट, सटीक फ़ील्ड

GraphQL एक ही एंडपॉइंट उजागर करता है जहाँ क्लाइंट एक ही क्वेरी में संबंधित रिसोर्स में बिल्कुल वे फ़ील्ड बताता है जो उसे चाहिए — यह REST की **ओवर-फ़ेचिंग** (अनुपयोगी फ़ील्ड) और **अंडर-फ़ेचिंग** (कई राउंड-ट्रिप चाहिए) को ठीक करता है, कीमत पर एक अधिक जटिल सर्वर और कैशिंग की कहानी।

## gRPC: बाइनरी, टाइप्ड, तेज़

gRPC JSON टेक्स्ट के बजाय कॉम्पैक्ट बाइनरी Protocol Buffers का उपयोग करते हुए HTTP/2 पर टाइप्ड फ़ंक्शन कॉल करता है — (डी)सिरियलाइज़ करने में बहुत तेज़, सख़्त स्कीमा और स्ट्रीमिंग बिल्ट-इन के साथ। यह REST से कम ब्राउज़र-अनुकूल और कम इंसानी-पठनीय है।

## हर एक को कब चुनें

**REST**: पब्लिक API, सरल रिसोर्स, व्यापक टूलिंग और कैशिंग सपोर्ट। **GraphQL**: समृद्ध UI (मोबाइल/वेब) जो हर स्क्रीन की अलग ज़रूरत के साथ कई स्रोतों से नेस्टेड डेटा खींचते हैं। **gRPC**: आपके अपने इंफ़्रास्ट्रक्चर के अंदर सेवा-से-सेवा कॉल जहाँ गति और सख़्त कॉन्ट्रैक्ट ब्राउज़र एक्सेस से ज़्यादा मायने रखते हैं।

**Quiz:** एक मोबाइल ऐप स्क्रीन को एक राउंड-ट्रिप में यूज़र की प्रोफ़ाइल, उनके अंतिम 3 ऑर्डर और अनरीड नोटिफ़िकेशन गिनती चाहिए, कम से कम अतिरिक्त डेटा के साथ। सबसे उपयुक्त क्या है?

- [ ] तीन अलग REST कॉल
- [x] बिल्कुल उन्हीं फ़ील्ड को नाम देने वाली एक GraphQL क्वेरी
- [ ] एक gRPC स्ट्रीमिंग कॉल

*Answer:* बिल्कुल उन्हीं फ़ील्ड को नाम देने वाली एक GraphQL क्वेरी. GraphQL बिल्कुल इसी के लिए बना है: एक क्वेरी जो कई रिसोर्स में ठीक ज़रूरी फ़ील्ड खींचती है, न अतिरिक्त राउंड-ट्रिप न अनुपयोगी डेटा।
