रेस्ट एपीआई टेस्टिंग और रेस्ट एश्योर्ड के लिए महत्वपूर्ण गाइड

इस संपूर्ण रेस्ट एश्योर्ड ट्यूटोरियल में हम जानने जा रहे हैं बाकी एपीआई टेस्टिंग गहराई में, एपीआई टेस्ट ऑटोमेशन के साथ-साथ मॉड्यूलर एप्रोच में रेस्ट एश्योर्ड

RestAssured और उसका उपयोग क्या है

रेस्ट अश्योर्ड रेस्ट एपीआई ऑटोमेशन टेस्टिंग के लिए एक बहुत व्यापक रूप से उपयोग की जाने वाली ओपन सोर्स तकनीक है, यह जावा आधारित लाइब्रेरी पर आधारित है।

रेस्ट एश्योर्ड एक प्रमुख क्लाइंट मोड में रेस्ट एपीआई के साथ इंटरैक्ट करता है, हम अनुरोध बनाने के लिए अलग-अलग परतों को जोड़कर एक ही अनुरोध को बढ़ा सकते हैं और सर्वर पर विभिन्न HTTPS क्रियाओं के माध्यम से HTTP अनुरोध बना सकते हैं।

लायब्रेरी में बनाया गया रेस्ट एश्योर्ड सर्वर से प्राप्त प्रतिक्रिया जैसे स्टेटस मैसेज, स्टेटस कोड और रिस्पांस बॉडी को पूरा करने के लिए बहुत सारे तरीके और उपयोगिताएँ प्रदान करता है।

रेस्ट एपीआई ऑटोमेशन टेस्टिंग के लिए रेस्ट एश्योर्ड ट्यूटोरियल की इस पूरी श्रृंखला में निम्नलिखित विषय हैं:

RestAssured-बाकी का आश्वासन दिया ट्यूटोरियल एपीआई परीक्षण
बाकी एश्योर्ड एपीआई ऑटोमेशन

आरंभ करना: बिल्ड टूल यानी Maven / gradle के साथ restAssured का कॉन्फ़िगरेशन

चरण 1: यदि आप मावेन के साथ काम कर रहे हैं तो बस निम्नलिखित निर्भरता pom.xml में जोड़ें (आप किसी अन्य संस्करण को भी चुन सकते हैं):

REST एश्योर्ड के साथ शुरुआत करने के लिए, बस अपने प्रोजेक्ट पर निर्भरता जोड़ें। 


    io.rest-आश्वासित
    निश्चित होना
    4.3.0 है
    परीक्षा

यदि आप ग्रेडेल के साथ काम कर रहे हैं तो बिल्ड में निम्न जोड़ें। फिर से (फिर से आप किसी अन्य संस्करण को भी चुन सकते हैं):

testCompile समूह: 'io.rest-आश्वासित', नाम: 'बाकी-सुनिश्चित', संस्करण: '4.3.0'

चरण 2: आश्वासन दिया गया एकीकृत किया जा सकता है और इसका इस्तेमाल मौजूदा यूनिट टेस्ट फ्रेमवर्क के साथ बहुत आसानी से किया जा सकता है।

यहाँ हम TestNg का उपयोग कर रहे हैं जैसा कि यूनिट टेस्ट फ्रेमवर्क के अनुसार है।

एक बार रेस्ट एश्योर्ड के पुस्तकालयों को आयात किया जाता है, तो हमें अपने परीक्षण वर्गों में निम्नलिखित स्थैतिक आयातों को जोड़ना होगा:

आयात स्थैतिक io.restassured.estAssured। *;

आयात स्थिर org.hamcrest.Matchers। *;

नोट: इस आगामी शिक्षण उद्देश्य के लिए, हम एर्गास्ट डेवलपर एपीआई का परीक्षण करेंगे, जो यहां पाया जा सकता है। यह एपीआई फॉर्मूला 1 दौड़, ड्राइवरों, सर्किट, आदि से संबंधित ऐतिहासिक डेटा प्रदान करता है।

सिंटेक्स के साथ परिचित:

बाकी बीडीडी प्रारूप का समर्थन करता है (घेरकिन सिंटेक्स) परीक्षण स्क्रिप्ट लिखने के लिए अर्थात दिए गए / कब / तब / और प्रारूप में लिखने के लिए, हम मान रहे हैं कि आपको BDD / gherkin सिंटैक्स पर समझ है, अगर नहीं तो हम समझने के लिए 30 मिनट का समय बिताने का सुझाव देंगे कि BDD क्या है (घेरकिन सिंटेक्स) और यह कैसे काम करता है और इसकी बहुत बुनियादी है।

T-01: हमारी 1 स्क्रिप्ट जो मूल रूप से 1 में इस एपीआई का उपयोग करके एफ 2017 में सर्किट की संख्या को मान्य कर रही है (http://ergast.com/api/f1/2017/circuits.json)

@ टेस्ट (विवरण = "2017 सीज़न में सर्किट की संख्या 20 होनी चाहिए") सार्वजनिक शून्य मान्यकरणनंबरऑफसीट्स () {दिए गए ()। कब ()। json ")। तब ()। मुखर ()। शरीर ("MRData.CircuitTable.Circuits.circuitId", hasSize (1)); }

बाकी एपीआई प्रतिक्रिया सत्यापन :

1. एपीआई अनुरोध के JSON प्रतिक्रिया को कैप्चर करता है।

2. GPI अभिव्यक्ति "MRData.CircuitTable.Circuits.circuitId" का उपयोग कर सर्किट के लिए प्रश्न

3. सत्यापित करता है सर्किटआईड तत्वों के संग्रह का आकार 20 है

यहां हम उपयोग कर रहे हैं हैमरेस्ट मैचर्स जैसे विभिन्न सत्यापन के लिए

कई अन्य विधियां हैं जो कुछ निश्चित सत्यापन करने के लिए उपयोगी है।

आप इसके अलावा मैचर्स और तरीकों की पूरी सूची के लिए हैमरेस्ट लाइब्रेरी प्रलेखन का उल्लेख कर सकते हैं।

प्रतिक्रिया कोड मान्य करना:

दिया ()। When ()। get ("http://ergast.com/api/f1/2017/circuits.json") .then ()। assertThat ()। statusCode (200);

सामग्री प्रकार की मान्यता

दिया ()। कब ()। get ("http://ergast.com/api/f1/2017/circuits.json") .then ()। assertThat (); contentType (ContentType.JSON);

शीर्ष लेख "सामग्री-लंबाई"

दिया ()। When ()। get ("http://ergast.com/api/f1/2017/circuits.json") .then ()। assertThat ()। हैडर (" सामग्री-लंबाई ", बराबर (" 4551 "));

एकल परीक्षणों में एकाधिक सत्यापन के रूप में (उपयोग और () तरीकों से):

@ टेस्ट (विवरण = "2017 सीज़न में सर्किट की संख्या 20 होनी चाहिए")
    सार्वजनिक शून्य मान्यकरणनंबरऑफसीर्कुट्स () {
        दिए गए ()। कब ()। get ("http://ergast.com/api/f1/2017/circuits.json") .en ()। 4551 ")) और ()। स्थितिकोड (200);
    }

प्रतिक्रियाशील शरीर तत्व / विशेषता मान्य करना:

JsonPath का उपयोग हम JSON विशेषताओं का मान लाने के लिए कर सकते हैं और TestNg का उपयोग करके जोर डाल सकते हैं

@ टेस्ट (विवरण = "श्रृंखला का नाम जो एफ 1 है")
    सार्वजनिक शून्य मान्यकरणशरीरनाम () {
        // प्रतिक्रिया प्रतिक्रिया को स्ट्रिंग में परिवर्तित करें
        स्ट्रिंग प्रतिक्रियाबॉडी = दी ()। जब ()। Get ("http://ergast.com/api/f1/2017/circuits.json") .getBody ()। AsString ();
        // रिस्पांस बॉडी को स्ट्रिंग के रूप में पास करके JsonPath ऑब्जेक्ट बनाएं
        JsonPath resJson = new JsonPath (responseBody);
        // MRData के तहत विशेषता मान श्रृंखला लाएं
        स्ट्रिंग श्रृंखलानाम = resJson.getString ("MRData.series");
        // उपयोगकर्ता TestNg अभिकथन
        Assert.assertEquals ("f1", seriesName);
    }

इसी तरह से हम XMLPath का उपयोग करके XML प्रतिक्रिया का मूल्य प्राप्त कर सकते हैं। क्या हम JSON के साथ काम कर रहे हैं इसलिए हमने यहाँononath का उपयोग किया

RESTful API केवल दो प्रकार के मापदंडों का समर्थन करते हैं:

A. क्वेरी पैरामीटर: यहां एपीआई एंडपॉइंट के अंत में मापदंडों को जोड़ा जाता है और प्रश्न चिह्न द्वारा पहचाना जा सकता है और एक प्रमुख मूल्य युग्म बनाता है जैसे 

https://www.google.com/search?q=https://www.wikipedia.org/

यहाँ उपर्युक्त API में 'q' पैरामीटर है और 'https://www.wikipedia.org/' उस पैरामीटर का मान है, यदि हम सर्च करें 'SOMETHING_ELSE_TEXT'हम पैरामीटर का मान बदल सकते हैं 'q' के साथ 'SOMETHING_ELSE_TEXT'https://www.wikipedia.org/ का स्थान।

B. पथ पैरामीटर: ये RESTful API एंडपॉइंट का हिस्सा हैं। 

उदा। समापन बिंदु जो हमने पहले इस्तेमाल किया था: http://ergast.com/api/f1/2017/circuits.json, यहाँ "2017" एक पथ पैरामीटर मान है।

वर्ष के लिए एक परिणाम प्राप्त करने के लिए २०१६ को हम २०१६ से बदल सकते हैं तब एपीआई 2016 के लिए प्रतिक्रिया निकाय देगा।

RestAssured के लिए पथ परम का उपयोग कर टेस्ट

@ टेस्ट (विवरण = "पथ परम का उपयोग करके सर्किट की संख्या का सत्यापन")
    सार्वजनिक शून्य परीक्षण
        स्ट्रिंग सीजननंबर = "2017";
       स्ट्रिंग प्रतिक्रियाबॉडी = दी गई ()। पथपरम ("सीज़न", सीज़ननंबर) .जब () () "(" http://ergast.com/api/f1/unningseasonarios/circuits.json ") .get.ody () ();
        // रिस्पांस बॉडी को स्ट्रिंग के रूप में पास करके JsonPath ऑब्जेक्ट बनाएं
        JsonPath resJson = new JsonPath (responseBody);
        // MRData के तहत विशेषता मान श्रृंखला लाएं
        स्ट्रिंग श्रृंखलानाम = resJson.getString ("MRData.series");
        // उपयोगकर्ता TestNg अभिकथन
        Assert.assertEquals ("f1", seriesName);
    }

RestAssured के लिए क्वेरी परम का उपयोग कर टेस्ट

@ टेस्ट (विवरण = "क्वेरी परम का उपयोग करके Google खोज का सत्यापन")
    सार्वजनिक शून्य परीक्षण
        स्ट्रिंग searchItem = "https://www.wikipedia.org/";
  दिए गए ()। queryParam ("q", searchItem) .when ()। get ("https://www.google.com/google.com/earch") .then ()। assertThat ()। statusCode (200);
    }

परिक्षण परीक्षण:

हम डेटा संचालित परीक्षण कर सकते हैं (यानी एक ही टेस्ट स्क्रिप्ट को इनपुट डेटा के विभिन्न सेटों के साथ कई बार निष्पादित किया जाएगा और अलग-अलग आउटपुट डेटा प्रदान किया जाएगा) 

चरण 1: एक TestNg डेटा प्रदाता बनाया गया।

चरण 2: टेस्ट स्क्रिप्ट में डेटा प्रदाता का उपभोग करें।

@DataProvider (नाम = "seasonsAndRaceNumbers")
    सार्वजनिक वस्तु [] [] testDataFeed () {
        नई वस्तु लौटाएँ [] [] {
                {"2017", 20},
                {"2016", 21}
        };
    }
@ टेस्ट (विवरण = "विभिन्न मौसमों में सर्किट सत्यापन की संख्या", डेटाप्रोवाइडर = "सीज़नअंडरस्पेस") सार्वजनिक शून्य सर्किटनंबर वेलिडेशन (स्ट्रिंग सीज़न, इंट रेसन्यूल्स) {दिए गए ()।pathParam ("सीज़न", सीज़नयर) .when ()। get ("http://ergast.com/api/f1/"{मौसम}रेसनोट्स)); }

RestAssured के साथ बहुआयामी मापदंडों के साथ काम करना 

बहु-मूल्य पैरामीटर वे पैरामीटर हैं जिनके पास अधिक मान है तो प्रति पैरामीटर नाम (यानी मान paramKey की एक सूची), हम उन्हें नीचे की तरह संबोधित कर सकते हैं:

दिए गए ()। परम ("परमकाम", "परमवुले 1", "परममवुएल 2")। जब ()। ("एपीआई URL") मिलेगा;

या हम एक सूची तैयार कर सकते हैं और सूची को मान के रूप में पारित कर सकते हैं जैसे:

सूची paramValue = नया नया ArrayList ();
paramValue.add ("paramvalue1");
paramValue.add ("paramvalue2);
दिया गया ()। परम ("परमकाम", परमलव) (।) () (मिलता है ("एपीआई यूआरएल)");
RestAssured के साथ कुकी के साथ काम करना 
दिया गया ()। कुकी ("कुकी", "कुकीवेल")। जब ()। get ("एपीआई URL");

Or 

हम यहां बहु-मूल्य कुकी भी निर्दिष्ट कर सकते हैं जैसे:

दिया ()। कुकी ("कुकी", "कुकीवैल 1", "कुकीविला 2"); जब () ("एपीआई यूआरएल") मिलेगा;

हेडर के साथ काम करना:

हम हेडर / हेडर का उपयोग करते हुए अनुरोध में निर्दिष्ट कर सकते हैं जैसे:

दिया गया ()। हेडर ("हेडरके 1", "हेडरवैल्यू 1")। हेडर ("हेडरके 2", "हेडरवैल्यू 2")। जब ()। get ("एपीआई URL");

सामग्री के साथ कार्य करना

दिया गया ()। कंटेंट टाइप ("एप्लिकेशन / json")। जब ()। get ("API URL");

Or 

दिया ()। ContentType (ContentType.JSON) .when ()। get ();

प्रतिक्रिया समय को मापें:

लॉन्ग टाइमडेरेशनइन्केंड्स = मिलता है ("एपीआई URL")। टाइमइन (SECONDS);

बाकी एपीआई प्रमाणीकरण

Oest, पाचन, प्रमाण पत्र, फॉर्म और प्रीमेप्टिव बेसिक ऑथेंटिकेशन जैसे विभिन्न विभिन्न स्कीमों का समर्थन करता है। हम या तो प्रत्येक अनुरोध के लिए प्रमाणीकरण सेट कर सकते हैं 

यहां एक नमूना अनुरोध का उपयोग किया गया है:

दिए गए ()। ज़ोर ()। बुनियादी ("uName", "pwd"))। जब () ("URL URL") मिलेगा ..

दूसरी ओर प्रमाणीकरण और HTTP अनुरोधों के लिए नीचे दिए गए दृष्टिकोण में परिभाषित किया गया है:

RestAssured.authentication = basic ("uName", "pwd");

बुनियादी वाहन प्रकार:

दो प्रकार के बेसिक ऑर्टिकल हैं, "प्रीमेप्टिव" और "चैलेंजेड टोकन बेसिक ऑथेंटिकेशन"।

निवारक मूल प्रामाणिक:

यह मूल प्रमाणीकरण को क्रेडेंशियल भेजेगा, इससे पहले कि सर्वर कुछ स्थितियों में अनधिकृत प्रतिक्रिया देता है, साथ ही अनुरोध को ट्रिगर किया जा रहा है, इस प्रकार अतिरिक्त कनेक्शन बनाने के ओवरहेड को कम किया जा सकता है। जब तक हम सर्वर को चुनौती देने की क्षमता का परीक्षण नहीं कर लेते, यह आमतौर पर प्रमुख रूप से होती है। 

उदाहरण के लिए।

दिए गए ()। ज़ोर () (पूर्व) (बेसिक ("uName", "pwd"))। जब ()) मिलेगा ("URL") तब ()। statusCode (200);

मूल प्रमाणीकरण को चुनौती दी

दूसरी ओर "चुनौती दी हुई बुनियादी प्रमाणीकरण" बाकी आश्वासन क्रेडेंशियल्स की आपूर्ति नहीं करेगा जब तक कि सर्वर ने स्पष्ट रूप से इसके लिए नहीं कहा है अर्थात सर्वर अनधिकृत प्रतिक्रिया को फेंकता है। उसके बाद UnAuthorized response Rest-Assured सर्वर को एक और रिक्वेस्ट भेजता है जो की Auth है।

दिए गए ()। ज़ोर ()। बुनियादी ("uName", "pwd"))। जब () मिलेगा ("URL") तब ()। statusCode (200);

डाइजेस्ट ऑथेंटिकेशन

अब तक केवल "चुनौती पचा प्रमाणीकरण" पर विचार किया जा रहा है। जैसे:

दिए गए ()। ज़ोर ()। डाइजेस्ट ("uName", "pwd"))। जब () मिलेगा ("URL") तब ()। statusCode (200); 

प्रपत्र प्रमाणीकरण

हम आवेदन / परिदृश्यों के आधार पर इसे 3 अलग-अलग तरीकों से प्राप्त कर सकते हैं:

फॉर्म प्रमाणीकरण इंटरनेट पर बहुत लोकप्रिय में से एक है जिसमें एक उपयोगकर्ता एक वेब पेज के माध्यम से अपने क्रेडेंशियल्स यानी उपयोगकर्ता नाम और पासवर्ड दर्ज करता है और सिस्टम में लॉगिन करता है। इसका उपयोग करके इसे संबोधित किया जा सकता है 

दिए गए ()। ज़ोर ()। फ़ॉर्म ("uName", "pWd")।
जब ()। get ("URL");
तब ()। स्थिति कोड (200);

हालांकि यह काम नहीं कर सकता क्योंकि यह इष्टतम है और यह वेबपेज की जटिलता के आधार पर पास या फेल हो सकता है। एक बेहतर विकल्प यह है कि नीचे दिए गए दृष्टिकोण में प्रपत्र प्रमाणीकरण सेट करते समय ये विवरण प्रदान करें:

दिए गए ()। ज़ोर ()। प्रपत्र ("uName", "pwd", नया FormAuthConfig ("/ 'यहाँ उल्लेख रूप क्रिया नाम) जो html पृष्ठ कोड का हिस्सा है, जो फ़ॉर्म टैग", "uName", "pwd" "))। जब ()। get (" URL ") तब ()। statusCode (200);

इस दृष्टिकोण में REST एश्योर्ड को आंतरिक रूप से वेब पेज के माध्यम से अतिरिक्त अनुरोध और पार्स ट्रिगर करने की आवश्यकता नहीं है। 

यदि आप डिफ़ॉल्ट स्प्रिंग सिक्योरिटी का उपयोग कर रहे हैं तो एक पूर्वनिर्धारित FormAuthConfig ट्रिगर है।

दिए गए ()। ज़ोर ()। फ़ॉर्म ("uName", "Pwd", FormAuthConfig.springSecurity ())। जब ()। get ("URL")। तब ()। स्थिति (200);

नोट: अगर हम फॉर्म इनपुट के साथ अतिरिक्त इनपुट डेटा भेजना चाहते हैं तो हम नीचे लिख सकते हैं:

दिए गए ()। परिस्थिति ()। फॉर्म ("uName", "pwd", formAuthConigig ()। withAdditionalFields ("firstInputField", "secondInputField") ..

CSRF:

CSRF का मतलब क्रॉस-साइट अनुरोध जालसाजी है।

आजकल CSRF सुरक्षा हमलों से बचने के लिए प्रतिक्रिया के साथ CSRF टोकन प्रदान करना सर्वर के लिए बहुत आम है। REST एश्योर्ड ऑटोमैटिक पार्सर का उपयोग करके और CSRF टोकन प्रदान करके इसका समर्थन करता है। 

इस REST एश्योर्ड को प्राप्त करने के लिए वेबसाइट का एक अतिरिक्त अनुरोध और पार्स (कुछ स्थिति) बनाने की आवश्यकता है।

हम नीचे दिए गए कोड को लिखकर CSRF समर्थन को सक्षम कर सकते हैं:

दिए गए ()। ज़ोर ()। फ़ॉर्म ("uName", "pwd", formAuthConig ()। withAutoDetectionOfCsrf ())। जब ()। get ("URL")। तब ()। स्थिति (200);

अतिरिक्त बीमा में सहायता करने के लिए और पार्सिंग को अधिक निर्दोष और मजबूत बनाने के लिए हम CSRF फ़ील्ड नाम की आपूर्ति कर सकते हैं (यहाँ हम यह मान रहे हैं कि हम स्प्रिंग सुरक्षा डिफ़ॉल्ट मानों का उपयोग कर रहे हैं और हम पूर्वनिर्धारित स्प्रिंगसुरिटी फॉर्मऑफ़सिटैफ़िग का उपयोग कर सकते हैं):

दिए गए ()। ज़ोर ()। फ़ॉर्म ("uName", "pwd", springSecurity ()) withCsrfFieldName ("_ csrf")।

डिफ़ॉल्ट रूप से CSRF मान अनुरोध के साथ एक फार्म पैरामीटर के रूप में पारित किया जाता है, लेकिन हम इसे हेडर के रूप में भेजने के लिए कॉन्फ़िगर कर सकते हैं यदि नीचे इसकी आवश्यकता हो तो:

दिए गए ()। ज़ोर ()। फ़ॉर्म ("uName", "pwd", springSecurity ()। withCsrfFieldName ("_ csrf")। sendCsrfTokenAsHeader ()) .जब (("URL")। तब ()। statusCode (200);

OAuth 1:

OAuth 1 को कक्षापथ में होना चाहिए। OAuth 1 प्रमाणीकरण का उपयोग करने के लिए हम कर सकते हैं:

दिए गए ()। ज़ोर ()। oauth (..)। कब () ।।

OAuth 2:

दिए गए ()। ज़ोर ()। oauth2 (accessToken) .when ()। ।।

उपरोक्त दृष्टिकोण में OAuth2 एक्सेसटोकन को हेडर में माना जाएगा। अधिक स्पष्ट होने के लिए हम भी कर सकते हैं:

दिए गए ()। ज़ोर ()। प्रीमेप्टिव ()। oauth2 (accessToken) .when ()। ..

फ़ाइल, बाइट-ऐरे, इनपुट स्ट्रीम या अनुरोध में पाठ:

सर्वर पर बड़ी मात्रा में डेटा भेजते समय यह आम तौर पर मल्टीपर्ट फॉर्म डेटा तकनीक का उपयोग करने के लिए एक सामान्य दृष्टिकोण है। बाकी आश्वस्त मल्टीपार्ट नामक तरीके प्रदान करते हैं जो हमें एक फ़ाइल, बाइट-ऐरे, इनपुट स्ट्रीम या टेक्स्ट को अपलोड करने के लिए निर्दिष्ट करने की अनुमति देता है। 

दिए गए ()। मल्टीपार्ट (नई फ़ाइल ("/ फाइल_पैथ"))। जब ()। पोस्ट ("अपलोड /");

आराम का आश्वासन के साथ पोस्ट अनुरोध निर्माण

POST और PUT अनुरोधों के साथ, हम सर्वर को डेटा भेजते हैं और इसके मूल रूप से संसाधनों / संसाधनों के अपडेशन का निर्माण करते हैं, आप इसे एक लिखित या अपडेट ऑपरेशन के रूप में मान सकते हैं।

जो डेटा एक POST अनुरोध में सर्वर को भेजा जा रहा है वह HTTP अनुरोध / एपीआई कॉल के शरीर में भेजा गया है। 

जिस प्रकार की सामग्री या डेटा भेजा जा रहा है, वह एपीआई या XML, JSON या किसी अन्य प्रारूप के आधार पर अलग-अलग प्रारूप का हो सकता है, जो सामग्री-प्रकार शीर्ष लेख द्वारा परिभाषित किया गया है। 

यदि POST बॉडी में JSON डेटा शामिल है तो हेडर कंटेंट-टाइप एप्लिकेशन/json होगा। इसी तरह, एक POST अनुरोध के लिए जिसमें XML है तो हेडर कंटेंट-टाइप एप्लिकेशन/xml प्रकार का होगा।

नीचे उसी के लिए कोड स्निपेट दिया गया है:

दिए गए ()। सामग्री टाइप ("एप्लिकेशन / json")। परम ("pk", "pv")। जब ()) शरीर ("JsonPAyloadString")। पोस्ट ("url")। तब ()। AssertThat ()। स्टेटसकोड (200);

नोट: अलग-अलग तरीके हैं जिनसे हम पेलोड / रिक्वेस्ट बॉडी को विधि "बॉडी" के अंदर पास कर सकते हैं जैसे स्ट्रिंग (जैसा कि ऊपर स्निपेट में दिखाया गया है), JsonObject, एक फ़ाइल आदि के रूप में।

बाकी बीमित राशि के साथ अनुरोध:

दिए गए ()। सामग्री टाइप ("एप्लिकेशन / json")। परम ("pk", "pv")। स्टेटसकोड (200);

आराम-आश्वासन के साथ अनुरोध हटाएं:

दिए गए ()। सामग्री टाइप ("एप्लिकेशन / json")। परम ("पीके", "पीवी")।

और इस तरह हम विभिन्न एपीआई क्रियाओं के लिए अलग रेस्ट एपीआई कॉल (GET / POST / PUT / DELETE आदि) बना सकते हैं

जावा में सीरियललाइज़ेशन और डिसेरिएलाइज़ेशन:

सीरियलाइज़ेशन एक मूल रूप से प्रसंस्करण या ऑब्जेक्ट स्टेट को बाइट स्ट्रीम में परिवर्तित करना है। दूसरी ओर जावा में डीसर्जरीकरण मेमोरी के भीतर बाइट स्ट्रीम को वास्तविक जावा ऑब्जेक्ट में संसाधित या परिवर्तित कर रहा है। इस तंत्र का उपयोग वस्तु की दृढ़ता में किया जाता है।

नीचे उसी के लिए ब्लॉक आरेख है 

1ESLuGPTk5gUs9eA5 OXkbw KyHeRnO9TdX bg OEo3 ZD7BJ9HqLY HcOaf9saeK137JSzmDj7 TY2WmrlVogzLzkgmN1gvLvyaF6cdGb6psTcv0HVH98J45L4b1a0c3ucUvJ6p

सीरियलाइजेशन के लाभ

A. किसी वस्तु की स्थिति को बचाने / बनाए रखने के लिए।

ख। किसी नेटवर्क पर किसी वस्तु को प्रवाहित करना।

JAVA के साथ सीरियल हासिल करना

जावा ऑब्जेक्ट सीरियल करने योग्य बनाने के लिए हमें java.io.Serializable इंटरफ़ेस लागू करना होगा।

ObjectOutputStream वर्ग जिसमें राइटऑबजेक्ट () विधि होती है जो ऑब्जेक्ट को क्रमांकित करने के लिए जिम्मेदार है।

ObjectInputStream वर्ग में readObject () नामक एक अन्य विधि भी होती है, जो किसी वस्तु को डिस्क्राइब करने के लिए ज़िम्मेदार है।

कक्षाएं जो java.io.Serializable इंटरफ़ेस को लागू कर रही हैं, वहां ऑब्जेक्ट केवल धारावाहिक हो सकते हैं।

Serializable सिर्फ एक मार्कर इंटरफ़ेस है और अन्य बाज़ार इंटरफ़ेस की तरह इसका कोई डेटा सदस्य या विधि नहीं है जो इसके साथ जुड़ा हुआ है। इसका उपयोग जावा कक्षाओं को "चिह्नित" करने के लिए किया जाता है ताकि इन वर्गों की वस्तुओं को कुछ क्षमताएं मिलें। जैसे कुछ अन्य मार्कर इंटरफेस हैं: - क्लोन करने योग्य और रिमोट आदि।

टिप्पणियाँ :

1. यदि माता-पिता वर्ग ने एक सीरियल योग्य इंटरफ़ेस लागू किया है, तो चाइल्ड क्लास को इसे लागू करने की आवश्यकता नहीं है, लेकिन इसके विपरीत लागू नहीं है।

2. केवल गैर-स्थैतिक डेटा सदस्यों को सीरियलाइज़ेशन प्रक्रिया के साथ संग्रहीत किया जाता है।

3. स्थैतिक डेटा सदस्यों और भी क्षणिक डेटा सदस्यों को Serialization द्वारा संग्रहीत नहीं किया जा रहा है। इसलिए, यदि हमें गैर-स्थैतिक डेटा सदस्य के मूल्य को संग्रहीत करने की आवश्यकता नहीं है, तो हम इसे क्षणिक बना सकते हैं।

4. किसी ऑब्जेक्ट के डिसिएरलाइज़ होने पर कंस्ट्रक्टर को कभी नहीं कहा जाता है।

चरण 1: पहला कदम मूल रूप से एक वर्ग का निर्माण है जो सीरियल इंटरफ़ेस को लागू करता है:

आयात java.io.Serializable;
सार्वजनिक वर्ग डमी लागू करता है सीरियल {
    निजी int i;
    निजी स्ट्रिंग डेटा;
    सार्वजनिक डमी (int i, स्ट्रिंग डेटा)
    {
        यह। मैं = मैं;
        यह डेटा = डेटा;
    }
}

चरण 2: इसे क्रमबद्ध करने के लिए एक वर्ग बनाएँ:

आयात java.io.FileNotFoundException;
आयात java.io.FileOutputStream;
आयात java.io.IOException;
आयात java.io.bjectOutputStream;
सार्वजनिक वर्ग सीरियल {
    सार्वजनिक स्थैतिक शून्य क्रमांकन (ऑब्जेक्ट classObject, स्ट्रिंग फ़ाइलनाम) {
        प्रयत्न {
            FileOutputStream fileStream = नया FileOutputStream (fileName);
            ObjectOutputStream ObjectStream = new ObjectOutputStream (fileStream);
            objectStream.writeObject (classObject);
            objectStream.close ();
            fileStream.close ();
        } कैच (FileNotFoundException e) {
            // TODO ऑटो-जनरेट कैच ब्लॉक
            e.printStackTrace ();
        } कैच (IOException e) {
            // TODO ऑटो-जनरेट कैच ब्लॉक
            e.printStackTrace ();
        }
    }
    सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {
        डमी डमीबॉज = नई डमी (10, "लैम्ब्डा-जीक्स");
        सीरियलाइज़ेशन (डमीबॉज, "डमशेरियलाइज़्ड");
    }
}

चरण 3: एक बार जब Step2 सफलतापूर्वक पूरा हो जाता है, तो आपको यह देखने के लिए मिलेगा कि उसमें कुछ डेटा के साथ एक फ़ाइल बनाई गई है, यह डेटा मूल रूप से ऑब्जेक्ट सदस्यों का क्रमबद्ध डेटा है।

  जावा के साथ भेदभाव:

यहाँ नीचे कोड स्निपेट है:

 सार्वजनिक स्थैतिक वस्तु DeSerialize (स्ट्रिंग फ़ाइलनाम)
    {
        प्रयत्न {
            FileInputStream fileStream = नई FileInputStream (नई फ़ाइल (फ़ाइलनाम));
            ObjectInputStream objectStream = new ObjectInputStream (fileStream);
            ऑब्जेक्ट deserializeObject = objectStream.readObject ();
            objectStream.close ();
            fileStream.close ();
            वापसी deserializeObject;
        } कैच (FileNotFoundException e) {
            e.printStackTrace ();
        } कैच (IOException e) {
            e.printStackTrace ();
        } पकड़ (ClassNotFoundException e) {
            e.printStackTrace ();
        }
        वापसी शून्य;
    }

ड्राइवर कोड इस प्रकार है:

 सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {
      / * डमी डमीबॉज = नई डमी (10, "लम्बा-गीक्स");
        सीरियलाइज़ेशन (डमीबॉज, "डमशेरियलाइज़्ड");
        System.out.println ("-------------------------------------------" ------------------------------- ");
      */
        डमी deSerializedRect = (डमी) DeSerialize ("DummSerialized");
        System.out.println ("Serialized Object से डेटा" + deSerializedRect.print ());
        System.out.println ("-------------------------------------------" ------------------------------- ");
    }

JSONPATH अधिक सिंटैक्स / क्वेरी:

नीचे एक JSON मानें:

{
  "ऑर्गनाइजेशनटेल्स": "डमी का विवरण संगठन",
  "क्षेत्र": "एशिया",
  "Emp-Details": [
    {
      "ऑर्ग": "लैम्ब्डा-जीक्स"
      "जानकारी": {
        "Ph": 1234567890,
        "जोड़ें:" XYZ ",
        "आयु": 45
      }
    },
    {
      "ऑर्ग": "लैम्ब्डा-जीक्स -2",
      "जानकारी": {
        "Ph": 2134561230,
        "जोड़ें": "एबीसी",
        "आयु": 35
      }
    }
  ]
}

JSON के ऊपर, OrganizationDetails और क्षेत्र को लीफ नोड के कारण के रूप में कहा जाता है क्योंकि वे आगे बच्चे नोड्स / तत्व नहीं हैं, लेकिन दूसरी ओर Emp-Details वाले बच्चे के नोड हैं, इसलिए इसे लीफ नोड के रूप में संदर्भित नहीं किया जाता है।

यहाँ अगर हम कोशिश करते हैं कि हम OrganizationDetails का मान प्राप्त करें तो हमें उपयोग करने की आवश्यकता है:

$ .OrganizationDetails 
यह परिणाम होगा:
 [
  "संगठन का डमी विवरण"
]

जैसे क्षेत्र के लिए डेटा प्राप्त करने के लिए हमें लिखना होगा:

$ .Region 

यदि हम 1 कर्मचारी के लिए आयु का मान खोजना चाहते हैं तो हम लिख सकते हैं:

$ .Emp-Details [0]। Information.Age
यह परिणाम होगा:
[
  45
]

2 वें कर्मचारी की आयु के लिए हम जैसा लिख ​​सकते हैं

$ .Emp-Details [1]। Information.Age
यह परिणाम होगा: [35]

इस तरह से हम JSONPath अभिव्यक्ति / क्वेरी को JSON में संबंधित क्षेत्रों के लिए डेटा लाने के लिए समझ सकते हैं।