Υπόλοιπο Δοκιμή API || Γρήγορος οδηγός για το RestAssured tutorial 2020

Rest Assured API testing για αυτοματοποιημένο Rest API Testing

RestAssured - Οι υπόλοιποι εγγυημένοι έλεγχοι api tutorial
Υπόλοιπο ασφαλισμένου API αυτοματισμού

Σε αυτό το εξαντλητικό σεμινάριο Rest Assured θα μάθουμε το Rest API Testing σε βάθος, API Test Automation και Rest Assured σε modularized προσέγγιση

Τι είναι το RestAssured και η χρήση του

Το Rest Assured είναι μια ευρέως χρησιμοποιούμενη τεχνολογία ανοιχτού κώδικα για REST API Automation Testing, βασίζεται σε βιβλιοθήκη με βάση java.

Το Rest Assured αλληλεπιδρά με το Rest API σε λειτουργία χωρίς κεφάλι πελάτη, μπορούμε να βελτιώσουμε το ίδιο αίτημα προσθέτοντας διαφορετικά επίπεδα για να σχηματίσουμε το αίτημα και να δημιουργήσουμε αίτημα HTTP μέσω διαφορετικών ρήματα HTTPS στο διακομιστή.

Το Rest Assured ενσωματωμένη βιβλιοθήκη παρέχει τεράστιες μεθόδους και βοηθητικά προγράμματα για την εκτέλεση της επικύρωσης της απόκρισης που λαμβάνεται από τον διακομιστή, όπως μήνυμα κατάστασης, κωδικός κατάστασης και σώμα απόκρισης.

Αυτή η πλήρης σειρά του Rest Assured Tutorial for REST API Automation Testing αποτελείται από τα ακόλουθα θέματα:

Ξεκινώντας: Διαμόρφωση ανάπαυσης Διασφάλιση με εργαλείο κατασκευής, δηλαδή Maven / gradle

ΒΗΜΑ 1: Εάν εργάζεστε με το maven απλώς προσθέστε την ακόλουθη εξάρτηση στο pom.xml (μπορείτε επίσης να επιλέξετε οποιαδήποτε άλλη έκδοση):

Για να ξεκινήσετε με το REST Assured, απλώς προσθέστε την εξάρτηση στο έργο σας. 


    io. ασφαλισμένος
    Μείνε ήσυχος
    4.3.0
    δοκιμή

Εάν εργάζεστε με το gradle προσθέστε απλώς τα ακόλουθα στο build.gradle (πάλι μπορείτε να επιλέξετε και οποιαδήποτε άλλη έκδοση):

testCompile group: 'io.rest -ured', όνομα: 'rest-assured', έκδοση: '4.3.0'

ΒΗΜΑ 2: Το REST Assured μπορεί να ενσωματωθεί και να χρησιμοποιηθεί πολύ εύκολα με τα υπάρχοντα πλαίσια δοκιμής μονάδας, δηλαδή Testng, JUnit

Εδώ χρησιμοποιούμε το testNg σύμφωνα με το Unit Test Framework.

Μόλις εισαχθούν οι βιβλιοθήκες του Rest Assured, τότε πρέπει να προσθέσουμε τις ακόλουθες στατικές εισαγωγές στις δοκιμαστικές τάξεις μας:

εισαγωγή στατικού io.restassured.RestAssured. *;

εισαγωγή στατικού org.hamcrest.Matchers. *;

ΣΗΜΕΙΩΣΗ : Για αυτόν τον επερχόμενο σκοπό μάθησης, θα δοκιμάσουμε το Ergast Developer API, Που μπορείτε να βρείτε εδώ. Αυτό το API παρέχει ιστορικά δεδομένα που σχετίζονται με αγώνες Formula 1, προγράμματα οδήγησης, κυκλώματα κ.λπ.

Εξοικείωση με τη σύνταξη:

Το Rest Assured υποστηρίζει μορφή BDD (Σύνταξη Gherkin) για να γράψετε τα δοκιμαστικά σενάρια, δηλαδή σε μορφή Given / When / Then / And, Υποθέτουμε ότι έχετε κατανόηση σχετικά με τη σύνταξη BDD / gherkin, αν όχι τότε θα σας συνιστούσαμε να αφιερώσετε 30 λεπτά χρόνου για να καταλάβετε τι είναι BDD (Σύνταξη Gherkin) και πώς λειτουργεί και είναι πολύ βασικό.

Τ-01: Το 1ο σενάριό μας που βασικά επικυρώνει τον αριθμό κυκλωμάτων στο F1 το 2017 χρησιμοποιώντας αυτό το API (http://ergast.com/api/f1/2017/circuits.json)

@Test (περιγραφή = "Αριθμός κυκλωμάτων το 2017, η σεζόν πρέπει να είναι 20") δημόσιο άκυρο επικύρωσηNumberOfCircuits () {δεδομένο (). When (). Get ("http://ergast.com/api/f1/2017/circuits. json "). τότε (). assertThat (). body ("MRData.CircuitTable.Circuits.circuitId", hasSize (20)); }

Υπόλοιπο επικύρωσης απόκρισης API :

1. Καταγράφει την απόκριση JSON του αιτήματος API.

2. Ερωτήματα για circuitId χρησιμοποιώντας την έκφραση GPath "MRData.CircuitTable.Circuits.circuitId"

3. Επαληθεύει ότι η συλλογή στοιχείων circuitId έχει μέγεθος 20

Εδώ χρησιμοποιούμε Ταιριαστές Hamcrest για διάφορες επικυρώσεις όπως

  • equalTo () επικυρώνει την ισότητα
  • λιγότερες μέθοδοιTan () και μεγαλύτερεςThan () για συγκριτική επικύρωση,
  • Η μέθοδος hasItem () χρησιμοποιείται για την επικύρωση της παρουσίας ενός στοιχείου από μια συλλογή στοιχείων.

Υπάρχουν διάφορες άλλες μέθοδοι που είναι χρήσιμες για την πραγματοποίηση ορισμένης επικύρωσης.

Μπορείτε επίσης να ανατρέξετε στην τεκμηρίωση της βιβλιοθήκης Hamcrest για μια πλήρη λίστα με ταιριαστές και μεθόδους.

Επικύρωση κωδικού απόκρισης:

δεδομένο (). όταν (). get ("http://ergast.com/api/f1/2017/circuits.json"). τότε (). assertThat (). statusCode (200);

Επικύρωση τύπου περιεχομένου

δεδομένου (). when (). get ("http://ergast.com/api/f1/2017/circuits.json") .then (). assertThat (). contentType (ContentType.JSON);

Επικύρωση κεφαλίδας "Περιεχόμενο-Μήκος"

δεδομένο (). όταν (). get ("http://ergast.com/api/f1/2017/circuits.json"). τότε (). assertThat (). κεφαλίδα (" Content-Length ", equalTo (" 4551 "));

Πολλαπλή επικύρωση σε μία δοκιμή ως (Με τη χρήση και () μεθόδους):

@Test (περιγραφή = "Ο αριθμός των κυκλωμάτων το 2017 πρέπει να είναι 20")
    δημόσιο άκυρο επικύρωσηNumberOfCircuits () {
        δεδομένο (). όταν (). get ("http://ergast.com/api/f1/2017/circuits.json") .then (). 4551 ")). Και (). StatusCode (200);
    }

Επικύρωση στοιχείου / χαρακτηριστικού σώματος απόκρισης:

Μπορούμε να χρησιμοποιήσουμε το JsonPath για να πάρουμε την τιμή των χαρακτηριστικών json και να κάνουμε ισχυρισμό χρησιμοποιώντας το TestNg

@Test (περιγραφή = "Επικύρωση ονόματος σειράς που είναι f1")
    δημόσια επικύρωση επικύρωσηSeriesName () {
        // Μετατροπή ResponseBody σε συμβολοσειρά
        String responseBody = δεδομένο (). When (). Get ("http://ergast.com/api/f1/2017/circuits.json") .getBody (). AsString ();
        // Δημιουργήστε το αντικείμενο JsonPath περνώντας το σώμα απόκρισης ως συμβολοσειρά
        JsonPath resJson = νέο JsonPath (ResponsBody);
        // Λήψη της σειράς τιμών χαρακτηριστικών στο MRData
        String seriesName = resJson.getString ("MRData.series");
        // Δήλωση TestNg χρήστη
        Assert.assertEquals ("f1", όνομα σειράς);
    }

Με παρόμοιο τρόπο θα μπορούσαμε να πάρουμε την αξία της απόκρισης XML χρησιμοποιώντας το XMLPath. Εδώ συνεργαζόμαστε με το JSON και ως εκ τούτου χρησιμοποιήσαμε εδώ το JSonPath

Τα RESTful API υποστηρίζουν μόνο δύο τύπους παραμέτρων:

A. Παράμετροι ερωτήματος: Εδώ οι παράμετροι προσαρτώνται στο τέλος του τελικού σημείου API και μπορούν να αναγνωριστούν από το ερωτηματικό και σχηματίζουν ένα ζεύγος τιμών κλειδιών όπως 

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 θα μπορούσαμε να αντικαταστήσουμε το 2017 με το 2016 τότε το API θα δώσει το σώμα απόκρισης για το 2016.

Δοκιμές χρησιμοποιώντας Path Params για RestAssured

@Test (περιγραφή = "Επικύρωση αριθμού κυκλωμάτων που χρησιμοποιούν Path Params")
    public void testWithPathParams () {
        String seasonNumber = "2017";
       String responseBody = δεδομένο (). PathParam ("season", seasonNumber). When (). Get ("http://ergast.com/api/f1/{season}/circuits.json") .getBody (). AsString ();
        // Δημιουργήστε το αντικείμενο JsonPath περνώντας το σώμα απόκρισης ως συμβολοσειρά
        JsonPath resJson = νέο JsonPath (ResponsBody);
        // Λήψη της σειράς τιμών χαρακτηριστικών στο MRData
        String seriesName = resJson.getString ("MRData.series");
        // Δήλωση TestNg χρήστη
        Assert.assertEquals ("f1", όνομα σειράς);
    }

Δοκιμές που χρησιμοποιούν Query Params για RestAssured

@Test (περιγραφή = "Επικύρωση της αναζήτησης Google χρησιμοποιώντας Query Params")
    public void testWithPathParams () {
        String searchItem = "https://www.wikipedia.org/";
  δεδομένο (). queryParam ("q", searchItem) .when (). get ("https://www.google.com/search") .then (). assertThat (). statusCode (200);
    }

Δοκιμές παραμέτρων:

Μπορούμε να κάνουμε δοκιμές βάσει δεδομένων (δηλαδή το ίδιο σενάριο δοκιμής θα εκτελεστεί πολλές φορές με διαφορετικά σύνολα δεδομένων εισόδου και θα παρέχουμε διαφορετικά δεδομένα εξόδου) χρησιμοποιώντας το Rest Assured 

ΒΗΜΑ 1: Δημιουργήθηκε μια υπηρεσία παροχής δεδομένων testNg.

ΒΗΜΑ 2: Καταναλώστε τον Πάροχο δεδομένων στο σενάριο δοκιμής.

@DataProvider (όνομα = "seasonsAndRaceNumbers")
    δημόσιο αντικείμενο [] [] testDataFeed () {
        επιστροφή νέου αντικειμένου [] [] {
                {"2017", 20},
                {"2016", 21}
        };
    }
@Test (περιγραφή = "Επικύρωση αριθμού κυκλωμάτων σε διαφορετικές εποχές", dataProvider = "SeasonsAndRaceNumbers") δημόσιο άκυρο κύκλωμαNumberValidation (String seasonYear, int raceNumbers) {δεδομένο ().pathParam ("σεζόν", σεζόν Έτος). όταν (). λήψη ("http://ergast.com/api/f1/{εποχή}/circuits.json "). τότε (). assertThat (). body (" MRData.CircuitTable.Circuits.circuitId ", hasSize (αριθμοί αγώνα)) }

Εργασία με παραμέτρους πολλαπλών τιμών με το RestAssured 

Οι παράμετροι πολλαπλών τιμών είναι εκείνες οι παράμετροι που έχουν περισσότερες από μία τιμές ανά όνομα παραμέτρου (δηλαδή μια λίστα τιμών ανά paramKey), μπορούμε να τις αντιμετωπίσουμε όπως παρακάτω:

δεδομένου (). param ("paramKey", "paramValue1", "paramaValue2"). when (). get ("API URL");

Ή θα μπορούσαμε να προετοιμάσουμε μια λίστα και να περάσουμε τη λίστα ως την τιμή του paramKey όπως:

Λίστα paramValue = νέο νέο ArrayList ();
paramValue.add ("paramvalue1");
paramValue.add ("paramvalue2);
δεδομένο (). param ("paramKey", paramValue) .when (). get ("API URL");
Εργασία με cookie με το RestAssured 
δεδομένο (). cookie ("cookieK", "cookieVal"). when (). get ("API URL");

Or 

Μπορούμε επίσης να καθορίσουμε ένα cookie πολλαπλών αξιών εδώ όπως:

δεδομένο (). cookie ("cookieK", "cookieVal1", "cookieVal2"). when (). get ("API URL");

Εργασία με κεφαλίδες:

Μπορούμε να καθορίσουμε σε ένα αίτημα χρησιμοποιώντας κεφαλίδες / κεφαλίδες όπως:

δεδομένο (). header ("headerK1", "headerValue1"). header ("headerK2", "headerValue2"). when (). get ("API URL");

Εργασία με περιεχόμενο Τύπος:

δεδομένο (). contentType ("application / json"). when (). get ("API URL");

Or 

δεδομένο (). contentType (ContentType.JSON). when (). get ();

Μετρήστε τον χρόνο απόκρισης:

long timeDurationInSeconds = get ("API URL"). timeIn (SECONDS);

Υπόλοιπος έλεγχος ταυτότητας API

Το REST διασφαλίζει ότι υποστηρίζει διαφορετικά σχήματα εξουσιοδότησης, όπως OAuth, digest, πιστοποιητικό, φόρμα και προληπτικό βασικό έλεγχο ταυτότητας. Μπορούμε είτε να ορίσουμε έλεγχο ταυτότητας για κάθε αίτημα 

εδώ είναι ένα δείγμα αίτησης χρησιμοποιώντας το ίδιο:

δεδομένο (). auth (). basic ("uName", "pwd"). when (). get ("URL") ..

Από την άλλη πλευρά, ο έλεγχος ταυτότητας και ορίζεται στην παρακάτω προσέγγιση για τα αιτήματα HTTP:

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

Βασικοί τύποι AUTH:

Υπάρχουν δύο τύποι βασικής εξουσιοδότησης, «preemptive» και «αμφισβητούμενος βασικός έλεγχος ταυτότητας token».

Προληπτική βασική ταυτότητα:

Αυτό θα στείλει τα βασικά διαπιστευτήρια ελέγχου ταυτότητας ακόμη και πριν ο διακομιστής δώσει μη εξουσιοδοτημένη απόκριση σε ορισμένες καταστάσεις μαζί με το αίτημα που ενεργοποιείται, μειώνοντας έτσι τα γενικά έξοδα για την πραγματοποίηση μιας πρόσθετης σύνδεσης. Αυτό συμβαίνει συνήθως σε πολλές περιπτώσεις, εκτός εάν δοκιμάζουμε την ικανότητα των διακομιστών να προκαλέσουν. 

Π.χ.

δεδομένο (). auth (). preemptive (). basic ("uName", "pwd"). when (). get ("URL"). then (). statusCode (200);

Προβληματικός βασικός έλεγχος ταυτότητας

Από την άλλη πλευρά «αμφισβητούμενος βασικός έλεγχος ταυτότητας» Ο REST Assured δεν θα παρέχει τα διαπιστευτήρια εκτός εάν ο διακομιστής το έχει ζητήσει ρητά, δηλαδή ο διακομιστής ρίχνει την μη εξουσιοδοτημένη απόκριση. Μετά από αυτό, η μη εξουσιοδοτημένη απόκριση Rest-Assured στέλνει ένα άλλο αίτημα στον διακομιστή που είναι ο έλεγχος ταυτότητας.

δεδομένο (). auth (). basic ("uName", "pwd"). when (). get ("URL"). then (). statusCode (200);

Έλεγχος ταυτότητας Digest

Από τώρα εξετάζεται μόνο η «αμφισβητούμενη ταυτότητα». π.χ:

δεδομένο (). auth (). digest ("uName", "pwd"). when (). get ("URL"). then (). statusCode (200); 

Έλεγχος ταυτότητας φόρμας

Θα μπορούσαμε να το επιτύχουμε κυρίως σε 3 διαφορετικές προσεγγίσεις ανάλογα με την εφαρμογή / σενάρια:

Ο έλεγχος ταυτότητας φόρμας είναι ένας από τους πολύ δημοφιλείς μέσω του Διαδικτύου, ο οποίος ένας χρήστης εισάγει τα διαπιστευτήριά του, δηλαδή όνομα χρήστη και κωδικό πρόσβασης μέσω μιας ιστοσελίδας και σύνδεση στο σύστημα. Αυτό θα μπορούσε να αντιμετωπιστεί χρησιμοποιώντας αυτό 

δοθεί (). auth (). φόρμα ("uName", "pWd").
όταν (). get ("URL");
τότε (). statusCode (200);

Αν και αυτό μπορεί να μην λειτουργεί καθώς είναι βέλτιστο και μπορεί να περάσει ή να αποτύχει ανάλογα με την πολυπλοκότητα της ιστοσελίδας. Μια καλύτερη επιλογή είναι να παρέχετε αυτές τις λεπτομέρειες κατά τη ρύθμιση του ελέγχου ταυτότητας φόρμας στην παρακάτω προσέγγιση:

δεδομένου () όταν (). get ("URL"). τότε (). statusCode (200);

Σε αυτήν την προσέγγιση, το REST Assured εσωτερικά δεν θα χρειαστεί να ενεργοποιήσει πρόσθετο αίτημα και ανάλυση μέσω της ιστοσελίδας. 

Εάν σε περίπτωση που χρησιμοποιείτε το προεπιλεγμένο Spring Security τότε ενεργοποιείται ένα προκαθορισμένο FormAuthConfig.

δεδομένου (). auth (). form ("uName", "Pwd", FormAuthConfig.springSecurity ()). when (). get ("URL"). then (). statusCode (200);

ΣΗΜΕΙΩΣΗ: Αν θέλουμε να στείλουμε επιπλέον δεδομένα εισόδου μαζί με τη φόρμα εξουσιοδότησης, θα μπορούσαμε να γράψουμε τα παρακάτω:

δεδομένο (). auth (). form ("uName", "pwd", formAuthConfig (). withAdditionalFields ("firstInputField", "secondInputField"). ..

CSRF:

Το CSRF σημαίνει πλαστογράφηση αιτήσεων μεταξύ ιστότοπων.

Σήμερα είναι πολύ κοινό για τον διακομιστή να παρέχει ένα διακριτικό CSRF με την απόκριση για να αποφευχθούν οι επιθέσεις ασφαλείας CSRF. Το REST Assured το υποστηρίζει χρησιμοποιώντας και αυτόματη ανάλυση και παρέχοντας διακριτικό CSRF. 

Προκειμένου να επιτευχθεί αυτό, το REST Assured πρέπει να υποβάλει ένα επιπλέον αίτημα και ανάλυση (λίγη θέση) του ιστότοπου.

Μπορούμε να ενεργοποιήσουμε την υποστήριξη CSRF γράφοντας τον παρακάτω κώδικα:

δεδομένο (). auth (). form ("uName", "pwd", formAuthConfig (). withAutoDetectionOfCsrf ()). when (). get ("URL"). then (). statusCode (200);

Επιπλέον, για να βοηθήσουμε το REST Assured και να κάνουμε την ανάλυση πιο άψογη και στιβαρή, μπορούμε να παρέχουμε το όνομα πεδίου CSRF (εδώ υποθέτουμε ότι χρησιμοποιούμε τις προεπιλεγμένες τιμές Spring Security και θα μπορούσαμε να χρησιμοποιήσουμε προκαθορισμένο springSecurity FormAuthConfig):

δεδομένου ()

Από προεπιλογή, η τιμή CSRF μεταβιβάζεται ως παράμετρος φόρμας με το αίτημα, αλλά μπορούμε να διαμορφώσουμε για να την στείλουμε ως κεφαλίδα, σε περίπτωση που απαιτείται όπως παρακάτω:

δεδομένου () (200);

OAuth 1:

Το OAuth 1 απαιτεί ο Scribe να βρίσκεται στο classpath. Για να χρησιμοποιήσουμε τον έλεγχο ταυτότητας oAuth 1 μπορούμε να κάνουμε:

δεδομένο (). auth (). oauth (..). όταν (). ..

OAuth 2:

δεδομένο (). auth (). oauth2 (accessToken). when (). ..

Στην παραπάνω προσέγγιση, το OAuth2 accessToken θα εξεταστεί σε μια κεφαλίδα. Για να είμαστε πιο σαφείς μπορούμε επίσης να κάνουμε:

δεδομένο (). auth (). preemptive (). oauth2 (accessToken). when (). ..

Διαβίβαση αρχείου, byte-array, ροής εισόδου ή κειμένου στο Αίτημα:

Κατά την αποστολή μεγάλων ποσοτήτων δεδομένων στο διακομιστή είναι συνήθως μια κοινή προσέγγιση για τη χρήση της τεχνικής δεδομένων πολλαπλών φορμών. Το Rest Assured παρέχει μεθόδους που ονομάζονται multiPart που μας επιτρέπουν να καθορίσουμε ένα αρχείο, byte-array, ροή εισόδου ή κείμενο για μεταφόρτωση. 

δεδομένο (). multiPart (νέο αρχείο ("/ File_Path")). όταν (). post ("/ upload");

Αίτημα POST Δημιουργία με την ασφάλεια

Με αιτήματα POST και PUT, στέλνουμε δεδομένα στον διακομιστή και βασικά δημιουργεί πόρους / ενημέρωση πόρων, μπορείτε να το θεωρήσετε ως εγγραφή ή ενημέρωση.

Τα δεδομένα που αποστέλλονται στο διακομιστή σε ένα αίτημα POST αποστέλλονται στο σώμα της αίτησης HTTP / κλήσης API. 

Ο τύπος του περιεχομένου ή των δεδομένων που αποστέλλονται μπορεί να είναι διαφορετικής μορφής ανάλογα με το API, π.χ. XML, JSON ή κάποια άλλη μορφή καθορίζεται από την κεφαλίδα Content-Type. 

Εάν το σώμα POST αποτελείται από τα δεδομένα JSON, τότε η κεφαλίδα Content-Type θα είναι εφαρμογή / json. Ομοίως, για ένα αίτημα POST που αποτελείται από XML, τότε η επικεφαλίδα Content-Type θα είναι τύπου εφαρμογής / xml.

Ακολουθεί το παρακάτω απόσπασμα κώδικα για το ίδιο:

δεδομένο (). contentType ("application / json"). param ("pk", "pv"). when (). body ("JsonPAyloadString"). post ("url"). τότε (). assertThat (). statusCode (200);

ΣΗΜΕΙΩΣΗ: Υπάρχουν διάφοροι τρόποι με τους οποίους μπορούμε να περάσουμε το ωφέλιμο φορτίο / αίτημα μέσα στη μέθοδο "body" όπως το String (όπως φαίνεται στο παραπάνω απόσπασμα), το JsonObject, ως Αρχείο κ.λπ.,

ΑΙΤΗΣΗ ΑΙΤΗΣΗΣ με Διασφάλιση:

δεδομένο (). contentType ("application / json"). param ("pk", "pv"). when (). body ("JsonPAyloadString"). put ("url"). τότε (). assertThat (). statusCode (200);

Διαγραφή αιτήματος με Rest-Assured:

δεδομένου (). contentType ("application / json"). param ("pk", "pv"). when (). delete ("url"). τότε (). assertThat (). statusCode (200);

Και με αυτόν τον τρόπο μπορούμε να δημιουργήσουμε διαφορετική κλήση API ανάπαυσης για διαφορετικά ρήματα API (GET / POST / PUT / DELETE κ.λπ.)

Σειριοποίηση και αποεριοποίηση σε Java:

Η σειριοποίηση είναι βασικά επεξεργασία ή μετατροπή της κατάστασης αντικειμένου σε ροή byte. Από την άλλη πλευρά, η Deserialization στη Java επεξεργάζεται ή μετατρέπει τη ροή byte σε πραγματικό αντικείμενο Java στη μνήμη. Αυτός ο μηχανισμός χρησιμοποιείται στην επιμονή του Object.

Παρακάτω είναι το διάγραμμα μπλοκ για το ίδιο 

Πλεονεκτήματα της σειράς

A. Για να αποθηκεύσετε / διατηρήσετε την κατάσταση ενός αντικειμένου.

Β. Για ροή ενός αντικειμένου σε ένα δίκτυο.

Επίτευξη σειριοποίησης με JAVA

Για να επιτύχουμε ένα αντικείμενο Java που μπορεί να σειριοποιηθεί, πρέπει να εφαρμόσουμε τη διεπαφή java.io.Serializable.

Η κλάση ObjectOutputStream που περιέχει τη μέθοδο writeObject () που είναι υπεύθυνη για τη σειριοποίηση ενός αντικειμένου.

Η κλάση ObjectInputStream περιέχει επίσης μια άλλη μέθοδο που ονομάζεται readObject () η οποία είναι υπεύθυνη για την αποεστερίωση ενός αντικειμένου.

κλάσεις που εφαρμόζουν το java.io.Serializable interface, υπάρχει αντικείμενο μόνο σε σειριοποίηση.

Το Serializable είναι απλώς μια διεπαφή δείκτη και όπως και η άλλη διεπαφή αγοράς δεν έχει κανένα μέλος δεδομένων ή μέθοδο που να σχετίζεται με αυτό. Που χρησιμοποιείται για την «σήμανση» κλάσεων java έτσι ώστε τα αντικείμενα αυτών των τάξεων να έχουν συγκεκριμένες δυνατότητες. Όπως λίγες άλλες διεπαφές μαρκαδόρων είναι: - Cloneable και Remote κ.λπ.

ΣΗΜΕΙΩΣΕΙΣ:

1. Εάν μια γονική τάξη έχει εφαρμόσει μια σειριακή δυνατότητα διασύνδεσης, τότε η παιδική τάξη δεν απαιτείται να εφαρμόσει την ίδια, αλλά αντίστροφα δεν ισχύει.

2. Μόνο τα μη στατικά μέλη δεδομένων αποθηκεύονται με τη διαδικασία Serialization.

3. Τα μέλη στατικών δεδομένων και επίσης τα προσωρινά μέλη δεδομένων δεν αποθηκεύονται από το Serialization. Επομένως, σε περίπτωση που δεν χρειάζεται να αποθηκεύσουμε την τιμή του μη στατικού μέλους δεδομένων, τότε μπορούμε να το κάνουμε παροδικό.

4. Ο κατασκευαστής δεν καλείται ποτέ όταν ένα αντικείμενο αποστειρώνεται.

ΒΗΜΑ 1: Το πρώτο βήμα είναι βασικά η δημιουργία μιας κλάσης που εφαρμόζει το Serializable interface:

εισαγωγή java.io.Serializable;
δημόσια τάξη Dummy υλοποιεί Serializable {
    ιδιωτικό int i;
    ιδιωτικά δεδομένα συμβολοσειράς;
    δημόσιο Dummy (int i, String data)
    {
        αυτό.i = i;
        this.data = δεδομένα;
    }
}

ΒΗΜΑ 2: Δημιουργήστε μια τάξη για να την σειριοποιήσετε:

εισαγωγή java.io.FileNotFoundException;
εισαγωγή java.io.FileOutputStream;
εισαγωγή java.io.IOException;
εισαγωγή java.io.ObjectOutputStream;
δημόσια τάξη Serialize {
    δημόσιος στατικός κενός σειριοποίηση (Object classObject, String fileName) {
        δοκιμάστε {
            FileOutputStream fileStream = νέο FileOutputStream (όνομα αρχείου);
            ObjectOutputStream objectStream = νέο ObjectOutputStream (fileStream);
            objectStream.writeObject (classObject);
            objectStream.close ();
            fileStream.close ();
        } catch (FileNotFoundException e) {
            // TODO Αυτόματο δημιουργημένο μπλοκ σύλληψης
            e.printStackTrace ();
        } αλίευση (IOException e) {
            // TODO Αυτόματο δημιουργημένο μπλοκ σύλληψης
            e.printStackTrace ();
        }
    }
    δημόσιο στατικό κενό (String [] args) {
        Dummy dummyObj = νέο Dummy (10, "Lambda-geeks");
        Σειριοποίηση (dummyObj, "DummSerialized");
    }
}

ΒΗΜΑ 3: Μόλις ολοκληρωθεί με επιτυχία το Βήμα 2, τότε θα δείτε ένα αρχείο που δημιουργήθηκε με ορισμένα δεδομένα σε αυτό, ότι τα δεδομένα είναι βασικά σειριακά δεδομένα των μελών του Αντικειμένου.

  Αποεπιλογή με java:

Ακολουθεί το παρακάτω απόσπασμα κώδικα:

 δημόσιο στατικό αντικείμενο DeSerialize (String fileName)
    {
        δοκιμάστε {
            FileInputStream fileStream = νέο FileInputStream (νέο αρχείο (όνομα αρχείου));
            ObjectInputStream objectStream = νέο ObjectInputStream (fileStream);
            Object deserializeObject = objectStream.readObject ();
            objectStream.close ();
            fileStream.close ();
            επιστροφή deserializeObject;
        } catch (FileNotFoundException e) {
            e.printStackTrace ();
        } αλίευση (IOException e) {
            e.printStackTrace ();
        } catch (ClassNotFoundException e) {
            e.printStackTrace ();
        }
        επιστροφή μηδέν;
    }

Ο κωδικός προγράμματος οδήγησης έχει ως εξής:

 δημόσιο στατικό κενό (String [] args) {
      / * Dummy dummyObj = νέο Dummy (10, "Lambda-geeks");
        Σειριοποίηση (dummyObj, "DummSerialized");
        System.out.println ("------------------------------------------- ------------------------------- ");
      */
        Dummy deSerializedRect = (Dummy) DeSerialize ("DummSerialized");
        System.out.println ("Δεδομένα από σειριακό αντικείμενο" + deSerializedRect.print ());
        System.out.println ("------------------------------------------- ------------------------------- ");
    }

JSONPATH Περισσότερες σύνταξη / ερώτημα:

Ας υποθέσουμε ένα JSON όπως παρακάτω:

{
  "OrganizationDetails": "Ψεύτικες λεπτομέρειες του οργανισμού",
  "Περιοχή": "Ασία",
  "Emp-Details": [
    {
      "Org": "lambda-Geeks",
      "Πληροφορίες": {
        "Ph": 1234567890,
        "Προσθήκη": "XYZ",
        "Ηλικία": 45
      }
    },
    {
      "Org": "lambda-Geeks-2",
      "Πληροφορίες": {
        "Ph": 2134561230,
        "Προσθήκη": "ABC",
        "Ηλικία": 35
      }
    }
  ]
}

στο παραπάνω JSON, το OrganizationDetails & Region ονομάζεται κόμβος φύλλου επειδή δεν έχουν περαιτέρω θυγατρικούς κόμβους / στοιχεία, αλλά από την άλλη πλευρά το Emp-Details έχει θυγατρικό κόμβο, άρα δεν αναφέρεται ως κόμβος φύλλων

Εδώ αν προσπαθήσουμε να πάρουμε την αξία του OrganizationDetails τότε πρέπει να χρησιμοποιήσουμε:

$. Οργάνωση Λεπτομέρειες 
Αυτό θα έχει ως αποτέλεσμα:
 [
  "Ψεύτικες λεπτομέρειες του οργανισμού"
]

Όπως το Wise για να λάβουμε τα δεδομένα για την περιοχή πρέπει να γράψουμε:

$. Περιφέρεια 

Αν θέλουμε να βρούμε την αξία της ηλικίας για τον 1ο υπάλληλο, τότε θα μπορούσαμε να γράψουμε:

$ .Emp-Details [0]. Πληροφορίες. Ηλικία
Αυτό θα έχει ως αποτέλεσμα:
[
  45
]

Για την ηλικία του 2ου υπαλλήλου θα μπορούσαμε να γράψουμε σαν

$ .Emp-Details [1]. Πληροφορίες. Ηλικία
Αυτό θα έχει ως αποτέλεσμα: [35]

Με αυτόν τον τρόπο μπορούμε να καταλάβουμε την έκφραση / ερώτημα JsonPath για τη λήψη των δεδομένων για τα αντίστοιχα πεδία στο JSON.

Σχετικά με την Debarghya

Myself Debarghya Roy, είμαι ένας μηχανικός ARCHITECT που συνεργάζεται με την εταιρεία Fortune 5 και έναν συνεισφέροντα ανοιχτού κώδικα, έχοντας περίπου 12 χρόνια εμπειρίας / εμπειρίας σε διάφορες τεχνολογίες.
Έχω εργαστεί με διάφορες τεχνολογίες, όπως Java, C #, Python, Groovy, UI Automation (Selenium), Mobile Automation (Appium), API / Backend Automation, Performance Engineering (JMeter, Locust), Security Automation (MobSF, OwAsp, Kali Linux) , Astra, ZAP κ.λπ.), RPA, Αυτοματισμός Μηχανικής Διαδικασίας, Αυτοματισμός Mainframe, Ανάπτυξη Back End με SpringBoot, Kafka, Redis, RabitMQ, ELK stack, GrayLog, Jenkins και επίσης έχοντας εμπειρία σε Cloud Technologies, DevOps κ.λπ.
Ζω στο Μπανγκαλόρ της Ινδίας με τη γυναίκα μου και έχω πάθος για το Blogging, τη μουσική, την κιθάρα και η Φιλοσοφία της ζωής μου είναι η Εκπαίδευση για Όλους που γέννησε το LambdaGeeks. Ας συνδεθούμε μέσω συνδέσμου - https://www.linkedin.com/in/debarghya-roy/

Lambda Geeks