API मॉकिंग क्या है?
मॉक API असली सर्विस की जगह पहले से तय रिस्पॉन्स लौटाता है ताकि फ़्रंटएंड, इंटीग्रेशन या टेस्ट सूट बैकएंड के बनने से पहले या उस पर निर्भर हुए बिना बनाया और चलाया जा सके। अच्छे मॉक असली कॉन्ट्रैक्ट को दोहराते हैं — स्टेटस कोड, हेडर, पेजिनेशन, एरर बॉडी — वरना टेस्ट मॉक पर पास होते हैं और प्रोडक्शन पर फ़ेल।
गाइड पढ़ें: API टेस्टिंग क्या है? REST API कैसे टेस्ट करें
Mock पेजिनेशन रिस्पॉन्स कैसे इस्तेमाल करें
- शैली, कुल आइटम संख्या और पेज साइज़ चुनें।
- पहला/बीच का/आख़िरी या कोई ख़ास पेज चुनें।
- Generate दबाएँ और हर पेज से list, scroll तथा "load more" स्थितियाँ टेस्ट करें।
Mock पेजिनेशन रिस्पॉन्स की खूबियाँ
- page, offset, cursor, keyset और Link-हेडर वाली पेजिनेशन शैलियाँ
- एक ही रन में पहला, बीच का और आख़िरी पेज, या कोई भी चुना हुआ पेज
- पेजों के आर-पार क्रमिक आइटम id और डिकोड होने योग्य base64url cursor
- links, hasNext/hasPrev फ़्लैग, totals और X-Total-Count हेडर
- कस्टम आइटम फ़ील्ड और रिसोर्स का नाम; seed लगाया जा सकता है
Mock पेजिनेशन रिस्पॉन्स का उदाहरण
तीन में से दूसरा पेज
इनपुट:
Style: page, total: 25, page size: 10, page: 2आउटपुट:
{ "data": [ { "id": 11, … }, …, { "id": 20, … } ], "meta": { "page": 2, "pageSize": 10, "total": 25, "totalPages": 3, "hasPrev": true, "hasNext": true }, "links": { "prev": "…?page=1&pageSize=10", "next": "…?page=3&pageSize=10" } }उदाहरण: 25 आइटम, पेज साइज़ 10, 3 पेज
पेज
1 2 3
आइटम id
1–10 11–20 21–25 —
prev/next लिंक
next prev + next prev
page-आधारित
page=1 page=2 page=3
offset
offset=0 offset=10 offset=20
keyset
— after_id=10 after_id=20
cursor
— cursor=… ({"id":10,…}) cursor=… ({"id":20,…})
पेज 1 के नीचे डैश: पहली रिक्वेस्ट में after_id या cursor नहीं होता। keyset पेजों में सिर्फ़ next लिंक होता है। हर रिक्वेस्ट पेज साइज़ भी भेजती है (pageSize, limit या per_page); Link-हेडर शैली page शैली की तरह ही पेज माँगती है।
Mock पेजिनेशन रिस्पॉन्स के बारे में अक्सर पूछे जाने वाले सवाल
कौन-कौन सी पेजिनेशन शैलियाँ सपोर्ट हैं?
page-आधारित (page/pageSize/totalPages), offset/limit, cursor (opaque base64url cursor वाला pageInfo), keyset (after_id) और GitHub शैली के Link हेडर।
पहला, बीच का और आख़िरी पेज ही क्यों?
ये वे तीन स्थितियाँ हैं जिन्हें हर क्लाइंट संभालना चाहिए: कोई previous लिंक नहीं, दोनों लिंक मौजूद, और आंशिक रूप से भरा आख़िरी पेज जिसमें next लिंक नहीं होता। किसी और पेज की ज़रूरत हो तो उसे अलग से बनाएँ।
क्या cursor डिकोड किए जा सकते हैं?
हाँ। cursor base64url में एन्कोड किया गया JSON होते हैं, जैसे {"id":10,"dir":"next"}, इसलिए आप उन्हें टेस्ट में देख भी सकते हैं और ख़ुद बना भी सकते हैं।
आइटम id कैसे तय होते हैं?
पेजों के आर-पार क्रम से (10 साइज़ का पेज 2 id 11 से शुरू होता है), ताकि ordering और de-duplication का लॉजिक जाँचा जा सके।
संदर्भ
- OpenAPI SpecificationREST API के वर्णन का मानक: पाथ, ऑपरेशन, पैरामीटर, स्कीमा, रिस्पॉन्स और सिक्योरिटी स्कीम।
- RFC 9110: HTTP SemanticsHTTP मेथड, हेडर फ़ील्ड, स्टेटस कोड और कंटेंट निगोशिएशन के अर्थ, वायर वर्ज़न से स्वतंत्र।
- RFC 8288: Web LinkingAPI पेजिनेशन के लिए इस्तेमाल होने वाला Link हेडर और लिंक रिलेशन (next, prev, first, last)।