Logo GH

एपीआई अनुबंध परीक्षण

1) अनुबंध परीक्षण क्यों

अनुबंध ग्राहकों की अपेक्षाओं और प्रदाता वादों को पकड़ ता है: मार्ग/तरीके, हेडर, बॉडी स्कीमा, स्टेटस, त्रुटि शब्दार्थ और बाधाएं। लक्ष्य एकीकरण से पहले असंगत परिवर्तनों को पकड़ ना और भारी E2E के बिना सुरक्षित रूप से संस्करण जारी करना है।

2) दृष्टिकोण

उपभोक्ता-संचालित अनुबंध (सीडीसी): ग्राहक उम्मीदें बनाता है (संधि और एनालॉग्स); प्रदाता नियमित रूप से उन्हें सत्यापित करता है।

विशिष्टता: सत्य के एकल स्रोत के रूप में अनुबंध (OpenAPI/Protobuf/GraphQL SDL); परीक्षण विनिर्देशन के खिलाफ कार्यान्वयन को मान

घटना-आधारित: संदेश स्कीमा (एवरो/जेसन स्कीमा/प्रोटोबुफ) + ब्रोकर/रजिस्ट्री संगतता नियम।

3) HTTP/REST विनिर्देश धारा

1. अनुबंध: OpenAPI 3। एक्स (आरेख, उदाहरण, कोड)।

2. लिंट और स्टेट विश्लेषण: शैली, आवश्यक क्षेत्र, समान कोड।

3. कार्यान्वयन सत्यापन: एंटी-ओपनएपीआई परीक्षण जनरेटर (स्कीमैथेसिस/ड्रेड दृष्टिकोण) + मैनुअल नकारात्मक।

4. स्नैपशॉट: नमूना प्रतिक्रियाओं, ETag शब्दार्थ, निष्क्रियता हेडर पर कब्जा करें।

एक नकारात्मक अनुबंध का उदाहरण (OpenAPI टुकड़ा):
yaml paths:
/v1/payments:
post:
responses:
"201": { $ref: "#/components/responses/PaymentCreated" }
"409": { description: Duplicate by Idempotency-Key }
"422": { description: Schema/Business validation failed }

4) सीडीसी (संधि दृष्टिकोण)

जीवनचक्र:

1. उपभोक्ता एक परीक्षण लिखता है, एक संधि फ़ाइल (अपेक्षाएं) उत्पन्न करता

2. एक दलाल (कलाकृति) में प्रकाशन।

3. सीआई में प्रदाता सेवा (या अनुबंध-रैक) जुटाता है, संधि का सत्यापन करता है।

4. ब्रोकर कैन-आई-तैनात संगतता मैट्रिक्स की गणना करता है।

एक उपभोक्ता परीक्षण (छद्म-जेएस) का उदाहरण:
js pact
.given("wallet exists")
.uponReceiving("get wallet")
.withRequest({ method:"GET", path:"/v1/wallets/w123", headers:{ "Authorization": term({generate:"Bearer x", matcher:/^Bearer\s.+/}) }})
.willRespondWith({
status: 200,
headers: { "Content-Type": "application/json" },
body: like({ id:"w123", currency: "EUR", balance: 0 })
});

5) जीआरपीसी/प्रोटोबुफ अनुबंध

अनुबंध '.proto' with पैकेज/सेवा संस्करण है।

संगतता: टैग का पुन: उपयोग न करें, केवल वैकल्पिक के साथ नए जोड़ें, उपयोग किए गए क्षेत्रों को न हटाएं; आरक्षित संख्या।

परीक्षण: सर्वर/क्लाइंट छुरा पीढ़ी, ऑटो-जनरेटेड केस रेंटल + नेगेटिव (अज्ञात क्षेत्र, आकार-सीमा)।

6) घटना अनुबंध (काफ्का/एनएटीएस/...)

Схемы: एवरो/JSON स्कीमा/प्रोटोबुफ в स्कीमा रजिस्ट्री।

संगतता नीति 'बैकवर्ड' (अक्सर पर्याप्त) या 'फुल' है।

निर्माता परीक्षण: योजना के खिलाफ संदेश को मान्य करता है; उपभोक्ता परीक्षण: पुराने और नए संस्करणों को स्वीकार

Invariants: idempotence कुंजी, क्रम/पुनरावृत्ति, deduplication शब्दार्थ।

एवरो आरेख उदाहरण (टुकड़ा):
json
{"type":"record","name":"PayoutCreated","fields":[
{"name":"payoutId","type":"string"},
{"name":"amount","type":"double"},
{"name":"currency","type":{"type":"string","logicalType":"iso-4217"}}
]}

7) संगतता और संस्करण

पिछड़ा-संगत (अनुशंसित न्यूनतम): वैकल्पिक क्षेत्र जोड़ें, मौजूदा न तोड़ें.

फॉरवर्ड-संगत: उपभोक्ता अज्ञात क्षेत्रों की अनदेखी करते हैं।

पूर्ण: दोनों।

संस्करण: 'पथ (/v1)', 'स्वीकार करें: अनुप्रयोग/vnd. ब्रांड। v2 + json ',' प्रोटो पैकेज v2 '।

विचलन नीति: आउटपुट विंडो (उदाहरण के लिए, 90 दिन), चेतावनी शीर्षकों/घटनाओं.

8) नकारात्मक और गलतियाँ भी एक अनुबंध हैं

मानकीकृत कोड: 400/401/403/404/409/422/429/5xx, अनिवार्य क्षेत्र 'कोड', 'संदेश', 'ट्रेस _ आईडी'।

आकार/सीमाएं अनुबंध (413/414/431 का हिस्सा हैं)।

पहचान: पुनरावृत्ति व्यवहार (409 बनाम 201 एक ही आईडी)।

शीर्षक: 429/503 पर 'रीट्री-आफ्टर', 'आइडेम्पोटेंसी-की', 'कंटेंट-लैंग्वेज', आदि।

त्रुटि पैटर्न:
json
{ "code":"validation_error", "message":"amount must be ≥ 1", "trace_id":"..." }

9) अनुबंध द्वारा प्रबंधित डेटा

उदाहरण - लाइव, सीआई में मान्य।

सीडीसी के लिए जुड़ नार न्यूनतम, नियतात्मक हैं।

डेटा उत्पादन - संख्या/तिथियों के लिए संपत्ति-आधारि लेकिन स्नैपशॉट की स्थिरता को तोड़ ने के लिए नहीं।

10) सीआई/सीडी में पाइपलाइन (संदर्भ)

1. लिंट/मान्य: OpenAPI/Proto/Avro ('मान्य', स्टाइल- линер)।

2. प्रकाशन: कलाकृति के रूप में अनुबंध (ब्रोकर/रजिस्ट्री)।

3. सत्यापित करें: प्रदाता सीडीसी पैकेट/विनिर्देशन परीक्षण चलाता है।

4. कैन-आई-डिप्लॉय गेट: हरे मैट्रिक्स के बिना कोई रिलीज की अनुमति नहीं है।

5. Diff-Verifies कि परिवर्तन शब्दार्थ डिफ हैं।

6. रिपोर्ट: JUnit/HTML, उल्लंघन/परिभाषाओं की सूची।

स्यूडो-मैट्रिक्स:
yaml jobs:
lint:...
publish-contract: needs: [lint]
verify-provider: needs: [publish-contract]
can-i-deploy:
if: always()
steps: [run: pact-broker can-i-deploy...]

11) उपकरण (कार्य वर्ग द्वारा)

लिंट/वेलिडेटर्स: ओपनापी-लिंटर्स, प्रोटोबुफ-लिंट, एवरो-टूल्स।

सीडीसी: संधि परिवार/ब्रोकर, स्प्रिंग क्लाउड कॉन्ट्रैक्ट, होवरफ्लाई (एचटीटीपी रिकॉर्ड/रिप्ले)।

विनिर्देशन धावक: स्कीमेथिसिस/ड्रेड जैसा दृष्टिकोण, पोस्टमैन परीक्षण + जेएसएन स्कीमा।

डिफ: सिमेंटिक-डिफ़ओपनएपीआई/प्रोटो/एवरो (ब्रेकिंग परिवर्तन का पता लगाता है)।

कंटेनर: प्रदाता/अनुबंध डेस्क जुटाने के लिए परीक्षक।

12) एंटीपैटर्न

"स्पेशल डॉक" कोड से अलग - desynchronization। संविदा को सेवा के पास रखें।

एक अनुबंध के बजाय एक तीसरे पक्ष की सेवा की मोकी - अपडेट के दौरान नाजुकता।

बेतरतीब प्रतिक्रियाएं/पीढ़ी, flake योजना के लिए बाध्यकारी बिना।

संस्करण के बिना प्रकार/अनिवार्य क्षेत्र बदल

बिना सूचना/डिक्लेरेशन के मौन एक्सटेंशन।

कोई नकारात्मक अनुबंध और त्रुटि कोड।

13) आईगेमिंग/वित्त की विशिष्टताएं

मुद्रा क्षेत्र को औपचारिक रूप दें: 'राशि' - पैमाने के साथ दशमलव, मुद्रा - ISO-4217, मात्रा के अपरिवर्तनीय।

भुगतान/वेबहुक अनुबंध: HMAC/mTLS, एंटी-रीप्ले ('X-Timestamp' विंडो), पहचान, 'रेट्री-आफ्टर'।

क्षेत्रीयता/किरायेदार: अनिवार्य हेडर 'एक्स-किरायेदार/एक्स-क्षेत्र', संदेशों का स्थानीयकरण।

घटनाएँ: अपरिवर्तित लॉग (ऑडिट), डीडुप्लिकेशन कुंजी, डिलीवरी गारंटी (कम से कम एक बार + आइडेम्पोटेंट हैंडलर)।

14) परीक्षणों के "कंकाल" के उदाहरण

14. 1 स्कीमेथिसिस-शैली (छद्म)

bash schemathesis run openapi. yaml --checks all --hypothesis-deadline=200

14. 2 पोस्टमैन कल्पना धावक के रूप में

js pm. test ("Scheme/v1/wallets/{ id} is valid," () => {
const schema = pm. collectionVariables. get("wallet_get_schema");
pm. expect(ajv. validate(JSON. parse(schema), pm. response. json())). to. be. true;
});

14. 3 सीडीसी प्रदाता सत्यापन (छद्म)

bash pact-broker can-i-deploy --pacticipant wallets --version $SHA --to-environment staging

15) प्रोड रेडीनेस चेकलिस्ट

  • भंडार में अनुबंध, सीआई कलाकृतियों को मान्य और प्रकाशित करता है।
  • सीडीसी महत्वपूर्ण एकीकरण के लिए सक्षम; ब्रोकर/मैट्रिक्स "कैन-आई-तैनात" काम करता है।
  • संगतता नीति (HTTP/gRPC/Events) प्रलेखित; स्वचालित शब्दार्थ-diff।
  • नकारात्मक अनुबंध: त्रुटियां, आकार की सीमा, पहचान, 'पुनरावृत्ति-आफ्टर'।
  • परीक्षण डेटा नियतात्मक है; उदाहरणों के स्नैपशॉट समर्थित हैं।
  • सत्यापन और मूल्यह्रास: समय सीमा, सूचनाएं, हेडर।
  • घटनाओं के लिए - स्कीमा रजिस्ट्री और संगतता मोड; उत्पादक/उपभोक्ता दोनों संस्करणों का परीक्षण कर रहा है।
  • कलाकृतियाँ: JUnit/HTML, diff/सत्यापित रिपोर्ट, संगतता मैट्रिक्स।
  • हादसा प्रक्रिया: तेज अनुबंध रोलबैक/फीचर ध्वज, इंटीग्रेटर्स को सूचना।

16) टीएल; डीआर

अनुबंधों में अपेक्षाओं को पकड़ें और उन्हें स्वचालित रूप से चलाएं: ग्राहक अपेक्षाओं के लिए सीडीसी, कार्यान्वयन से मेल खाने के लिए विनिर्देशन परीक्षण, घटनाओं के लिए स् सख्त संगतता नीतियां और नकारात्मक अनुबंध (त्रुटियां, सीमाएं, निष्क्रियता) रखें। आप परिवर्तनों को तोड़े बिना ग्रीन कैन-आई-डिप्लॉय मैट्रिक्स और सिमेंटिक-डिफ के बिना रिलीज नहीं कर सकते।

Contact

हमसे संपर्क करें

किसी भी प्रश्न या सहायता के लिए हमसे संपर्क करें।हम हमेशा मदद के लिए तैयार हैं!

Telegram
@Gamble_GC
इंटीग्रेशन शुरू करें

Email — अनिवार्य है। Telegram या WhatsApp — वैकल्पिक हैं।

आपका नाम वैकल्पिक
Email वैकल्पिक
विषय वैकल्पिक
संदेश वैकल्पिक
Telegram वैकल्पिक
@
अगर आप Telegram डालते हैं — तो हम Email के साथ-साथ वहीं भी जवाब देंगे।
WhatsApp वैकल्पिक
फॉर्मैट: देश कोड और नंबर (उदा. +91XXXXXXXXXX)।

बटन दबाकर आप अपने डेटा की प्रोसेसिंग के लिए सहमति देते हैं।