Μάστερ στη δοκιμή API SOAP. Πρωτόκολλο SOAP

Παιδικά προϊόντα 15.06.2019
Επισκόπηση προγράμματος Η έκδοση υπολογιστή του Microsoft Excel Viewer θα επιτρέψει...

Chercher

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

Αλλά ακόμη και σήμερα, δεν έχουν λυθεί όλα τα προβλήματα ολοκλήρωσης, δυστυχώς, δεν υπήρχε ένα ενιαίο πρωτόκολλο σύνδεσμος επικοινωνίαςμεταξύ εφαρμογών και υπηρεσιών Διαδικτύου. Για την επίλυση αυτού του προβλήματος, εταιρείες όπως η Microsoft, η DevelopMentor, η UserLand Software, η IBM και η Lotus Development ενώθηκαν και ως αποτέλεσμα των κοινών τους δραστηριοτήτων το αποτέλεσμα ήταν (Simple Object Πρωτόκολλο πρόσβασης) Το πρωτόκολλο πρόσβασης απλού αντικειμένου περιγράφει ένα πρότυπο κλήσης απομακρυσμένης διαδικασίας που βασίζεται σε XML (Επεκτάσιμο Γλώσσα σήμανσης- επεκτάσιμη γλώσσα σήμανσης). Το SOAP έχει σχεδιαστεί για να απλοποιεί σημαντικά την ανάπτυξη διαγλωσσικών εφαρμογών και εργαλείων επιχειρηματικής ενοποίησης. Η αρχή έγινε με το SOAP 1.0, το οποίο απαιτούσε το πρωτόκολλο HTTP για να λειτουργήσει.

Μετά την εμφάνιση αρχική έκδοσηΤο SOAP, που δημιουργήθηκε, όπως ήδη αναφέρθηκε, με τις κοινές προσπάθειες της Microsoft, της DevelopMentor και της UserLand, η IBM και η Lotus συμμετείχαν στην ανάπτυξη του προϊόντος. Ως αποτέλεσμα, η προδιαγραφή έχει υποστεί σημαντική αναθεώρηση για να ταιριάζει καλύτερα στην ενσωμάτωση ετερογενών περιβαλλόντων. Η κύρια διαφορά επόμενη έκδοσηΤο SOAP 1.1 από την αρχική έκδοση σηματοδότησε τη μετάβαση από το XML-Data της Microsoft στο σχήμα XML. Επιπλέον, στη νέα έκδοση η προδιαγραφή δεν εξαρτάται πλέον από πρωτόκολλα μεταφοράς. Το SOAP 1.0 απαιτούσε το πρωτόκολλο HTTP, ενώ για το SOAP 1.1 ο τύπος μεταφοράς δεν έχει σημασία: μπορείτε να χρησιμοποιήσετε συνδέσμους queving email ή μασάζ για να προωθήσετε μηνύματα. Οι εταιρείες που είχαν ήδη υιοθετήσει το SOAP 1.0 βρέθηκαν δεμένες με τη μη τυποποιημένη τεχνολογία της Microsoft. Ωστόσο, μια σειρά από πολλά υποσχόμενα προϊόντα από αυτήν την εταιρεία, συμπεριλαμβανομένων των BizTalk Server και SQL ServerΤο 7.0 βασίζεται επίσης σε δεδομένα XML. Με την εμφάνιση της έκδοσης 1.1, ο κύκλος των υποστηρικτών του πρωτοκόλλου SOAP διευρύνεται

Η αρχική έκδοση του SOAP 1.1, που υποβλήθηκε στην IETF Internet Technical Task Force, βασίστηκε στην τεχνολογία XML-Data που προτάθηκε από τη Microsoft τον Ιανουάριο του 1998. Ωστόσο, στη διαδικασία αναθεώρησης των προτύπων στην κοινοπραξία W3C βασική δομήέχει αντικατασταθεί από το XML Schema. Ζητήθηκε από την Κοινοπραξία του Παγκόσμιου Ιστού να εξετάσει το SOAP 1.1 ως πιθανό πρότυπο.

Η πιο πρόσφατη έκδοση της προδιαγραφής Simple Object Access Protocol (SOAP) είναι διαθέσιμη στον διακομιστή web που εξυπηρετεί μέλη του Προγράμματος προγραμματιστών MSDN™ (http://msdn.microsoft.com/). Το SOAP είναι ένα ανοιχτό πρωτόκολλο που βασίζεται σε πρότυπα που ορίζει Βασισμένο σε XML(Extensible Markup Language) μια γενική μορφή επικοινωνίας μεταξύ οποιωνδήποτε εφαρμογών και υπηρεσιών Διαδικτύου. Αυτή η έκδοση επεκτείνει τις δυνατότητες του SOAP για ασύγχρονες επικοινωνίες ώστε να περιλαμβάνει υποστήριξη όχι μόνο για HTTP, αλλά και για πρωτόκολλα Διαδικτύου όπως SMTP, FTP και TCP/IP. Η τελευταία έκδοση της προδιαγραφής SOAP πληρούται ευρεία υποστήριξηαπό εταιρείες όπως η ActiveState Tool Corp., Ariba Inc., BORN Information Services Inc., Commerce One Inc., Compaq Computer Corp., DevelopMentor Inc., Extensibility Inc., IBM, IONA Technologies PLC, Intel Corp., Lotus Development Corp. ., ObjectSpace Inc., Rogue Wave Software Inc., Scriptics Corp., Secret Labs AB, UserLand Software και Zveno Pty. Ε.Π.Ε. Η προδιαγραφή SOAP παρέχει έναν κοινό μηχανισμό για την ενοποίηση υπηρεσιών στο Διαδίκτυο και/ή στα ενδοδίκτυα, ανεξάρτητα από το λειτουργικό σύστημα, το μοντέλο αντικειμένου ή τη γλώσσα προγραμματισμού που χρησιμοποιείται. Με βάση τα πρότυπα του Διαδικτύου XML και HTTP, το SOAP επιτρέπει σε οποιεσδήποτε νέες ή υπάρχουσες εφαρμογές να επικοινωνούν μεταξύ τους. Οι τοποθεσίες Web με δυνατότητα SOAP μπορούν να γίνουν καθαρά προσβάσιμες υπηρεσίες Ιστού προγραμματικάκαι δεν απαιτούν ανθρώπινη παρέμβαση. Μια ενιαία υποδομή που επιτρέπει την άμεση αλληλεπίδραση μεταξύ εφαρμογών που αντιμετωπίζουν το Διαδίκτυο ανοίγει νέες ευκαιρίες για την ενοποίηση υπηρεσιών και συσκευών — ανεξάρτητα από το πού βρίσκονται στο Διαδίκτυο.

Υπηρεσίες Ιστού και SOAP

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

Τι είναι το SOAP

Οι τεχνολογίες που χρησιμοποιούνται επί του παρόντος για κλήση απομακρυσμένων μεθόδων (DCOM, CORBA/IIOP και RMI) είναι αρκετά δύσκολο να διαμορφωθούν και να οργανωθούν οι αλληλεπιδράσεις. Αυτό συνεπάγεται προβλήματα στη λειτουργία και τη λειτουργία. κατανεμημένα συστήματα(θέματα ασφαλείας, μεταφορά μέσω firewalls κ.λπ.). Τα υπάρχοντα προβλήματα επιλύθηκαν με επιτυχία με τη δημιουργία του SOAP (Simple Object Access Protocol), απλό πρωτόκολλο, βασισμένο σε XML, για ανταλλαγή μηνυμάτων σε κατανεμημένα περιβάλλοντα (WWW). Έχει σχεδιαστεί για τη δημιουργία υπηρεσιών web και μεθόδων κλήσης εξ αποστάσεως. Το SOAP μπορεί να χρησιμοποιηθεί με διαφορετικά πρωτόκολλα μεταφοράς, συμπεριλαμβανομένων των HTTP, SMTP κ.λπ.

Τι είναι οι υπηρεσίες web

Οι υπηρεσίες Ιστού είναι η λειτουργικότητα και τα δεδομένα που παρέχονται για χρήση εξωτερικές εφαρμογές, οι οποίες λειτουργούν με υπηρεσίες που χρησιμοποιούν τυπικά πρωτόκολλα και μορφές δεδομένων. Οι υπηρεσίες Ιστού είναι εντελώς ανεξάρτητες από τη γλώσσα και την πλατφόρμα υλοποίησης. Η τεχνολογία των υπηρεσιών Ιστού είναι ο ακρογωνιαίος λίθος μοντέλο προγράμματος Microsoft .NET. Για να δείξω τις δυνατότητες του SOAP, χρησιμοποίησα την πρόσφατη εφαρμογή του SOAP Toolkit έκδοση 2.0 από τη Microsoft. Θα πρέπει να σημειωθεί ότι η τρέχουσα έκδοση του Toolkit είναι αισθητά διαφορετική από την προηγούμενη (Microsoft SOAP Toolkit για το Visual Studio 6.0) και από την έκδοση beta του SOAP Toolkit 2.0.

Μηχανισμός αλληλεπίδρασης μεταξύ πελάτη και διακομιστή

  1. Η εφαρμογή πελάτη δημιουργεί ένα αντικείμενο SOAPClient
  2. Το SOAPClient διαβάζει τα αρχεία περιγραφής μεθόδων υπηρεσίας web (WSDL και Υπηρεσίες Ιστού Meta Language - WSML). Αυτά τα αρχεία μπορούν επίσης να αποθηκευτούν στον πελάτη.
  3. Η εφαρμογή πελάτη, χρησιμοποιώντας τις δυνατότητες καθυστερημένης σύνδεσης του αντικειμένου SOAPClient, καλεί μια μέθοδο υπηρεσίας. Το SOAPClient δημιουργεί ένα πακέτο αίτησης (Φάκελος SOAP) και το στέλνει στον διακομιστή. Μπορεί να χρησιμοποιηθεί οποιοδήποτε πρωτόκολλο μεταφοράς, αλλά συνήθως χρησιμοποιείται το HTTP.
  4. Το πακέτο δέχεται εφαρμογή διακομιστήΟ ακροατής (μπορεί να είναι μια εφαρμογή ISAPI ή μια σελίδα ASP), δημιουργεί ένα αντικείμενο SOAPServer και του μεταβιβάζει το πακέτο αιτήματος
  5. Ο SOAPServer διαβάζει την περιγραφή της υπηρεσίας Ιστού, φορτώνει την περιγραφή και το πακέτο αιτημάτων σε δέντρα XML DOM
  6. Ο SOAPServer καλεί μια μέθοδο του αντικειμένου/εφαρμογής που υλοποιεί την υπηρεσία
  7. Τα αποτελέσματα της εκτέλεσης της μεθόδου ή της περιγραφής σφαλμάτων μετατρέπονται από το αντικείμενο SOAPServer σε ένα πακέτο απόκρισης και αποστέλλονται στον πελάτη
  8. Το αντικείμενο SOAPClient αναλύει το λαμβανόμενο πακέτο και επιστρέφει εφαρμογή πελάτηαποτελέσματα της υπηρεσίας ή περιγραφή του σφάλματος που παρουσιάστηκε.

Το αρχείο WSDL είναι ένα έγγραφο στο Μορφή XML, το οποίο περιγράφει τις μεθόδους που παρέχονται από την υπηρεσία web. Επίσης, οι παράμετροι των μεθόδων, οι τύποι τους, τα ονόματα και η θέση της υπηρεσίας ακρόασης. Ο οδηγός SOAP Toolkit δημιουργεί αυτόματα αυτό το έγγραφο.

SOAP Envelope (Package) - ένα έγγραφο XML που περιέχει ένα αίτημα/απόκριση για την εκτέλεση μιας μεθόδου. Είναι πιο βολικό να το θεωρήσετε ως ταχυδρομικό φάκελο στον οποίο περικλείονται πληροφορίες. Η ετικέτα Envelope πρέπει να είναι το ριζικό στοιχείο του πακέτου. Το στοιχείο Header είναι προαιρετικό, αλλά το στοιχείο Body πρέπει να υπάρχει και να είναι άμεσο παιδί του στοιχείου Envelope. Εάν παρουσιαστεί σφάλμα εκτέλεσης μεθόδου, ο διακομιστής δημιουργεί ένα πακέτο που περιέχει ένα στοιχείο σφάλματος στην ετικέτα Body, το οποίο περιέχει μια λεπτομερή περιγραφή του σφάλματος. Εάν χρησιμοποιείτε τις διεπαφές υψηλού επιπέδου SOAPClient, SOAPServer, τότε δεν χρειάζεται να μπείτε στις περιπλοκές της μορφής του πακέτου, αλλά, εάν θέλετε, μπορείτε να χρησιμοποιήσετε διεπαφές χαμηλού επιπέδου ή ακόμα και να δημιουργήσετε ένα πακέτο με το χέρι.

Το μοντέλο αντικειμένου SOAP Toolkit καθιστά δυνατή την εργασία με αντικείμενα API χαμηλού επιπέδου:

  • SoapConnector - Παρέχει εργασία με το πρωτόκολλο μεταφοράς για την ανταλλαγή πακέτων SOAP
  • SoapConnectorFactory - Παρέχει μια μέθοδο για τη δημιουργία μιας σύνδεσης για το πρωτόκολλο μεταφοράς που καθορίζεται στο αρχείο WSDL (ετικέτα)
  • SoapReader - Διαβάζει μηνύματα SOAP και δημιουργεί δέντρα XML DOM
  • SoapSerializer - Περιέχει μεθόδους για τη δημιουργία ενός μηνύματος SOAP
  • IsoapTypeMapper, SoapTypeMapperFactory - Διεπαφές που σας επιτρέπουν να εργάζεστε με πολύπλοκους τύπους δεδομένων

Χρησιμοποιώντας αντικείμενα API υψηλού επιπέδου, μπορείτε να μεταφέρετε δεδομένα μόνο απλών τύπων (int, srting, float ...), αλλά η προδιαγραφή SOAP 1.1 σάς επιτρέπει να εργάζεστε με πιο σύνθετους τύπους δεδομένων, όπως πίνακες, δομές, λίστες και κομπινεζόν. Για να εργαστείτε με τέτοιους τύπους, πρέπει να χρησιμοποιήσετε τις διεπαφές IsoapTypeMapper και SoapTypeMapperFactory.

  • Φροντιστήριο

Γεια σε όλους!
Έτυχε ότι μέσα πρόσφαταΆρχισα να αναπτύσσω υπηρεσίες web. Αλλά σήμερα το θέμα δεν αφορά εμένα, αλλά για το πώς μπορούμε να γράψουμε τη δική μας XML Web Service με βάση το πρωτόκολλο SOAP 1.2.

Ελπίζω ότι αφού διαβάσετε το θέμα θα είστε σε θέση:

  • γράψτε τη δική σας εφαρμογή διακομιστή μιας εφαρμογής web.
  • γράψτε τη δική σας εφαρμογή πελάτη μιας διαδικτυακής εφαρμογής.
  • γράψτε τη δική σας περιγραφή της υπηρεσίας Ιστού (WSDL).
  • αποστολή των συστοιχιών πελάτη του ίδιου τύπου δεδομένων στον διακομιστή.
Όπως ίσως μαντέψατε, όλη η μαγεία θα γίνει χρησιμοποιώντας την PHP και τις ενσωματωμένες κλάσεις SoapClient και SoapServer. Το κουνέλι μας θα είναι υπηρεσία αποστολής μηνυμάτων SMS.

1 Δήλωση προβλήματος

1.1 Όρια

Στην αρχή προτείνω να ασχοληθούμε με το αποτέλεσμα που θα πετύχουμε στο τέλος του θέματος. Όπως ανακοινώθηκε παραπάνω, θα γράψουμε μια υπηρεσία για την αποστολή μηνυμάτων SMS και πιο συγκεκριμένα, θα λαμβάνουμε μηνύματα από διαφορετικές πηγές μέσω του πρωτοκόλλου SOAP. Μετά από αυτό, θα εξετάσουμε σε ποια μορφή έρχονται στον διακομιστή. Η διαδικασία της ουράς μηνυμάτων για περαιτέρω αποστολή στον πάροχο, δυστυχώς, ξεφεύγει από το πεδίο εφαρμογής αυτής της ανάρτησης για πολλούς λόγους.

1.2 Ποια δεδομένα θα αλλάξουμε;

Ωραία, αποφασίσαμε για τα όρια! Το επόμενο βήμα που πρέπει να γίνει είναι να αποφασίσουμε ποια δεδομένα θα ανταλλάξουμε μεταξύ του διακομιστή και του πελάτη. Σε αυτό το θέμα, προτείνω να μην χωρίσετε τις τρίχες για πολύ καιρό και να απαντήσετε αμέσως στις κύριες ερωτήσεις για τον εαυτό σας:
  • Ποια ελάχιστα δεδομένα πρέπει να σταλούν στον διακομιστή για να σταλεί ένα μήνυμα SMS σε έναν συνδρομητή;
  • Ποια ελάχιστα δεδομένα πρέπει να αποστέλλονται από τον διακομιστή για να ικανοποιηθούν οι ανάγκες του πελάτη;
Κάτι μου λέει ότι για αυτό πρέπει να στείλεις τα εξής: Κατ 'αρχήν, αυτά τα δύο χαρακτηριστικά είναι αρκετά για αποστολή, αλλά φαντάζομαι αμέσως την περίπτωση ενός SMS με ευχές γενεθλίων να έρχονται σε εσάς στις 3 η ώρα το πρωί, ή στις 4! Αυτή τη στιγμή, θα είμαι πολύ ευγνώμων σε όλους που δεν με ξέχασαν! Επομένως, θα στείλουμε επίσης στον διακομιστή και
  • ημερομηνία αποστολής του μηνύματος SMS.
Το επόμενο πράγμα που θα ήθελα να στείλω στον διακομιστή είναι:
  • Τύπος μηνύματος.
Αυτή η παράμετρος δεν είναι υποχρεωτική, αλλά μπορεί να μας φανεί πολύ χρήσιμη εάν χρειαστεί να πούμε γρήγορα στο αφεντικό πόσους από τους πελάτες μας έχουμε «χαροποιήσει» με τα νέα μας και επίσης να σχεδιάσουμε μερικά όμορφα στατιστικά για αυτό το θέμα.

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

Ως αποτέλεσμα, καταλαβαίνουμε ότι για να στείλουμε ένα μήνυμα SMS χρειαζόμαστε τα ακόλουθα δεδομένα:

  • αριθμός κινητού τηλεφώνου,
  • κείμενο μηνύματος SMS,
  • ώρα αποστολής του μηνύματος SMS στον συνδρομητή,
  • τύπο μηνύματος.

Απαντήσαμε στην πρώτη ερώτηση, τώρα πρέπει να απαντήσουμε στη δεύτερη ερώτηση. Και ίσως επιτρέψω στον εαυτό μου να μπλέξω λίγο. Επομένως, από τον διακομιστή θα στείλουμε μόνο Boolean δεδομένα, η έννοια των οποίων έχει την εξής σημασία:

  • TRUE – το πακέτο έφτασε με επιτυχία στον διακομιστή, πέρασε τον έλεγχο ταυτότητας και μπήκε στην ουρά για αποστολή στον πάροχο SMS
  • ΛΑΘΟΣ – σε όλες τις άλλες περιπτώσεις

Αυτό ολοκληρώνει την περιγραφή της δήλωσης προβλήματος! Και τέλος, ας πάμε στο διασκεδαστικό μέρος - ας καταλάβουμε τι περίεργο θηρίο είναι αυτό το ΣΑΠΟΥΝΙ!

2 Τι είναι το SOAP;

Γενικά, αρχικά δεν σχεδίαζα να γράψω τίποτα για το τι είναι το SOAP και ήθελα να περιοριστώ σε συνδέσμους στον ιστότοπο w3.org με τις απαραίτητες προδιαγραφές, καθώς και συνδέσμους στη Wikipedia. Αλλά στο τέλος αποφάσισα να γράψω μια σύντομη σημείωση για αυτό το πρωτόκολλο.

Και θα ξεκινήσω την ιστορία μου με το γεγονός ότι αυτό το πρωτόκολλο ανταλλαγής δεδομένων ανήκει σε ένα υποσύνολο πρωτοκόλλων που βασίζονται στο λεγόμενο παράδειγμα RPC (Remote Procedure Call), ο αντίποδας του οποίου είναι το REST (Representational State Transfer). Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτό στη Wikipedia, οι σύνδεσμοι προς τα άρθρα βρίσκονται στο τέλος του θέματος. Από αυτά τα άρθρα πρέπει να κατανοήσουμε τα εξής: «Η προσέγγιση RPC σάς επιτρέπει να χρησιμοποιείτε έναν μικρό αριθμό πόρων δικτύου με ένας μεγάλος αριθμόςμεθόδους και πολύπλοκο πρωτόκολλο. Με την προσέγγιση REST, ο αριθμός των μεθόδων και η πολυπλοκότητα του πρωτοκόλλου είναι αυστηρά περιορισμένοι, πράγμα που σημαίνει ότι ο αριθμός των μεμονωμένων πόρων μπορεί να είναι μεγάλος». Δηλαδή, σε σχέση με εμάς, αυτό σημαίνει ότι στην περίπτωση της προσέγγισης RPC στον ιστότοπο θα υπάρχει πάντα μία είσοδος (σύνδεσμος) στην υπηρεσία και ποια διαδικασία να καλέσουμε για την επεξεργασία των εισερχόμενων δεδομένων που μεταφέρουμε μαζί με τα δεδομένα, ενώ με την προσέγγιση REST στον ιστότοπό μας έχει πολλές εισόδους (συνδέσμους), καθεμία από τις οποίες δέχεται και επεξεργάζεται μόνο ορισμένα δεδομένα. Αν κάποιος που διαβάζει ξέρει πώς να εξηγήσει τη διαφορά σε αυτές τις προσεγγίσεις ακόμα πιο απλά, φροντίστε να γράψει στα σχόλια!

Το επόμενο πράγμα που πρέπει να γνωρίζουμε για το SOAP είναι ότι αυτό το πρωτόκολλο χρησιμοποιεί την ίδια XML ως μεταφορά, το οποίο αφενός είναι πολύ καλό, επειδή Το οπλοστάσιό μας περιλαμβάνει αμέσως την πλήρη ισχύ μιας στοίβας τεχνολογιών που βασίζονται σε αυτήν τη γλώσσα σήμανσης, δηλαδή την XML-Schema - μια γλώσσα για την περιγραφή της δομής ενός εγγράφου XML (ευχαριστώ Wikipedia!), η οποία επιτρέπει την αυτόματη επικύρωση των δεδομένων που λαμβάνονται από τον διακομιστή από πελάτες.

Και έτσι, τώρα γνωρίζουμε ότι το SOAP είναι ένα πρωτόκολλο που χρησιμοποιείται για την υλοποίηση κλήσεων απομακρυσμένης διαδικασίας και χρησιμοποιεί την XML ως μεταφορά! Εάν διαβάσετε το άρθρο στη Wikipedia, μπορείτε επίσης να μάθετε από εκεί ότι μπορεί να χρησιμοποιηθεί πάνω από οποιοδήποτε πρωτόκολλο επίπεδο εφαρμογής, και όχι μόνο σε σύζευξη με HTTP (δυστυχώς, σε αυτό το θέμα θα εξετάσουμε μόνο το SOAP έναντι του HTTP). Και ξέρεις τι μου αρέσει περισσότερο σε όλο αυτό; Εάν δεν υπάρχουν εικασίες, τότε θα δώσω μια υπόδειξη - SOAP!... Ακόμα δεν υπάρχουν εικασίες;... Είστε σίγουροι ότι διαβάσατε το άρθρο στη Wikipedia;... Γενικά, δεν θα σας βασανίσω περαιτέρω. Επομένως, θα πάω κατευθείαν στην απάντηση: "SOAP (από το αγγλικό πρωτόκολλο πρόσβασης απλού αντικειμένου - απλό πρωτόκολλοπρόσβαση σε αντικείμενα· μέχρι τις προδιαγραφές 1.2)". Το πιο αξιοσημείωτο σε αυτή τη γραμμή είναι με πλάγιους χαρακτήρες! Δεν ξέρω τι συμπεράσματα έβγαλες από όλα αυτά, αλλά βλέπω το εξής - αφού αυτό το πρωτόκολλο δεν μπορεί με κανέναν τρόπο να ονομαστεί "απλό" (και προφανώς ακόμη και το w3 συμφωνεί με αυτό), τότε από την έκδοση 1.2 σταμάτησε να αποκρυπτογραφείται με κάποιο τρόπο ! Και έγινε γνωστό ως SOAP, just SOAP, τελεία.

Λοιπόν, εντάξει, με συγχωρείτε, παρεκτράπηκα λίγο. Όπως έγραψα νωρίτερα, η XML χρησιμοποιείται ως μεταφορά και τα πακέτα που ταξιδεύουν μεταξύ του πελάτη και του διακομιστή ονομάζονται φάκελοι SOAP. Αν σκεφτείτε τη γενική δομή του φακέλου, θα σας φανεί πολύ οικείο, γιατί... μοιάζει με τη δομή μιας σελίδας HTML. Έχει ένα κύριο τμήμα - Περιτυλίσσω, που περιλαμβάνει ενότητες Επί κεφαλήςΚαι Σώμα, ή Σφάλμα. ΣΕ Σώμαδιαβιβάζονται δεδομένα και αποτελεί υποχρεωτικό τμήμα του φακέλου, ενώ Επί κεφαλήςείναι προαιρετική. ΣΕ Επί κεφαλήςμπορεί να μεταδοθεί εξουσιοδότηση ή οποιαδήποτε άλλα δεδομένα που δεν σχετίζονται άμεσα με τα δεδομένα εισόδου των διαδικασιών της υπηρεσίας Ιστού. Για Σφάλμαδεν υπάρχει τίποτα ιδιαίτερο να πούμε, εκτός από το ότι έρχεται στον πελάτη από τον διακομιστή σε περίπτωση σφαλμάτων.

Εδώ τελειώνει η ιστορία της κριτικής μου σχετικά με το πρωτόκολλο SOAP (θα εξετάσουμε τους ίδιους τους φακέλους και τη δομή τους με περισσότερες λεπτομέρειες όταν ο πελάτης και ο διακομιστής μας τελικά μάθουν να τα εκτελούν μεταξύ τους) και ξεκινά μια νέα - σχετικά με το συνοδευτικό SOAP που ονομάζεται WSDL(Γλώσσα περιγραφής υπηρεσιών Ιστού). Ναι, ναι, αυτό ακριβώς είναι το πράγμα που φοβίζει τους περισσότερους από εμάς ακόμη και να προσπαθήσουμε να πάρουμε και να εφαρμόσουμε το API μας στο αυτό το πρωτόκολλο. Ως αποτέλεσμα, συνήθως ανακαλύπτουμε εκ νέου τον τροχό μας με JSON ως μεταφορά. Τι είναι λοιπόν το WSDL; Η WSDL είναι μια γλώσσα για την περιγραφή των διαδικτυακών υπηρεσιών και την πρόσβαση σε αυτές, με βάση τη γλώσσα XML (γ) Wikipedia. Εάν αυτός ο ορισμός δεν σας καθιστά σαφές ολόκληρο το ιερό νόημα αυτής της τεχνολογίας, τότε θα προσπαθήσω να το περιγράψω με δικά μου λόγια!

Το WSDL έχει σχεδιαστεί για να επιτρέπει στους πελάτες μας να επικοινωνούν κανονικά με τον διακομιστή. Για να γίνει αυτό, το αρχείο με την επέκταση "*.wsdl" περιγράφει τις ακόλουθες πληροφορίες:

  • Ποιοι χώροι ονομάτων χρησιμοποιήθηκαν;
  • Ποια σχήματα δεδομένων χρησιμοποιήθηκαν;
  • Τι είδους μηνύματα αναμένει η υπηρεσία web από τους πελάτες;
  • Ποια δεδομένα ανήκουν σε ποιες διαδικασίες διαδικτυακής υπηρεσίας,
  • Ποιες διαδικασίες περιλαμβάνει η υπηρεσία web;
  • Πώς πρέπει ο πελάτης να καλεί τις διαδικασίες υπηρεσιών web,
  • Σε ποια διεύθυνση πρέπει να αποστέλλονται οι κλήσεις πελατών;
Όπως μπορείτε να δείτε, αυτό το αρχείοκαι υπάρχει ολόκληρη η υπηρεσία web. Καθορίζοντας τη διεύθυνση του αρχείου WSDL στον πελάτη, θα γνωρίζουμε τα πάντα για οποιαδήποτε υπηρεσία web! Ως αποτέλεσμα, δεν χρειάζεται να γνωρίζουμε απολύτως τίποτα για το πού βρίσκεται η ίδια η υπηρεσία web. Το μόνο που χρειάζεται να γνωρίζετε είναι τη θέση του αρχείου WSDL! Σύντομα θα μάθουμε ότι το SOAP δεν είναι τόσο τρομακτικό όσο το λένε οι ρωσικές παροιμίες.

3 Εισαγωγή στο XML-Schema

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

Το κύριο καθήκον του διαγράμματος είναι να περιγράψει τη δομή των δεδομένων που πρόκειται να επεξεργαστούμε. Όλα τα δεδομένα σε σχήματα XML χωρίζονται σε απλός(κλιμακωτός) και συγκρότημα(δομές) τύπους. Οι απλοί τύποι περιλαμβάνουν τους ακόλουθους τύπους:

  • γραμμή,
  • αριθμός,
  • δυαδική τιμή,
  • ημερομηνία.
Κάτι πολύ απλό που δεν έχει προεκτάσεις μέσα. Ο αντίποδός τους είναι πολύπλοκων σύνθετων τύπων. Το απλούστερο παράδειγμα ενός πολύπλοκου τύπου που έρχεται στο μυαλό όλων είναι τα αντικείμενα. Για παράδειγμα, ένα βιβλίο. Το βιβλίο αποτελείται από ιδιότητες: συγγραφέας, Ονομα, τιμή, Αριθμός ISBNκαι τα λοιπά. Και αυτές οι ιδιότητες, με τη σειρά τους, μπορεί να είναι είτε απλοί τύποι είτε σύνθετοι. Και το καθήκον του σχήματος XML είναι να το περιγράψει αυτό.

Προτείνω να μην πάτε μακριά και να γράψετε ένα σχήμα XML για το μήνυμα SMS μας! Ακολουθεί η xml περιγραφή του μηνύματος SMS:

71239876543 Δοκιμαστικό μήνυμα 20-07-2013 T12:00:00 12
Το διάγραμμα σύνθετου τύπου μας θα μοιάζει με αυτό:


Αυτή η καταχώρηση έχει ως εξής: Έχουμε μια μεταβλητή " μήνυμα"τύπος" Μήνυμα"και υπάρχει ένας πολύπλοκος τύπος που ονομάζεται " Μήνυμα", το οποίο αποτελείται από ένα διαδοχικό σύνολο στοιχείων" τηλέφωνο"τύπος σειρά, « κείμενο"τύπος σειρά, « ημερομηνία"τύπος ημερομηνίαΏρα, « τύπος"τύπος δεκαδικός. Αυτοί οι τύποι είναι απλοί και έχουν ήδη οριστεί στην περιγραφή του σχήματος. Συγχαρητήρια! Μόλις γράψαμε το πρώτο μας σχήμα XML!

Νομίζω ότι η έννοια των στοιχείων " στοιχείο"Και" σύνθετος τύπος"Όλα έχουν γίνει λίγο-πολύ ξεκάθαρα για εσάς, επομένως δεν θα επικεντρωθούμε πλέον σε αυτά και ας περάσουμε κατευθείαν στο στοιχείο του συνθέτη" αλληλουχία" Όταν χρησιμοποιούμε το στοιχείο συνθέτη " αλληλουχία«Σας ενημερώνουμε ότι τα στοιχεία που περιλαμβάνονται σε αυτό πρέπει πάντα να βρίσκονται με τη σειρά που καθορίζεται στο διάγραμμα και όλα είναι υποχρεωτικά. Αλλά μην απελπίζεστε! Υπάρχουν δύο ακόμη στοιχεία συνθέτη στα σχήματα XML: " επιλογή"Και" όλοι" συνθέτης" επιλογή" ανακοινώνει ότι πρέπει να υπάρχει ένα από τα στοιχεία που αναφέρονται σε αυτό και ο συνθέτης " όλοι» – οποιοσδήποτε συνδυασμός των στοιχείων που αναφέρονται.

Όπως θυμάστε, στην πρώτη ενότητα του θέματος συμφωνήσαμε ότι από ένα έως άπειρα μηνύματα SMS μπορούν να μεταδοθούν σε πακέτο. Επομένως, προτείνω να κατανοήσουμε πώς δηλώνονται τέτοια δεδομένα στο σχήμα XML. Γενική δομήΤο πακέτο μπορεί να μοιάζει με αυτό:

71239876543 Δοκιμαστικό μήνυμα 1 20-07-2013 T12:00:00 12 71239876543 Δοκιμαστικό μήνυμα Ν 20-07-2013 T12:00:00 12
Το διάγραμμα για έναν τόσο σύνθετο τύπο θα μοιάζει με αυτό:


Το πρώτο μπλοκ περιέχει τη γνωστή δήλωση του μιγαδικού τύπου " Μήνυμα" Αν προσέξατε, τότε σε κάθε απλό τύπο που περιλαμβάνεται στο " Μήνυμα", προστέθηκαν νέα διευκρινιστικά χαρακτηριστικά " minΣυμβαίνει"Και" maxOccurs" Όπως μπορείτε να μαντέψετε από το όνομα, το πρώτο ( minΣυμβαίνει) υποδεικνύει ότι αυτή η ακολουθία πρέπει να περιέχει τουλάχιστον ένα στοιχείο τύπου " τηλέφωνο», « κείμενο», « ημερομηνία"Και" τύπος", ενώ το επόμενο ( maxOccurs) το χαρακτηριστικό μας δηλώνει ότι υπάρχει το πολύ ένα τέτοιο στοιχείο στην ακολουθία μας. Ως αποτέλεσμα, όταν γράφουμε τα σχήματά μας για οποιαδήποτε δεδομένα, μας δίνονται ευρύτερη επιλογήστήνοντάς τα!

Το δεύτερο μπλοκ του διαγράμματος δηλώνει το στοιχείο " λίστα μηνυμάτων"τύπος" MessageList" Είναι σαφές ότι " MessageList"είναι ένας σύνθετος τύπος που περιέχει τουλάχιστον ένα στοιχείο" μήνυμα», αλλά ο μέγιστος αριθμός τέτοιων στοιχείων δεν είναι περιορισμένος!

4 Γράψτε το WSDL σας

Θυμάστε ότι το WSDL είναι η διαδικτυακή μας υπηρεσία; Ελπίζω να θυμάσαι! Καθώς το γράφουμε, η μικρή μας υπηρεσία ιστού θα λειτουργεί σε αυτό. Ως εκ τούτου, προτείνω να μην μπερδεύουμε.

Γενικά, για να λειτουργούν όλα σωστά για εμάς, πρέπει να μεταφέρουμε το αρχείο WSDL με τον σωστό τύπο MIME στον πελάτη. Για να το κάνετε αυτό, πρέπει να ρυθμίσετε τις παραμέτρους του διακομιστή ιστού σας ανάλογα, δηλαδή να ορίσετε τον τύπο MIME για αρχεία με την επέκταση "*.wsdl" στην ακόλουθη γραμμή:

Εφαρμογή/wsdl+xml
Αλλά στην πράξη, συνήθως έστελνα την κεφαλίδα HTTP μέσω PHP " κείμενο/xml»:

Header("Content-Type: text/xml; charset=utf-8");
και όλα δούλεψαν τέλεια!

Θέλω να σας προειδοποιήσω αμέσως ότι η απλή διαδικτυακή μας υπηρεσία θα έχει μια μάλλον εντυπωσιακή περιγραφή, οπότε μην ανησυχείτε, γιατί... Το μεγαλύτερο μέρος του κειμένου είναι υποχρεωτικό νερό και, αφού το γράψετε μία φορά, μπορείτε να το αντιγράφετε συνεχώς από τη μια υπηρεσία web στην άλλη!

Δεδομένου ότι το WSDL είναι XML, πρέπει να γράψετε για αυτό απευθείας στην πρώτη γραμμή. Το ριζικό στοιχείο του αρχείου πρέπει πάντα να ονομάζεται " ορισμούς»:


Συνήθως, το WSDL αποτελείται από 4-5 κύρια μπλοκ. Το πρώτο μπλοκ είναι ο ορισμός μιας διαδικτυακής υπηρεσίας ή, με άλλα λόγια, το σημείο εισόδου.


Λέει εδώ ότι έχουμε μια υπηρεσία που ονομάζεται - " SmsService" Καταρχήν, όλα τα ονόματα στο αρχείο WSDL μπορούν να αλλάξουν από εσάς σε ό,τι θέλετε, επειδή δεν παίζουν κανέναν απολύτως ρόλο.

Μετά από αυτό ανακοινώνουμε ότι στην υπηρεσία ιστού μας " SmsService"Υπάρχει ένα σημείο εισόδου ("port") που ονομάζεται " SmsServicePort" Σε αυτό το σημείο εισόδου θα αποστέλλονται όλα τα αιτήματα από τους πελάτες στον διακομιστή. Και υποδείξτε στο στοιχείο " διεύθυνση» σύνδεσμος προς το αρχείο χειριστή που θα δέχεται αιτήματα.

Αφού ορίσουμε την υπηρεσία web και καθορίσουμε το σημείο εισόδου για αυτήν, πρέπει να δεσμεύσουμε τις υποστηριζόμενες διαδικασίες σε αυτήν:


Για να γίνει αυτό, παραθέτει ποιες λειτουργίες και με ποια μορφή θα καλούνται. Εκείνοι. για λιμάνι" SmsServicePort"ένα δεσμευτικό ορίζεται κάτω από το όνομα" SmsServiceBinding", το οποίο έχει τύπο κλήσης" rpc"και το HTTP χρησιμοποιείται ως πρωτόκολλο μετάδοσης. Έτσι, υποδείξαμε εδώ ότι θα πραγματοποιήσουμε μια κλήση RPC μέσω HTTP. Μετά από αυτό περιγράφουμε ποιες διαδικασίες ( λειτουργία) υποστηρίζονται στην υπηρεσία web. Θα υποστηρίξουμε μόνο μία διαδικασία - " αποστολή SMS" Μέσω αυτής της διαδικασίας τα υπέροχα μηνύματά μας θα σταλούν στον διακομιστή! Αφού δηλωθεί η διαδικασία, είναι απαραίτητο να υποδειχθεί με ποια μορφή θα διαβιβαστούν τα δεδομένα. ΣΕ σε αυτή την περίπτωσηδιευκρινίζεται ότι θα χρησιμοποιηθούν τυπικοί φάκελοι SOAP.

Μετά από αυτό, πρέπει να συνδέσουμε τη διαδικασία σε μηνύματα:


Για να γίνει αυτό, διευκρινίζουμε ότι το δέσιμο μας είναι τύπου " SmsServicePortType"και στο στοιχείο" portType«Με το όνομα του ίδιου τύπου υποδεικνύουμε τη σύνδεση των διαδικασιών σε μηνύματα. Και έτσι, το εισερχόμενο μήνυμα (από πελάτη σε διακομιστή) θα ονομάζεται " sendSmsRequest", και εξερχόμενη (από διακομιστή σε πελάτη) " sendSmsResponse" Όπως όλα τα ονόματα στο WSDL, τα ονόματα των εισερχόμενων και εξερχόμενων μηνυμάτων είναι αυθαίρετα.

Τώρα πρέπει να περιγράψουμε τα ίδια τα μηνύματα, δηλ. εισερχόμενες και εξερχόμενες:


Για να γίνει αυτό προσθέτουμε τα στοιχεία " μήνυμα"με ονόματα" sendSmsRequest"Και" sendSmsResponse"αντίστοιχα. Σε αυτά υποδεικνύουμε ότι η είσοδος πρέπει να είναι ένας φάκελος του οποίου η δομή αντιστοιχεί στον τύπο δεδομένων " Αίτηση" Μετά από αυτό επιστρέφεται ένας φάκελος από τον διακομιστή που περιέχει τον τύπο δεδομένων - " Απάντηση».

Τώρα πρέπει να κάνουμε λίγο - να προσθέσουμε μια περιγραφή αυτών των τύπων στο αρχείο μας WSDL! Και πώς πιστεύετε ότι το WSDL περιγράφει τα εισερχόμενα και τα εξερχόμενα δεδομένα; Νομίζω ότι έχετε ήδη καταλάβει τα πάντα εδώ και πολύ καιρό και είπατε στον εαυτό σας ότι χρησιμοποιώντας σχήματα XML! Και θα έχεις απόλυτο δίκιο!


Μπορείτε να μας συγχαρείτε! Το πρώτο μας WSDL γράφτηκε! Και είμαστε ένα βήμα πιο κοντά στην επίτευξη του στόχου μας.
Στη συνέχεια, θα δούμε τι μας παρέχει η PHP για την ανάπτυξη των δικών μας κατανεμημένων εφαρμογών.

5 Ο πρώτος μας διακομιστής SOAP

Νωρίτερα έγραψα ότι για να δημιουργήσουμε έναν διακομιστή SOAP στην PHP θα χρησιμοποιήσουμε την ενσωματωμένη κλάση SoapServer. Για να γίνουν όλες οι περαιτέρω ενέργειες με τον ίδιο τρόπο όπως για μένα, θα χρειαστεί να τροποποιήσετε λίγο την PHP σας. Για να είμαστε ακόμη πιο ακριβείς, πρέπει να βεβαιωθείτε ότι έχετε εγκαταστήσει την επέκταση "php-soap". Είναι καλύτερο να διαβάσετε πώς να το εγκαταστήσετε στον διακομιστή ιστού σας στον επίσημο ιστότοπο της PHP (δείτε τη λίστα αναφορών).

Αφού εγκατασταθούν και ρυθμιστούν τα πάντα, θα χρειαστεί να δημιουργήσουμε ένα αρχείο στον ριζικό φάκελο της φιλοξενίας σας " smsservice.php» με το ακόλουθο περιεχόμενο:

setClass("SoapSmsGateWay"); //Εκκίνηση του διακομιστή $server->handle();
Ελπίζω να μην χρειάζεται να εξηγήσω τι βρίσκεται πάνω από τη γραμμή με τη συνάρτηση "ini_set". Επειδή εκεί καθορίζεται ποιες κεφαλίδες HTTP θα στείλουμε από τον διακομιστή στον πελάτη και διαμορφώνεται το περιβάλλον. Στη γραμμή με το "ini_set" απενεργοποιούμε την προσωρινή αποθήκευση του αρχείου WSDL έτσι ώστε οι αλλαγές μας σε αυτό να ισχύουν αμέσως στον πελάτη.

Τώρα ερχόμαστε στον διακομιστή! Όπως μπορείτε να δείτε, ολόκληρος ο διακομιστής SOAP παίρνει μόνο τρεις γραμμές! Στην πρώτη γραμμή, δημιουργούμε ένα νέο στιγμιότυπο του αντικειμένου SoapServer και μεταβιβάζουμε τη διεύθυνση της περιγραφής WSDL της υπηρεσίας web στον κατασκευαστή του. Τώρα ξέρουμε ότι θα βρίσκεται στη ρίζα της φιλοξενίας σε ένα αρχείο με το αυτονόητο όνομα " smsservice.wsdl.php" Στη δεύτερη γραμμή, λέμε στον διακομιστή SOAP ποια κλάση πρέπει να τραβήξει για να επεξεργαστεί το φάκελο που ελήφθη από τον πελάτη και να επιστρέψει τον φάκελο με την απόκριση. Όπως ίσως μαντέψατε, σε αυτήν την κατηγορία θα περιγραφεί η μόνη μας μέθοδος αποστολή SMS. Στην τρίτη γραμμή ξεκινάμε τον διακομιστή! Αυτό είναι όλο, ο διακομιστής μας είναι έτοιμος! Με το οποίο μας συγχαίρω όλους!

Τώρα πρέπει να δημιουργήσουμε το αρχείο WSDL. Για να το κάνετε αυτό, μπορείτε είτε απλώς να αντιγράψετε το περιεχόμενό του από την προηγούμενη ενότητα, είτε να αφεθείτε ελεύθεροι και να το κάνετε "πρότυπο" λίγο:

"; ?> /" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http:// schemas.xmlsoap.org/wsdl/http/" name="SmsWsdl" xmlns="http://schemas.xmlsoap.org/wsdl/"> /"> /smsservice.php" />
Σε αυτό το στάδιο, θα πρέπει να είμαστε απόλυτα ικανοποιημένοι με τον διακομιστή που προκύπτει, γιατί Μπορούμε να καταγράψουμε τους φακέλους που έρχονται σε αυτό και στη συνέχεια να αναλύσουμε ήρεμα τα εισερχόμενα δεδομένα. Για να λάβουμε οτιδήποτε στον διακομιστή, χρειαζόμαστε έναν πελάτη. Πάμε λοιπόν σε αυτό!

6 πελάτης SOAP στο δρόμο

Πρώτα από όλα, πρέπει να δημιουργήσουμε ένα αρχείο στο οποίο θα γράψουμε τον πελάτη. Ως συνήθως, θα το δημιουργήσουμε στη ρίζα του κεντρικού υπολογιστή και θα το ονομάσουμε " client.php", και μέσα θα γράψουμε τα εξής:

messageList = new MessageList(); $req->messageList->message = new Message(); $req->messageList->message->phone = "79871234567"; $req->messageList->message->text = "Δοκιμαστικό μήνυμα 1"; $req->messageList->message->date = "2013-07-21T15:00:00.26"; $req->messageList->message->type = 15; $client = new SoapClient("http://($_SERVER["HTTP_HOST"])/smsservice.wsdl.php", array("soap_version" => SOAP_1_2)); var_dump($client->sendSms($req));
Ας περιγράψουμε τα αντικείμενά μας. Όταν γράψαμε το WSDL, περιέγραφε τρεις οντότητες για τον φάκελο που εισερχόταν στον διακομιστή: Αίτηση, MessageListΚαι Μήνυμα. Ανάλογα τάξεις Αίτηση, MessageListΚαι Μήνυμαείναι αντανακλάσεις αυτών των οντοτήτων στο σενάριο PHP μας.

Αφού ορίσουμε τα αντικείμενα, πρέπει να δημιουργήσουμε ένα αντικείμενο ( $req), το οποίο θα στείλουμε στον διακομιστή. Μετά από αυτό έρχονται οι δύο πιο αγαπημένες γραμμές για εμάς! Ο πελάτης μας SOAP! Είτε το πιστεύετε είτε όχι, αυτό είναι αρκετό για να αρχίσει ο διακομιστής μας να λαμβάνει μηνύματα από τον πελάτη, καθώς και για να τα λαμβάνει και να τα επεξεργάζεται με επιτυχία ο διακομιστής μας! Στην πρώτη από αυτές, δημιουργούμε μια παρουσία της κλάσης SoapClient και περνάμε τη διεύθυνση της θέσης του αρχείου WSDL στον κατασκευαστή του και στις παραμέτρους υποδεικνύουμε ρητά ότι θα εργαστούμε χρησιμοποιώντας το πρωτόκολλο SOAP έκδοση 1.2. Στην επόμενη γραμμή καλούμε τη μέθοδο αποστολή SMSαντικείμενο $clientκαι εμφανίστε αμέσως το αποτέλεσμα στο πρόγραμμα περιήγησης.
Ας το τρέξουμε και ας δούμε τι πήραμε τελικά!

Το ακόλουθο αντικείμενο επιστράφηκε σε μένα από τον διακομιστή:

Object(stdClass) public "status" => boolean true
Και αυτό είναι υπέροχο, γιατί... Τώρα γνωρίζουμε με βεβαιότητα ότι ο διακομιστής μας λειτουργεί και όχι μόνο λειτουργεί, αλλά μπορεί επίσης να επιστρέψει ορισμένες τιμές στον πελάτη!

Τώρα ας δούμε το αρχείο καταγραφής που κρατάμε με σύνεση από την πλευρά του διακομιστή! Στο πρώτο μέρος του βλέπουμε τα ανεπεξέργαστα δεδομένα που έφτασαν στον διακομιστή:

79871234567 Δοκιμαστικό μήνυμα 1 21-07-2013 T15:00:00.26 15
Αυτός είναι ο φάκελος. Τώρα ξέρετε πώς μοιάζει! Αλλά είναι απίθανο να μας ενδιαφέρει να το κοιτάμε συνέχεια, οπότε ας απαριθμήσουμε το αντικείμενο από το αρχείο καταγραφής και ας δούμε αν όλα είναι καλά:

Object(stdClass) public "messageList" => object(stdClass) public "message" => object(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 1 " (μήκος=37) δημόσια "ημερομηνία" => συμβολοσειρά "2013-07-21T15:00:00.26" (μήκος=22) δημόσιο "τύπος" => συμβολοσειρά "15" (μήκος=2)
Όπως μπορείτε να δείτε, το αντικείμενο αποσειρώθηκε σωστά, για το οποίο θέλω να μας συγχαρώ όλους! Κάτι πιο ενδιαφέρον μας περιμένει στη συνέχεια! Δηλαδή, θα στείλουμε τον πελάτη στον διακομιστή όχι μόνο ένα μήνυμα SMS, αλλά ένα ολόκληρο πακέτο (για την ακρίβεια, τρία)!

7 Αποστολή σύνθετων αντικειμένων

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

// δημιουργήστε ένα αντικείμενο για αποστολή στον διακομιστή $req = new Request(); $req->messageList = new MessageList(); $msg1 = new Message(); $msg1->phone = "79871234567"; $msg1->text = "Δοκιμαστικό μήνυμα 1"; $msg1->date = "21-07-2013T15:00:00.26"; $msg1->type = 15; $msg2 = new Message(); $msg2->phone = "79871234567"; $msg2->text = "Δοκιμαστικό μήνυμα 2"; $msg2->date = "2014-08-22T16:01:10"; $msg2->type = 16; $msg3 = new Message(); $msg3->phone = "79871234567"; $msg3->text = "Δοκιμαστικό μήνυμα 3"; $msg3->date = "2014-08-22T16:01:10"; $msg3->type = 17; $req->messageList->message = $msg1; $req->messageList->message = $msg2; $req->messageList->message = $msg3;
Τα αρχεία καταγραφής μας δείχνουν ότι το ακόλουθο πακέτο ελήφθη από τον πελάτη:

79871234567 Δοκιμαστικό μήνυμα 1 21-07-2013 T15:00:00.26 15 79871234567 Δοκιμαστικό μήνυμα 2 22-08-2014T16:01:10 16 79871234567 Δοκιμαστικό μήνυμα 3 22-08-2014T16:01:10 17
Τι ανοησίες λέτε; Και θα έχεις δίκιο από μια άποψη, γιατί... Μόλις μάθαμε ότι ένα αντικείμενο έφυγε από τον πελάτη, ήρθε στον διακομιστή μας με την ίδια ακριβώς μορφή με τη μορφή φακέλου. Είναι αλήθεια ότι τα μηνύματα SMS δεν ήταν σειριακά σε XML με τον τρόπο που χρειαζόμασταν - έπρεπε να είναι τυλιγμένα σε στοιχεία μήνυμα, όχι μέσα Struc. Τώρα ας δούμε σε ποια μορφή έρχεται ένα τέτοιο αντικείμενο στη μέθοδο αποστολή SMS:

Object(stdClass) public "messageList" => object(stdClass) public "message" => object(stdClass) public "Struct" => array (size=3) 0 => object(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 1" (length=37) public "date" => string "2013-07-21T15:00:00.26" (length=22) public " type" => string "15" (length=2) 1 => object(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 2" (length= 37) public "date" => string "2014-08-22T16:01:10" (length=19) public "type" => string "16" (length=2) 2 => object(stdClass) public "phone " => string "79871234567" (length=11) public "text" => string "Test message 3" (length=37) public "date" => string "2014-08-22T16:01:10" (length= 19) δημόσιο "type" => συμβολοσειρά "17" (μήκος=2)
Τι μας δίνει αυτή η γνώση; Μόνο που η διαδρομή που επιλέξαμε δεν είναι σωστή και δεν έχουμε λάβει απάντηση στην ερώτηση - «Πώς μπορούμε να μπούμε στον διακομιστή σωστή δομήδεδομένα; Αλλά προτείνω να μην απελπιζόμαστε και να προσπαθήσουμε να μετατρέψουμε τον πίνακα μας στον τύπο αντικείμενο:

$req->messageList->message = (αντικείμενο)$req->messageList->message;
Σε αυτήν την περίπτωση, θα λάβουμε έναν άλλο φάκελο:

79871234567 Δοκιμαστικό μήνυμα 1 21-07-2013 T15:00:00.26 15 79871234567 Δοκιμαστικό μήνυμα 2 22-08-2014T16:01:10 16 79871234567 Δοκιμαστικό μήνυμα 3 22-08-2014T16:01:10 17
Έφτασε στη μέθοδο αποστολή SMSτο αντικείμενο έχει την ακόλουθη δομή:

Object(stdClass) public "messageList" => object(stdClass) public "message" => object(stdClass) public "BOGUS" => array (size=3) 0 => object(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 1" (length=37) public "date" => string "2013-07-21T15:00:00.26" (length=22) public " type" => string "15" (length=2) 1 => object(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 2" (length= 37) public "date" => string "2014-08-22T16:01:10" (length=19) public "type" => string "16" (length=2) 2 => object(stdClass) public "phone " => string "79871234567" (length=11) public "text" => string "Test message 3" (length=37) public "date" => string "2014-08-22T16:01:10" (length= 19) δημόσιο "type" => συμβολοσειρά "17" (μήκος=2)
Όσο για μένα, «το άθροισμα δεν αλλάζει από την αλλαγή των θέσεων των όρων» (γ). Τι ΨΕΥΔΗΣ, Τι Struc– δεν έχουμε πετύχει ακόμα τον στόχο μας! Και για να το πετύχουμε, πρέπει να βεβαιωθούμε ότι αντί για αυτά τα ακατανόητα ονόματα εμφανίζεται το μητρικό μας μήνυμα. Αλλά ο συγγραφέας δεν ξέρει ακόμα πώς να το πετύχει αυτό. Επομένως, το μόνο που μπορούμε να κάνουμε είναι να απαλλαγούμε από το επιπλέον δοχείο. Με άλλα λόγια, θα φροντίσουμε τώρα ότι αντί για μήνυμαέγινε ΨΕΥΔΗΣ! Για να το κάνετε αυτό, αλλάξτε το αντικείμενο ως εξής:

// δημιουργήστε ένα αντικείμενο για αποστολή στον διακομιστή $req = new Request(); $msg1 = new Message(); $msg1->phone = "79871234567"; $msg1->text = "Δοκιμαστικό μήνυμα 1"; $msg1->date = "21-07-2013T15:00:00.26"; $msg1->type = 15; $msg2 = new Message(); $msg2->phone = "79871234567"; $msg2->text = "Δοκιμαστικό μήνυμα 2"; $msg2->date = "2014-08-22T16:01:10"; $msg2->type = 16; $msg3 = new Message(); $msg3->phone = "79871234567"; $msg3->text = "Δοκιμαστικό μήνυμα 3"; $msg3->date = "2014-08-22T16:01:10"; $msg3->type = 17; $req->messageList = $msg1; $req->messageList = $msg2; $req->messageList = $msg3; $req->messageList = (αντικείμενο)$req->messageList;
Τι γίνεται αν σταθούμε τυχεροί και βγει το σωστό όνομα από το διάγραμμα; Για να το κάνουμε αυτό, ας δούμε τον φάκελο που έφτασε:

79871234567 Δοκιμαστικό μήνυμα 1 21-07-2013 T15:00:00.26 15 79871234567 Δοκιμαστικό μήνυμα 2 22-08-2014T16:01:10 16 79871234567 Δοκιμαστικό μήνυμα 3 22-08-2014T16:01:10 17
Ναι, δεν έγινε θαύμα! ΨΕΥΔΗΣ– Δεν θα κερδίσουμε! ήρθε στο αποστολή SMSτο αντικείμενο σε αυτή την περίπτωση θα μοιάζει με αυτό:

Object(stdClass) public "messageList" => object(stdClass) public "BOGUS" => array (size=3) 0 => object(stdClass) public "phone" => string "79871234567" (length=11) public " text" => string "Test message 1" (length=37) public "date" => string "2013-07-21T15:00:00.26" (length=22) public "type" => string "15" (length =2) 1 => αντικείμενο(stdClass) public "phone" => string "79871234567" (length=11) public "text" => string "Test message 2" (length=37) public "date" => string " 2014-08-22T16:01:10" (μήκος=19) δημόσιος "τύπος" => συμβολοσειρά "16" (μήκος=2) 2 => αντικείμενο(stdClass) δημόσιο "τηλέφωνο" => συμβολοσειρά "79871234567" (μήκος= 11) public "text" => string "Test message 3" (length=37) public "date" => string "2014-08-22T16:01:10" (length=19) public "type" => string " 17" (μήκος = 2)
Όπως λένε – «Σχεδόν»! Σε αυτό το (ελαφρώς λυπηρό) σημείωμα, προτείνω να ολοκληρώσουμε σιγά σιγά τα πράγματα και να βγάλουμε κάποια συμπεράσματα για τον εαυτό μας.

8 Συμπέρασμα

Επιτέλους φτάσαμε εδώ! Ας καταλάβουμε τι μπορείτε να κάνετε τώρα:
  • Μπορείτε να γράψετε το αρχείο WSDL που είναι απαραίτητο για την υπηρεσία web σας.
  • Μπορείτε εύκολα να γράψετε τον δικό σας πελάτη που μπορεί να επικοινωνεί με τον διακομιστή μέσω SOAP.
  • μπορείς να γράψεις το δικό σου δικός διακομιστήςεπικοινωνία με τον έξω κόσμο μέσω SOAP·
  • μπορείτε να στείλετε πίνακες του ίδιου τύπου αντικειμένων στον διακομιστή από τον πελάτη σας (με ορισμένους περιορισμούς).
Κάναμε επίσης μερικές ανακαλύψεις κατά τη διάρκεια της μικρής έρευνάς μας:
  • η εγγενής κλάση SoapClient δεν σειριοποιεί σωστά τις δομές δεδομένων του ίδιου τύπου σε XML.
  • κατά τη σειριοποίηση ενός πίνακα σε XML δημιουργεί ένα επιπλέον στοιχείο που ονομάζεται Struc;
  • κατά τη σειριοποίηση ενός αντικειμένου σε XML δημιουργεί ένα επιπλέον στοιχείο που ονομάζεται ΨΕΥΔΗΣ;
  • ΨΕΥΔΗΣλιγότερο κακό από Strucλόγω του γεγονότος ότι ο φάκελος είναι πιο συμπαγής (δεν προστίθενται επιπλέον χώροι ονομάτων στην κεφαλίδα XML του φακέλου).
  • Δυστυχώς, η κλάση SoapServer δεν επικυρώνει αυτόματα τα δεδομένα φακέλου με το σχήμα XML μας (ίσως και άλλοι διακομιστές να μην το κάνουν αυτό).

ΣΑΠΟΥΝΙ-ένα πρωτόκολλο κειμένου που χρησιμοποιεί XML για την ανταλλαγή δομημένων μηνυμάτων σε ένα κατανεμημένο υπολογιστικό περιβάλλον. Το SOAP αρχικά προοριζόταν κυρίως για εφαρμογή απομακρυσμένη κλήσηδιαδικασίες (RPC), και το όνομα ήταν μια συντομογραφία: Simple Object Access Protocol - ένα απλό πρωτόκολλο για την πρόσβαση σε αντικείμενα. Το πρωτόκολλο χρησιμοποιείται πλέον για την ανταλλαγή αυθαίρετων μηνυμάτων σε μορφή XML και όχι μόνο για την κλήση διαδικασιών. Η επίσημη προδιαγραφή της τελευταίας έκδοσης 1.2 του πρωτοκόλλου δεν αποκρυπτογραφεί με κανέναν τρόπο το όνομα SOAP. Το SOAP είναι μια επέκταση του πρωτοκόλλου XML-RPC. Το SOAP μπορεί να χρησιμοποιηθεί με οποιοδήποτε πρωτόκολλο επιπέδου εφαρμογής: SMTP, FTP, HTTP κ.λπ. Ωστόσο, η αλληλεπίδρασή του με καθένα από αυτά τα πρωτόκολλα έχει τα δικά του χαρακτηριστικά που πρέπει να οριστούν ξεχωριστά. Τις περισσότερες φορές, το SOAP χρησιμοποιείται μέσω HTTP. Το SOAP είναι ένα από τα πρότυπα στα οποία βασίζονται οι τεχνολογίες διαδικτυακών υπηρεσιών. Η επικοινωνία μεταξύ των υπηρεσιών web και των πελατών τους πραγματοποιείται μέσω μηνυμάτων σε μορφή XML. Το SOAP (Simple Object Access Protocol) είναι ένα πρωτόκολλο μηνυμάτων για την επιλογή υπηρεσιών web. Μπορούμε να πούμε ότι η μορφή SOAP είναι ιδανική για την τεχνολογία RPC (Remote Procedure Call), καθώς το μήνυμα SOAP περιέχει παραμέτρους που αποστέλλονται από τον πελάτη ή μια τιμή επιστροφής που αποστέλλεται από την υπηρεσία.

Πλεονεκτήματα της χρήσης της μορφής SOAP:

· Πιο ευέλικτοι τύποι δεδομένων.

· Υποστήριξη για κεφαλίδες και επεκτάσεις:

Ελαττώματα:

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

· Αν και το SOAP είναι ένα πρότυπο, διάφορα προγράμματασυχνά δημιουργούν μηνύματα σε ασύμβατη μορφή. Για παράδειγμα, ένα αίτημα που δημιουργείται από έναν πελάτη AXIS δεν θα γίνει κατανοητό από τον διακομιστή WebLogic.

Βασικές έννοιες του πρωτοκόλλου: Το μέρος που στέλνει το μήνυμα SOAP ονομάζεται αποστολέας SOAP και το μέρος που λαμβάνει ονομάζεται δέκτης SOAP. Η διαδρομή που ακολουθεί ένα μήνυμα SOAP από τον αρχικό αποστολέα στον τελικό παραλήπτη ονομάζεται διαδρομή μηνύματος. Η διαδρομή μηνύματος περιέχει τον αρχικό αποστολέα, τον τελικό παραλήπτη και 0 ή περισσότερους μεσάζοντες SOAP. Τα αντικείμενα που επεξεργάζονται μηνύματα σύμφωνα με τους κανόνες συγκεκριμένων πρωτοκόλλων SOAP ονομάζονται κόμβοι SOAP. Η στοιχειώδης μονάδα πληροφοριών που συμμετέχει στην ανταλλαγή μεταξύ κόμβων SOAP ονομάζεται μήνυμα SOAP - αυτό είναι ένα έγγραφο XML με ένα ριζικό στοιχείο περιτυλίγματος SOAP.

SOAP (πρωτόκολλο πρόσβασης απλού αντικειμένου)είναι ένα τυποποιημένο πρωτόκολλο για τη μετάδοση μηνυμάτων μεταξύ ενός πελάτη και ενός διακομιστή. Συνήθως χρησιμοποιείται σε συνδυασμό με HTTP(S), αλλά μπορεί επίσης να λειτουργήσει με άλλα πρωτόκολλα επιπέδου εφαρμογής (όπως SMTP και FTP).
Η δοκιμή SOAP από την άποψη των τεχνικών δοκιμών δεν διαφέρει ουσιαστικά από την εργασία με άλλα API, αλλά απαιτεί προκαταρκτική προετοιμασία (από την άποψη της θεωρίας πρωτοκόλλου) και ειδικά εργαλεία δοκιμών. Σε αυτό το άρθρο, θα ήθελα να διαμορφώσω μια μικρή λίστα ελέγχου με τις απαραίτητες γνώσεις και δεξιότητες, οι οποίες θα είναι εξίσου χρήσιμες τόσο σε έναν ελεγκτή SOAP (που συχνά δεν έχει ιδέα τι να πιάσει μετά την εκτέλεση της εργασίας) όσο και σε έναν διευθυντή που είναι αναγκάστηκε να αξιολογήσει τις γνώσεις των ελεγκτών και να αναπτύξει σχέδια για εκπαίδευση.

Θεωρητική βάση

Το γεγονός ότι το SOAP είναι ένα πρωτόκολλο έχει πολλές συνέπειες για τις δοκιμές: πρέπει να μελετήσετε το ίδιο το πρωτόκολλο, τα «κύρια» πρότυπα και τα πρωτόκολλα στα οποία βασίζεται, και (όπου χρειάζεται) τις υπάρχουσες επεκτάσεις.

XML
Η XML είναι μια γλώσσα σήμανσης παρόμοια με την HTML. Οποιοδήποτε μήνυμα αποστέλλεται/λαμβάνεται μέσω SOAP είναι ένα έγγραφο XML στο οποίο τα δεδομένα είναι βολικά δομημένα και ευανάγνωστα, για παράδειγμα:



Τζούλια
Νατάσα
Υπενθύμιση
Μην ξεχάσετε να γράψετε ένα άρθρο!


Μπορείτε να μάθετε περισσότερα για την XML στο w3schools ή στο codenet (στα ρωσικά). Φροντίστε να δώσετε προσοχή στην περιγραφή των χώρων ονομάτων (μια μέθοδος για την επίλυση διενέξεων κατά την περιγραφή στοιχείων σε XML) - η χρήση τους απαιτείται στο SOAP.

XSD
Όταν εργάζεστε, είναι πάντα βολικό να έχετε μια τυποποιημένη περιγραφή πιθανών εγγράφων XML και να τα ελέγχετε για σωστή συμπλήρωση. Υπάρχει ένας ορισμός σχήματος XML (ή XSD για συντομία) για αυτόν τον σκοπό. Τα δύο κύρια χαρακτηριστικά του XSD για έναν ελεγκτή είναι η περιγραφή των τύπων δεδομένων και η επιβολή περιορισμών σε πιθανές τιμές. Για παράδειγμα, το στοιχείο από το προηγούμενο παράδειγμα μπορεί να γίνει προαιρετικό και να περιοριστεί σε 255 χαρακτήρες χρησιμοποιώντας XSD:

...







...

Επεκτάσεις SOAP
Στην εργασία σας, μπορεί επίσης να συναντήσετε διάφορες "επεκτάσεις" SOAP - πρότυπα όπως το WS-*. Ένα από τα πιο κοινά είναι το WS-Security, το οποίο σας επιτρέπει να εργάζεστε με κρυπτογράφηση και ηλεκτρονικές υπογραφές. Συχνά, μαζί με αυτό χρησιμοποιείται και το WS-Policy, με το οποίο μπορείτε να διαχειριστείτε τα δικαιώματα χρήσης της υπηρεσίας σας.

Παράδειγμα χρήσης του WS-Security:


Αλίκη
6S3P2EWNP3lQf+9VC3emNoT57oQ=
YF6j8V/CAqi+1nRsGLRbuZhi
2008-04-28T10:02:11Z

Όλες αυτές οι επεκτάσεις είναι αρκετά περίπλοκες δομές που δεν χρησιμοποιούνται σε κάθε υπηρεσία SOAP. λεπτομερής μελέτη τους στο αρχικό στάδιοΤο mastering testing SOAP είναι απίθανο να είναι σχετικό.

Εργαλεία

Όπως καταλαβαίνετε ήδη, το SOAP είναι ένα σοβαρό θέμα για να δουλέψετε με αυτό, πρέπει να γνωρίζετε τη θεωρία και πολλά πρότυπα. Στην πράξη, μια τέτοια πολυπλοκότητα θα οδηγούσε σε πολύ σημαντικό εργατικό κόστος (για παράδειγμα, θα έπρεπε να κοιτάτε το διάγραμμα σε ένα σημειωματάριο κάθε φορά και να στέλνετε αιτήματα με μπούκλα). Επομένως, έχουν δημιουργηθεί εργαλεία που διευκολύνουν την εργασία με το SOAP.

Επεξεργαστές XML/XSD
Ένας καλός ελεγκτής ξεκινά τις δοκιμές στο στάδιο της σύνταξης τεκμηρίωσης, επομένως είναι βολικό να χρησιμοποιείτε ειδικούς επεξεργαστές για τη δοκιμή κυκλωμάτων. Τα δύο πιο διάσημα είναι το Oxygen (cross-platform) και το Altova (μόνο για Windows). αμφότεροι πληρώνονται. Πρόκειται για πολύ ισχυρά προγράμματα που χρησιμοποιούν ενεργά οι αναλυτές όταν περιγράφουν υπηρεσίες.

Στην πρακτική μου, τρεις δυνατότητες επεξεργασίας αποδείχθηκαν χρήσιμες: οπτικοποίηση XSD, δημιουργία XML με βάση XSD και επικύρωση XML με βάση XSD.

1. Οπτικοποίηση XSDπου απαιτείται για μια οπτική αναπαράσταση του διαγράμματος, επιτρέποντάς σας να προσδιορίσετε γρήγορα τα απαιτούμενα στοιχεία και χαρακτηριστικά, καθώς και τους υπάρχοντες περιορισμούς. Για παράδειγμα, για ένα CheckTextRequest, απαιτείται το στοιχείο κειμένου και τα τρία χαρακτηριστικά είναι προαιρετικά (με το χαρακτηριστικό options να έχει προεπιλεγμένη τιμή μηδέν).

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

2. Παραγωγή XML βασισμένη σε XSDχρήσιμο όταν θέλετε να δείτε ένα έγκυρο παράδειγμα μηνύματος. Το χρησιμοποιώ για να πειραματιστώ γρήγορα με πιθανές συμπληρώσεις μηνυμάτων και να δοκιμάσω τις αποχρώσεις του τρόπου λειτουργίας των περιορισμών.

3. Μετά τη χρήση της δυνατότητας από το σημείο 2, είναι χρήσιμο να πραγματοποιηθεί Επικύρωση XML έναντι XSD– δηλαδή, ελέγξτε το μήνυμα για ορθότητα. Μαζί, οι λειτουργίες 2 και 3 σάς επιτρέπουν να εντοπίσετε δύσκολα ελαττώματα στο XSD ακόμα και όταν η ίδια η υπηρεσία είναι υπό ανάπτυξη.

Εργαλείο δοκιμής – SoapUI

Η δοκιμή SOAP περιλαμβάνει σχεδόν πάντα τη χρήση SoapUI. Μπορείτε να διαβάσετε σχετικά με τη χρήση αυτού του εργαλείου στο διαφορετικές πηγές(,), αλλά θα είναι πιο αποτελεσματικό να εξοικειωθείτε με την επίσημη τεκμηρίωση. Εντοπίζω 8 υπό όρους επίπεδα επάρκειας SoapUI:

Επίπεδο 1 – Μπορώ να στείλω αιτήματα
Μάθετε να δημιουργείτε ένα έργο με βάση το WSDL. Το SoapUI μπορεί να δημιουργήσει όλα τα απαραίτητα ερωτήματα για εσάς. Το μόνο που έχετε να κάνετε είναι να ελέγξετε ότι έχουν συμπληρωθεί σωστά και να κάνετε κλικ στο κουμπί «Αποστολή». Αφού αναπτύξετε τις δεξιότητες για τη δημιουργία έγκυρων ερωτημάτων, πρέπει να κατακτήσετε την τέχνη της δημιουργίας εσφαλμένων ερωτημάτων, προκαλώντας την εμφάνισηλάθη.

Επίπεδο 2 – Μπορώ να κάνω Test Suites και Test Cases
Ξεκινήστε να κάνετε mini-autotests. Τα κιτ δοκιμών και οι περιπτώσεις δοκιμών σάς επιτρέπουν να δημιουργείτε σενάρια δοκιμών API, να προετοιμάζετε δεδομένα για αιτήματα και να ελέγχετε αυτόματα την απάντηση που λαμβάνετε για να βεβαιωθείτε ότι ταιριάζει με την αναμενόμενη. Στην αρχή, μπορούν να χρησιμοποιηθούν απλώς ως συλλογές ερωτημάτων. Για παράδειγμα, εάν έχετε δημιουργήσει ένα ελάττωμα και θέλετε να το ελέγξετε γρήγορα αφού το διορθώσετε, μπορείτε να διαθέσετε ένα ξεχωριστό κιτ δοκιμής ειδικά για αιτήματα ελαττωμάτων.

Επίπεδο 3 – Μπορώ να γράψω ισχυρισμούς
Αφού κατακτήσετε τις δοκιμαστικές περιπτώσεις, θα σας είναι χρήσιμο να μάθετε πώς να τις κάνετε αυτόματα επαληθεύσιμες. Μετά από αυτό, δεν θα χρειάζεται πλέον να αναζητάτε πληροφορίες σχετικά με την απάντηση με τα μάτια σας: εάν υπάρχει αυτόματος έλεγχος, οι περιπτώσεις θα επισημαίνονται με πράσινο χρώμα (αν ο έλεγχος περάσει) ή κόκκινο (αν δεν έχει περάσει). Το SoapUI παρέχει ένα μεγάλο σετ πιθανούς ελέγχους(ισχυρισμοί), αλλά τα πιο βολικά και απλά είναι τα Contains και Not Contains. Με τη βοήθειά τους, μπορείτε να ελέγξετε την παρουσία συγκεκριμένου κειμένου στη ληφθείσα απάντηση. Αυτοί οι έλεγχοι υποστηρίζουν επίσης αναζητήσεις κανονικών εκφράσεων.

Επίπεδο 4 – χρησιμοποιήστε το XPath ή/και το XQuery στις Δηλώσεις
Για όσους είναι λίγο εξοικειωμένοι με τη διεπαφή χρήστη χρησιμοποιώντας το Selenium, η γλώσσα XPath είναι κάτι οικείο. Σε γενικές γραμμές, το XPath σάς επιτρέπει να αναζητήσετε στοιχεία σε ένα έγγραφο XML. Το XQuery είναι μια παρόμοια τεχνολογία που μπορεί να χρησιμοποιήσει το XPath εσωτερικά. αυτή η γλώσσα είναι πολύ πιο ισχυρή, μοιάζει με SQL. Και οι δύο αυτές γλώσσες μπορούν να χρησιμοποιηθούν σε Ισχυρισμούς. Οι έλεγχοι με τη βοήθειά τους είναι πιο στοχευμένοι και σταθεροί, επομένως οι υποθέσεις σας θα απολαμβάνουν μεγαλύτερη εμπιστοσύνη.

Επίπεδο 5 – Μπορώ να γράψω πολύπλοκα τεστ χρησιμοποιώντας ειδικά βήματα

Οι δοκιμαστικές περιπτώσεις μπορούν να περιέχουν όχι μόνο ένα αίτημα, αλλά και πολλά (για παράδειγμα, όταν θέλετε να προσομοιώσετε το τυπικό σενάριο χρήστη "δημιουργία οντότητας" → "εξαγωγή οντότητας"). Μπορεί να υπάρχουν άλλα ειδικά βήματα μεταξύ των αιτημάτων, για παράδειγμα:

  • Ιδιότητες και Μεταφορά Ιδιοτήτων (βοηθήστε την επαναχρησιμοποίηση δεδομένων και τη μεταφορά τους μεταξύ αιτημάτων).
  • Αίτημα JDBC (χρησιμοποιείται για την ανάκτηση δεδομένων από τη βάση δεδομένων).
  • Conditional Goto (σας επιτρέπει να κάνετε διακλαδώσεις ή βρόχους στη δοκιμαστική περίπτωση).
  • Εκτελέστε το TestCase (βοηθά να τοποθετήσετε ορισμένα τυπικά ερωτήματα σε ξεχωριστές περιπτώσεις δοκιμής και να τα καλέσετε όπου χρειάζεται).

Επίπεδο 6 – χρήση σεναρίων Groovy

Το SoapUI σάς επιτρέπει να γράφετε σενάρια Groovy σε διάφορα μέρη. Η απλούστερη περίπτωση είναι η δημιουργία δεδομένων στο ίδιο το ερώτημα χρησιμοποιώντας ένθετα $(=). Χρησιμοποιώ αυτά τα ένθετα όλη την ώρα:

  • $(=new Date().format("εεεε-ΜΜ-ηη'T'HH:μμ:δδ"))– να εισαγάγετε την τρέχουσα ημερομηνία και ώρα στην απαιτούμενη μορφή.
  • $(=java.util.UUID.randomUUID())– για να εισαγάγετε ένα σωστά διαμορφωμένο τυχαίο GUID.

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

Επίπεδο 7 – χρήση MockServices
Το SoapUI που βασίζεται σε WSDL μπορεί να δημιουργήσει Mock αντικείμενα. Ένα εικονικό αντικείμενο είναι η απλούστερη προσομοίωση μιας υπηρεσίας. Με τη βοήθεια των "mocks" μπορείτε να ξεκινήσετε τη σύνταξη και τον εντοπισμό σφαλμάτων δοκιμαστικών υποθέσεων ακόμη και πριν η υπηρεσία είναι πραγματικά διαθέσιμη για δοκιμή. Μπορούν επίσης να χρησιμοποιηθούν ως «αποδείξεις» για προσωρινά μη διαθέσιμες υπηρεσίες.

Επίπεδο 8 – SoapUI God
Γνωρίζετε τη διαφορά μεταξύ της επί πληρωμή και της δωρεάν έκδοσης του SoapUI και χρησιμοποιείτε το SoapUI API στον κώδικά σας. Χρησιμοποιείτε πρόσθετα και εκτελείτε υποθέσεις γραμμή εντολώνκαι/ή CI. Οι δοκιμές σας είναι απλές και εύκολες στη συντήρηση. Γενικά «έφαγες τον σκύλο» σε αυτό το όργανο. Θα ήθελα πολύ να μιλήσω με κάποιον που έχει κατακτήσει το SoapUI σε αυτό το επίπεδο. Αν είστε ένας, εγγραφείτε στα σχόλια!

Δοκιμές με Γλώσσες Προγραμματισμού

Ακολουθεί ένα παράδειγμα της εμφάνισης ενός αιτήματος στο YandexSpeller API, που έγινε με χρήση groovy-wslite:

εισαγωγή wslite.soap.*
def client = new SOAPClient ("http://speller.yandex.net/services/spellservice?WSDL")
def answer = client.send(SOAPAction: "http://speller.yandex.net/services/spellservice/checkText") (
σώμα(
CheckTextRequest("lang": "ru", "xmlns":"http://speller.yandex.net/services/spellservice") (
κείμενο ("σφάλμα")
}
}
}
assert "error" == answer.CheckTextResponse.SpellResult.error.s.text()
βεβαιωθείτε "1" == [email προστατευμένο]()

Από όσο γνωρίζω, δεν υπάρχουν ακόμη πλαίσια υψηλού επιπέδου (όπως το Rest-assured) για τη δοκιμή SOAP, αλλά πρόσφατα εμφανίστηκε ένα ενδιαφέρον εργαλείο - το καράτε. Με τη βοήθειά του, μπορείτε να περιγράψετε περιπτώσεις δοκιμής SOAP και REST με τη μορφή σεναρίων όπως Cucumber / Gherkin. Για πολλούς δοκιμαστές, η στροφή στο καράτε θα είναι ιδανική λύση, επειδή τέτοια σενάρια, όσον αφορά την πολυπλοκότητα της γραφής και των υποστηρικτικών περιπτώσεων, θα βρίσκονται κάπου στη μέση μεταξύ της χρήσης του SoapUI και της σύνταξης του δικού σας πλαισίου για τη δοκιμή του SOAP.

Σύναψη

Είναι απίθανο να θελήσετε ποτέ να δοκιμάσετε το SOAP μόνο για τον εαυτό σας (όπως θα μπορούσατε να κάνετε με το REST). Αυτό είναι ένα πρωτόκολλο βαρέων βαρών που χρησιμοποιείται σε σοβαρές εταιρικές λύσεις. Αλλά η βαρύτητα του είναι ταυτόχρονα ένα δώρο στον ελεγκτή: όλες οι τεχνολογίες που χρησιμοποιούνται είναι τυποποιημένες και υπάρχουν εργαλεία υψηλής ποιότητας για εργασία. Το μόνο που απαιτείται από τον ελεγκτή είναι η επιθυμία να τα μάθει και να τα χρησιμοποιήσει.

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

  • WSDL.
  • ΣΑΠΟΥΝΙ.
  • Επεξεργαστές XML/XSD (σε επίπεδο οπτικοποίησης XSD).
  • SoapUI στο επίπεδο 1.

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

Λυρικό μέρος.

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

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

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

Λοιπόν, μια από τις επιλογές για την επικοινωνία με τέτοιους διακομιστές είναι το SOAP. Πρωτόκολλο ανταλλαγής μηνυμάτων SOAP xml.

Πρακτικό μέρος.

Μια υπηρεσία web (αυτό είναι το όνομα του τι παρέχει ο διακομιστής και τι χρησιμοποιούν οι πελάτες) καθιστά δυνατή την επικοινωνία με τον διακομιστή με σαφώς δομημένα μηνύματα. Το γεγονός είναι ότι η υπηρεσία web δεν δέχεται δεδομένα. Η υπηρεσία Ιστού θα απαντήσει με σφάλμα σε οποιοδήποτε μήνυμα δεν συμμορφώνεται με τους κανόνες. Παρεμπιπτόντως, το σφάλμα θα είναι επίσης in μορφή xmlμε σαφή δομή (που δεν μπορεί να λεχθεί για το κείμενο του μηνύματος).

WSDL (Γλώσσα περιγραφής υπηρεσιών Ιστού). Οι κανόνες με τους οποίους συντάσσονται τα μηνύματα για την υπηρεσία web περιγράφονται επίσης χρησιμοποιώντας xml και έχουν επίσης σαφή δομή. Εκείνοι. Εάν μια υπηρεσία Ιστού παρέχει τη δυνατότητα κλήσης μιας μεθόδου, πρέπει να επιτρέπει στους πελάτες να γνωρίζουν ποιες παραμέτρους χρησιμοποιούνται για αυτήν τη μέθοδο. Εάν η υπηρεσία Ιστού αναμένει μια συμβολοσειρά για τη Μέθοδο1 ως παράμετρο και η συμβολοσειρά πρέπει να ονομάζεται Param1, τότε αυτοί οι κανόνες θα καθοριστούν στην περιγραφή της υπηρεσίας Ιστού.

Όχι μόνο μπορούν να περάσουν οι παράμετροι απλοί τύποι, αλλά και αντικείμενα, συλλογές αντικειμένων. Η περιγραφή ενός αντικειμένου καταλήγει σε μια περιγραφή κάθε στοιχείου του αντικειμένου. Εάν ένα αντικείμενο αποτελείται από πολλά πεδία, τότε περιγράφεται κάθε πεδίο, ο τύπος του, το όνομά του (ποιες είναι οι πιθανές τιμές). Τα πεδία μπορούν επίσης να είναι σύνθετου τύπου και ούτω καθεξής μέχρι να τελειώσει η περιγραφή των τύπων με απλούς - συμβολοσειρά, boolean, αριθμός, ημερομηνία... Ωστόσο, ορισμένοι συγκεκριμένοι τύποι μπορεί να αποδειχθούν απλοί, είναι σημαντικό οι πελάτες μπορεί να καταλάβει ποιες αξίες μπορεί να περιέχουν.

Για τους πελάτες, αρκεί να γνωρίζουν το url της υπηρεσίας Ιστού, το wsdl θα είναι πάντα κοντά, από το οποίο μπορείτε να πάρετε μια ιδέα για τις μεθόδους και τις παραμέτρους τους που παρέχει αυτή η υπηρεσία web.

Ποια είναι τα πλεονεκτήματα όλων αυτών των κουδουνιών και σφυρίχτρες:

  • Στα περισσότερα συστήματα, η περιγραφή των μεθόδων και των τύπων γίνεται αυτόματα. Εκείνοι. αρκεί να το πει ο προγραμματιστής στον διακομιστή αυτή τη μέθοδομπορεί να κληθεί μέσω μιας υπηρεσίας web και η περιγραφή wsdl θα δημιουργηθεί αυτόματα.
  • Η περιγραφή, η οποία έχει σαφή δομή, είναι ευανάγνωστη από κάθε πελάτη σαπουνιού. Εκείνοι. όποια και αν είναι η υπηρεσία web, ο πελάτης θα καταλάβει ποια δεδομένα λαμβάνει η υπηρεσία web. Χρησιμοποιώντας αυτήν την περιγραφή, ο πελάτης μπορεί να δημιουργήσει τη δική του εσωτερική δομή κλάσεων αντικειμένων, τα λεγόμενα. binding" και. Ως αποτέλεσμα, ο προγραμματιστής που χρησιμοποιεί την υπηρεσία web πρέπει να γράψει κάτι σαν (ψευδοκώδικας):

    NewUser:=TSoapUser.Create("Vasya","Pupkin","admin"); soap.AddUser(NewUser);

  • Αυτόματη επικύρωση.

    • επικύρωση xml. Το xml πρέπει να είναι καλοσχηματισμένο. Μη έγκυρο xml - αμέσως ένα σφάλμα στον πελάτη, αφήστε τον να το λύσει.
    • επικύρωση σχήματος. Το xml πρέπει να έχει μια συγκεκριμένη δομή. Το xml δεν ταιριάζει με το σχήμα - αμέσως ένα σφάλμα στον πελάτη, αφήστε τον να το λύσει.
    • Η επαλήθευση δεδομένων πραγματοποιείται από τον διακομιστή σαπουνιού, έτσι ώστε οι τύποι δεδομένων και οι περιορισμοί να ταιριάζουν με την περιγραφή.
  • Η εξουσιοδότηση και ο έλεγχος ταυτότητας μπορούν να υλοποιηθούν χρησιμοποιώντας ξεχωριστή μέθοδο. εγγενώς. ή χρησιμοποιώντας εξουσιοδότηση http.
  • Οι υπηρεσίες Ιστού μπορούν να λειτουργήσουν τόσο μέσω του πρωτοκόλλου σαπουνιού όσο και μέσω http, δηλαδή μέσω αιτημάτων λήψης. Δηλαδή, εάν οι παράμετροι είναι απλά δεδομένα (χωρίς δομή), τότε μπορείτε απλά να καλέσετε τη συνηθισμένη λήψη www.site.com/users.asmx/GetUser?Name=Vasia ή να δημοσιεύσετε. Ωστόσο, αυτό δεν συμβαίνει παντού και όχι πάντα.
  • ... δείτε στη Wikipedia

Υπάρχουν επίσης πολλά μειονεκτήματα:

  • Αδικαιολόγητα μεγάλο μέγεθοςμηνύματα. Λοιπόν, εδώ η ίδια η φύση του xml είναι τέτοια που η μορφή είναι περιττή, όσο περισσότερες ετικέτες, τόσο περισσότερες άχρηστες πληροφορίες. Το σαπούνι Plus προσθέτει τον πλεονασμό του. Για συστήματα intranet, το ζήτημα της κίνησης είναι λιγότερο οξύ από ό,τι για το Διαδίκτυο, επομένως το σαπούνι για τοπικά δίκτυα έχει μεγαλύτερη ζήτηση, ιδιαίτερα το Sharepoint διαθέτει μια υπηρεσία web σαπουνιού με την οποία μπορείτε να επικοινωνείτε με επιτυχία (και ορισμένους περιορισμούς).
  • Η αυτόματη αλλαγή της περιγραφής μιας υπηρεσίας Ιστού μπορεί να σπάσει όλους τους πελάτες. Λοιπόν, είναι έτσι για οποιοδήποτε σύστημα, αν δεν υποστηρίζεται η συμβατότητα με παλιές μεθόδους, όλα θα πέφτουν...
  • Όχι ένα μείον, αλλά ένα μειονέκτημα. Όλες οι κλήσεις μεθόδου πρέπει να είναι ατομικές. Για παράδειγμα, όταν εργαζόμαστε με μια βάση δεδομένων, μπορούμε να ξεκινήσουμε μια συναλλαγή, να εκτελέσουμε πολλά ερωτήματα και μετά να επαναφέρουμε ή να δεσμευτούμε. Δεν υπάρχουν συναλλαγές σε σαπούνι. Μια παράκληση, μια απάντηση, η κουβέντα τελείωσε.
  • Η ενασχόληση με την περιγραφή του τι υπάρχει στην πλευρά του διακομιστή (περιγράφονται όλα σωστά;) και τι υπάρχει στον πελάτη (τι μου περιέγραψαν εδώ;) μπορεί να είναι αρκετά δύσκολο. Υπήρχαν αρκετές φορές που έπρεπε να ασχοληθώ με την πλευρά του πελάτη και να πείσω τον προγραμματιστή του διακομιστή ότι τα δεδομένα του είχαν περιγραφεί λανθασμένα, αλλά δεν μπορούσε να καταλάβει τίποτα σχετικά με αυτό, γιατί η αυτόματη δημιουργία και δεν έπρεπε, είναι θέμα λογισμικό. Και το σφάλμα, φυσικά, ήταν στον κώδικα της μεθόδου ο προγραμματιστής απλά δεν το είδε.
  • Η πρακτική δείχνει ότι οι προγραμματιστές διαδικτυακών υπηρεσιών απέχουν τρομερά από τους ανθρώπους που χρησιμοποιούν αυτές τις υπηρεσίες Ιστού. Σε απάντηση οποιουδήποτε αιτήματος (ισχύει από έξω), μπορεί να εμφανιστεί ένα ακατανόητο σφάλμα "Σφάλμα 5. Όλα είναι άσχημα". Όλα εξαρτώνται από τη συνείδηση ​​των προγραμματιστών :)
  • Είμαι σίγουρη ότι ακόμα δεν θυμάμαι κάτι...

Για παράδειγμα, υπάρχει μια ανοιχτή υπηρεσία web belavia:

  • http://86.57.245.235/TimeTable/Service.asmx - σημείο εισόδου, υπάρχει επίσης μια περιγραφή κειμένου των μεθόδων για προγραμματιστές τρίτων.
  • http://86.57.245.235/TimeTable/Service.asmx?WSDL - περιγραφή wsdl των μεθόδων και των τύπων δεδομένων που λαμβάνονται και επιστρέφονται.
  • http://86.57.245.235/TimeTable/Service.asmx?op=GetAirportsList - περιγραφή συγκεκριμένη μέθοδομε ένα παράδειγμα του τύπου της αίτησης xml και της απάντησης xml.

Μπορείτε να δημιουργήσετε και να στείλετε με μη αυτόματο τρόπο ένα αίτημα όπως:

POST /TimeTable/Service.asmx HTTP/1.1 Κεντρικός υπολογιστής: 86.57.245.235 Τύπος περιεχομένου: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://webservices.belavia.by/GetAirportsList" ru

η απάντηση θα έρθει:

HTTP/1.1 200 OK Ημερομηνία: Δευτ., 30 Σεπ 2013 00:06:44 GMT Διακομιστής: Microsoft-IIS/6.0 X-Powered-By: ASP.NET X-AspNet-Έκδοση: 4.0.30319 Cache-Control: ιδιωτικό, μέγ. -age=0 Τύπος περιεχομένου: κείμενο/xml; charset=utf-8 Περιεχόμενο-Μήκος: 2940

Υ.Γ. Παλαιότερα άνοιγε η υπηρεσία web της Aeroflot, αλλά αφού το 1C πρόσθεσε υποστήριξη σαπουνιού στο 8ku, μια δέσμη δοκιμαστών beta 1C την εγκατέστησαν με επιτυχία. Τώρα κάτι έχει αλλάξει εκεί (δεν ξέρω τη διεύθυνση, μπορείτε να το αναζητήσετε αν σας ενδιαφέρει).
Αποποίηση ευθυνών ZZY. Μίλησε σε καθημερινό επίπεδο. Μπορείς να κλωτσήσεις.



Συνιστούμε να διαβάσετε

Κορυφή