# GraphQL और gRPC — REST API Design: Resources, Status Codes और Security

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

> REST, GraphQL और gRPC की तुलना करें और जानें कि public APIs, rich UIs या internal services के लिए कौन-सा style फिट है।

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

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

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

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

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

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

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

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

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

## अंतिम क्विज़ 1/8

अंतिम क्विज़

**Quiz:** कौन-सा HTTP method resource को पूरी तरह बदलता है और idempotent है?

- [ ] POST
- [ ] PATCH
- [x] PUT
- [ ] GET

*Answer:* PUT. PUT दिए गए body से resource बदल देता है, इसलिए दोहराने पर वही नतीजा मिलता है।

## अंतिम क्विज़ 2/8

अंतिम क्विज़

**Quiz:** Resource बनाने वाले सफल POST के लिए कौन-सा status code सही है?

- [ ] 200 OK
- [ ] 204 No Content
- [ ] 302 Found
- [x] 201 Created

*Answer:* 201 Created. 201 निर्माण दर्शाता है और आमतौर पर Location header साथ होता है।

## अंतिम क्विज़ 3/8

अंतिम क्विज़

**Quiz:** बड़े बदलते datasets के लिए cursor pagination क्यों बेहतर है?

- [x] It stays fast and stable under inserts
- [ ] It lets you jump to page 10
- [ ] It needs no limit
- [ ] It avoids sorting

*Answer:* It stays fast and stable under inserts. Cursors धीमे OFFSET scans और खिसकते pages से बचाते हैं।

## अंतिम क्विज़ 4/8

अंतिम क्विज़

**Quiz:** कौन-सा बदलाव breaking है और नए API version की जरूरत है?

- [ ] Adding an optional field
- [x] Renaming a response field
- [ ] Adding a new endpoint
- [ ] Improving docs

*Answer:* Renaming a response field. पुराना field name पढ़ने वाले clients fail हो जाएँगे।

## अंतिम क्विज़ 5/8

अंतिम क्विज़

**Quiz:** JWT access token को छोटी अवधि का क्यों रखें?

- [ ] Because it is large
- [ ] Because it needs a database
- [x] Because it cannot be easily revoked
- [ ] Because it is encrypted

*Answer:* Because it cannot be easily revoked. छोटी अवधि token leak होने पर नुकसान सीमित करती है; refresh tokens उसे नवीनीकृत करते हैं।

## अंतिम क्विज़ 6/8

अंतिम क्विज़

**Quiz:** Rate limit पार करने पर API को क्या लौटाना चाहिए?

- [ ] 403 Forbidden
- [ ] 200 OK
- [ ] 404 Not Found
- [x] 429 Too Many Requests

*Answer:* 429 Too Many Requests. 429 और Retry-After clients को पीछे हटने में मदद करता है।

## अंतिम क्विज़ 7/8

अंतिम क्विज़

**Quiz:** Idempotency-Key header किससे बचाता है?

- [x] Duplicate processing of retried requests
- [ ] Slow queries
- [ ] Cross-site scripting
- [ ] Large payloads

*Answer:* Duplicate processing of retried requests. वही key दोबारा आने पर server पहला नतीजा दोहरा देता है।

## अंतिम क्विज़ 8/8

अंतिम क्विज़

**Quiz:** If-None-Match के साथ ETag मेल खाने पर क्या लौटता है?

- [ ] 200 with the full body
- [x] 304 Not Modified with no body
- [ ] 404 Not Found
- [ ] 409 Conflict

*Answer:* 304 Not Modified with no body. Freshness की पुष्टि होते हुए body network पर नहीं जाता।
