# Revision: Cheat Sheet और Self-Check — API Design और Versioning

Source: https://www.geekswithgeeks.com/hi/api-design/wrap-revision

> पूरे कोर्स के सिद्धांतों, परिपाटियों और versioning प्रथाओं की दोहराई करें।

## Cheat sheet

**डिज़ाइन**: उपभोक्ता-पहले; बहुवचन-संज्ञा resources; methods क्रिया उठाते हैं (GET/HEAD safe, PUT/DELETE idempotent, POST दोनों नहीं); ज़रूरत से REST/GraphQL/gRPC/webhooks चुनें। **Responses**: सटीक status codes; `application/problem+json` errors; cursor pagination; filter/sort/fields परिपाटियाँ। **Reliability**: POST के लिए Idempotency-Key, ETag/If-None-Match/If-Match, 429 + Retry-After के साथ rate limits, 202 + status resource। **सुरक्षा**: HTTPS, header tokens, scopes, object-level authorisation (BOLA), न्यूनतम responses, timestamps के साथ हस्ताक्षरित webhooks। **Versioning**: पहले जोड़ने वाले बदलाव; तोड़ने वाले बदलाव पहचानें; URI/header/media-type/तारीख़-आधारित; एक आंतरिक मॉडल। **Deprecation**: Deprecation + Sunset + Link headers, लंबी समय-सीमा, उपयोग ट्रैकिंग, migration guide, 410 Gone। **गुणवत्ता**: OpenAPI contract-first, contract और breaking-change tests, style guide और review।

## इंटरव्यू में पूछे जाने वाले सवाल

इन्हें समझाने को तैयार रहें: PUT, PATCH और POST में अंतर और कौन-से idempotent हैं, बदलते dataset के लिए pagination कैसे डिज़ाइन करेंगे, idempotency keys दोहरे शुल्क कैसे रोकती हैं, तोड़ने वाला बदलाव क्या है और उसे version व विदा कैसे करेंगे, और एक user को दूसरे user के orders पढ़ने से कैसे रोकेंगे।

**Quiz:** Timeout के बाद मोबाइल ऐप `POST /payments` retry करता है और ग्राहक से दो बार शुल्क लग जाता है। सबसे अच्छा सुधार क्या है?

- [ ] हर error पर 200 लौटाएँ
- [ ] सिर्फ़ client पर retries बंद करें
- [ ] Endpoint को GET में बदलें
- [x] Idempotency-Key अनिवार्य करें और दोहराव पर रखा नतीजा लौटाएँ

*Answer:* Idempotency-Key अनिवार्य करें और दोहराव पर रखा नतीजा लौटाएँ. Key retries को एक तार्किक ऑपरेशन से बाँधती है ताकि शुल्क एक बार लगे।

**Quiz:** आपको हज़ारों clients द्वारा उपयोग किए जाने वाले response field का नाम बदलना है। सबसे सुरक्षित योजना क्या है?

- [ ] नाम बदलें और उम्मीद रखें
- [x] पुराने के साथ नया field जोड़ें, पुराने को sunset तारीख़ के साथ deprecate करें और उपयोग ट्रैक करें
- [ ] अगली release में चुपचाप हटाएँ
- [ ] नाम रखें पर अर्थ बदलें

*Answer:* पुराने के साथ नया field जोड़ें, पुराने को sunset तारीख़ के साथ deprecate करें और उपयोग ट्रैक करें. जोड़ने वाला बदलाव और deprecation अवधि clients को अपनी गति से migrate करने देती है।

**Quiz:** Rows सूची के आगे जुड़ने के बाद client पन्ना 2 माँगता है। कौन-सी pagination दोहराव से बचाती है?

- [ ] Offset pagination
- [x] Cursor (keyset) pagination
- [ ] Random pagination
- [ ] कोई pagination नहीं

*Answer:* Cursor (keyset) pagination. Cursor आख़िरी देखे item के बाद आगे बढ़ता है, सूची में पहले हुए inserts की परवाह किए बिना।
