Προγραμματισμός

Υπηρεσίες Web στο Java SE, Μέρος 1: Επισκόπηση εργαλείων

Η Java Standard Edition (SE) 6 περιελάμβανε υποστήριξη για υπηρεσίες Web. Αυτή η ανάρτηση ξεκινά μια σειρά τεσσάρων τμημάτων σε υπηρεσίες Web στο Java SE εξηγώντας ποιες είναι οι υπηρεσίες Web και επισκόπηση της υποστήριξης της Java SE για αυτές. Οι μελλοντικές δημοσιεύσεις θα χρησιμοποιήσουν αυτήν την υποστήριξη για τη δημιουργία υπηρεσιών Web με βάση το SOAP και το RESTful και θα καλύπτουν επίσης προηγμένα θέματα υπηρεσιών Web.

Java XML και JSON

Σε αυτήν τη σειρά, υποθέτω ότι καταλαβαίνετε XML και JSON. Εάν όχι, ίσως θέλετε να δείτε το δικό μου Java XML και JSON βιβλίο, το οποίο διαφημίζεται στο τέλος αυτής της ανάρτησης.

Τι είναι οι υπηρεσίες Ιστού;

Η Wikipedia ορίζει Υπηρεσία Ιστού ως "ένα σύστημα λογισμικού που έχει σχεδιαστεί για να υποστηρίζει τη διαλειτουργική αλληλεπίδραση μεταξύ μηχανών σε μηχανή μέσω ενός δικτύου." Ένας πιο λεπτομερής ορισμός μπορεί να επιτευχθεί καθορίζοντας πρώτα τα μέρη αυτού του όρου:

  • Ιστός: Ένα τεράστιο διασυνδεδεμένο δίκτυο πόρων, όπου a πόρος είναι μια πηγή δεδομένων με όνομα Uniform Resource Identifier (URI) όπως ένα έγγραφο που βασίζεται σε PDF, μια ροή βίντεο, μια ιστοσελίδα ή ακόμα και μια εφαρμογή. Μπορείτε να αποκτήσετε πρόσβαση σε αυτούς τους πόρους χρησιμοποιώντας τυπικά πρωτόκολλα Διαδικτύου όπως το HyperText Transfer Protocol (HTTP) ή το Simple Mail Transfer Protocol (SMTP).
  • Υπηρεσία: Μια εφαρμογή που βασίζεται σε διακομιστή ή ένα στοιχείο λογισμικού που εκθέτει έναν πόρο σε πελάτες μέσω ανταλλαγής μηνυμάτων σύμφωνα με ένα μοτίβο ανταλλαγής μηνυμάτων (MEP). Ο ευρωβουλευτής αίτησης-απάντησης είναι τυπικός.

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

Σχήμα 1. Ένας πελάτης αποκτά πρόσβαση σε έναν πόρο ανταλλάσσοντας μηνύματα με μια υπηρεσία Web

Επιχειρήσεις και υπηρεσίες Ιστού

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

Οι υπηρεσίες Ιστού μπορούν να ταξινομηθούν ως απλές ή περίπλοκες. Οι απλές υπηρεσίες Web δεν αλληλεπιδρούν με άλλες υπηρεσίες Web (π.χ., μια αυτόνομη εφαρμογή που βασίζεται σε διακομιστή με μία μόνο λειτουργία που επιστρέφει την τρέχουσα ώρα για μια καθορισμένη ζώνη ώρας). Αντιθέτως, πολύπλοκες υπηρεσίες Ιστού αλληλεπιδρούν συχνά με άλλες υπηρεσίες Ιστού. Για παράδειγμα, μια γενικευμένη υπηρεσία Ιστού κοινωνικού δικτύου μπορεί να αλληλεπιδράσει με τις υπηρεσίες Twitter και Facebook Web για να αποκτήσει και να επιστρέψει στον πελάτη της όλες τις πληροφορίες Twitter και Facebook για ένα συγκεκριμένο άτομο. Οι σύνθετες υπηρεσίες Web είναι επίσης γνωστές ως mashups γιατι αυτοι πολτός (συνδυασμός) δεδομένων από πολλές υπηρεσίες Web.

Αρχιτεκτονική Προσανατολισμού Υπηρεσιών

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

Υπηρεσίες διαδικτύου με βάση το σαπούνι

ΕΝΑ Υπηρεσία Web με βάση το σαπούνι είναι μια ευρέως χρησιμοποιούμενη κατηγορία υπηρεσιών Web που βασίζεται ΣΑΠΟΥΝΙ, μια γλώσσα XML για ορισμό μηνύματα (αφηρημένες προσκλήσεις συνάρτησης ή οι απαντήσεις τους) που μπορούν να γίνουν κατανοητές και από τα δύο άκρα μιας σύνδεσης δικτύου. Μια ανταλλαγή μηνυμάτων SOAP ονομάζεται λειτουργία, που αντιστοιχεί σε μια κλήση συνάρτησης και την απόκρισή της, και η οποία απεικονίζεται στο Σχήμα 2.

Σχήμα 2. Μια λειτουργία υπηρεσίας Web περιλαμβάνει μηνύματα εισόδου και εξόδου

Οι σχετικές λειτουργίες ομαδοποιούνται συχνά σε διεπαφή, η οποία είναι εννοιολογικά παρόμοια με μια διεπαφή Java. ΕΝΑ δεσμευτικός παρέχει συγκεκριμένες λεπτομέρειες για το πώς μια διεπαφή συνδέεται με ένα πρωτόκολλο ανταλλαγής μηνυμάτων (ιδιαίτερα το SOAP) για την επικοινωνία εντολών, κωδικών σφάλματος και άλλων στοιχείων μέσω του καλωδίου. Η δεσμευτική και α διεύθυνση δικτύου (διεύθυνση IP και θύρα) Το URI είναι γνωστό ως τελικό σημείο, και μια συλλογή τελικών σημείων είναι Υπηρεσία Ιστού. Το σχήμα 3 παρουσιάζει αυτήν την αρχιτεκτονική.

Σχήμα 3. Οι διεπαφές των λειτουργιών είναι προσβάσιμες μέσω των τελικών σημείων τους

Το σαπούνι χρησιμοποιείται συχνά με Web Services Περιγραφή Γλώσσα (WSDL, προφέρεται whiz-dull), μια γλώσσα XML για τον ορισμό των λειτουργιών μιας υπηρεσίας Web. ΕΝΑ Έγγραφο WSDL είναι μια επίσημη σύμβαση μεταξύ μιας υπηρεσίας Web που βασίζεται σε SOAP και των πελατών της, παρέχοντας όλες τις λεπτομέρειες για την αλληλεπίδραση με την υπηρεσία Web. Αυτό το έγγραφο σάς επιτρέπει να ομαδοποιείτε μηνύματα σε λειτουργίες και λειτουργίες σε διεπαφές. Σας επιτρέπει επίσης να ορίσετε μια σύνδεση για κάθε διεπαφή καθώς και τη διεύθυνση του τελικού σημείου.

Εκτός από την υποστήριξη εγγράφων WSDL, οι υπηρεσίες Web που βασίζονται σε SOAP έχουν τις ακόλουθες ιδιότητες:

  • Η ικανότητα αντιμετώπισης σύνθετων μη λειτουργικών απαιτήσεων όπως η ασφάλεια και οι συναλλαγές: Αυτές οι απαιτήσεις διατίθενται μέσω διαφόρων προδιαγραφών. Για την προώθηση της διαλειτουργικότητας μεταξύ αυτών των προδιαγραφών, το Οργανισμός Διαλειτουργικότητας Υπηρεσιών Ιστού (WS-I) (μια κοινοπραξία βιομηχανίας) ιδρύθηκε. Το WS-I έχει δημιουργήσει ένα σύνολο προφίλ, όπου a Προφίλ είναι ένα σύνολο ονομαστικών προδιαγραφών υπηρεσίας Ιστού σε συγκεκριμένα επίπεδα αναθεώρησης, μαζί με ένα σύνολο οδηγιών εφαρμογής και διαλειτουργικότητας που προτείνουν πώς μπορούν να χρησιμοποιηθούν οι προδιαγραφές για την ανάπτυξη διαλειτουργικών υπηρεσιών Ιστού. Για παράδειγμα, το πρώτο προφίλ, Βασικό προφίλ WS-I 1.0, αποτελείται από το ακόλουθο σύνολο μη ιδιοκτησιακών προδιαγραφών υπηρεσίας Ιστού:
  • Σαπούνι 1.1
  • WSDL 1.1
  • Καθολική περιγραφή Ανακάλυψη και ενοποίηση (UDDI) 2.0
  • XML 1.0 (Δεύτερη Έκδοση)
  • Σχέδιο XML Μέρος 1: Δομές
  • Σχήμα XML Μέρος 2: Τύποι δεδομένων
  • RFC2246: Η έκδοση 1.0 του πρωτοκόλλου ασφαλείας επιπέδου μεταφοράς
  • RFC2459: Πιστοποιητικό υποδομής δημόσιου κλειδιού και προφίλ CRL Διαδικτύου X.509
  • RFC2616: Πρωτόκολλο μεταφοράς HyperText 1.1
  • RFC2818: HTTP μέσω TLS
  • RFC2965: Μηχανισμός διαχείρισης κατάστασης HTTP
  • Η έκδοση 3.0 του Secure Sockets Layer Protocol

Πρόσθετα παραδείγματα προφίλ περιλαμβάνουν το Βασικό Προφίλ Ασφάλειας WS-I και το Απλό Δέσιμο προφίλ σαπουνιού. Για περισσότερες πληροφορίες σχετικά με αυτά και άλλα προφίλ, επισκεφθείτε τον ιστότοπο WS-I. Το Java SE υποστηρίζει το Βασικό προφίλ WS-I.

  • Η δυνατότητα αλληλεπίδρασης με μια υπηρεσία Web ασύγχρονα: Οι πελάτες υπηρεσιών διαδικτύου θα πρέπει να μπορούν να αλληλεπιδρούν με μια υπηρεσία Web με ασύγχρονο τρόπο χωρίς αποκλεισμό. Η υποστήριξη ασύγχρονης επίκλησης από πελάτες από λειτουργίες υπηρεσίας Web παρέχεται στο Java SE.

Οι υπηρεσίες Web που βασίζονται σε SOAP εκτελούνται σε περιβάλλον που περιλαμβάνει έναν αιτούντα υπηρεσίες (τον πελάτη), έναν πάροχο υπηρεσιών και έναν μεσίτη υπηρεσιών. Αυτό το περιβάλλον φαίνεται στο σχήμα 4.

Σχήμα 4. Μια υπηρεσία Web που βασίζεται σε SOAP περιλαμβάνει έναν αιτούντα υπηρεσιών, έναν πάροχο υπηρεσιών και έναν μεσίτη υπηρεσιών (π.χ. UDDI)

Ο αιτών την υπηρεσία, συνήθως μια εφαρμογή πελάτη (π.χ. ένα πρόγραμμα περιήγησης στο Web) ή ίσως μια άλλη υπηρεσία Web, εντοπίζει πρώτα τον πάροχο υπηρεσιών με κάποιο τρόπο. Για παράδειγμα, ο αιτών την υπηρεσία ενδέχεται να στείλει ένα έγγραφο WSDL σε έναν μεσίτη υπηρεσιών, ο οποίος αποκρίνεται με ένα άλλο έγγραφο WSDL που προσδιορίζει την τοποθεσία του παρόχου υπηρεσιών. Στη συνέχεια, ο αιτών την υπηρεσία επικοινωνεί με τον πάροχο υπηρεσιών μέσω μηνυμάτων SOAP.

Οι πάροχοι υπηρεσιών πρέπει να δημοσιεύονται, ώστε άλλοι να μπορούν να τον εντοπίσουν και να τους χρησιμοποιήσουν. Τον Αύγουστο του 2000, μια ανοιχτή βιομηχανική πρωτοβουλία γνωστή ως Καθολική περιγραφή, ανακάλυψη και ενοποίηση (UDDI) ξεκίνησε για να επιτρέπει στις επιχειρήσεις να δημοσιεύουν λίστες υπηρεσιών, να ανακαλύπτουν η μία την άλλη και να καθορίζουν πώς αλληλεπιδρούν οι υπηρεσίες ή οι εφαρμογές λογισμικού μέσω του Διαδικτύου. Ωστόσο, αυτό το ανεξάρτητο από πλατφόρμα, μητρώο που βασίζεται σε XML δεν υιοθετήθηκε ευρέως και προς το παρόν δεν χρησιμοποιείται. Πολλοί προγραμματιστές διαπίστωσαν ότι το UDDI είναι υπερβολικά περίπλοκο και δεν έχει λειτουργικότητα και επέλεξε εναλλακτικές λύσεις όπως η δημοσίευση των πληροφοριών σε έναν ιστότοπο. Για παράδειγμα, η Google κάποτε έκανε τις δημόσιες υπηρεσίες Ιστού της (π.χ. Χάρτες Google) διαθέσιμες στη διεύθυνση //code.google.com/more/.

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

Υπηρεσίες Big Web

Οι υπηρεσίες Web με βάση το SOAP είναι επίσης γνωστές ως μεγάλες υπηρεσίες Web επειδή βασίζονται σε πολλές προδιαγραφές, όπως τα προφίλ WS-I που αναφέρθηκαν παραπάνω.

RESTful υπηρεσίες Ιστού

Οι υπηρεσίες Web που βασίζονται σε SOAP μπορούν να παραδοθούν μέσω πρωτοκόλλων όπως HTTP, SMTP, FTP και Blok Extensible Exchange Protocol (BEEP). Η παράδοση μηνυμάτων SOAP μέσω HTTP μπορεί να θεωρηθεί ως ένα ειδικό είδος υπηρεσίας RESTful Web.

ΕΝΑ RESTful Υπηρεσία Ιστού είναι μια ευρέως χρησιμοποιούμενη κατηγορία υπηρεσιών Web που βασίζεται Μεταγραφική αντιπροσωπευτική κατάσταση (REST), ένα στυλ αρχιτεκτονικής λογισμικού για διανομή συστήματα υπερμέσων (συστήματα στα οποία εικόνες, κείμενο και άλλοι πόροι βρίσκονται γύρω από δίκτυα και είναι προσβάσιμα μέσω υπερσυνδέσμων). Το σύστημα υπερμέσων ενδιαφέροντος σε ένα πλαίσιο υπηρεσιών Web είναι το World Wide Web.

Ιστορικό REST

Ο Roy Fielding (κύριος συγγραφέας των προδιαγραφών HTTP εκδόσεις 1.0 και 1.1, και συνιδρυτής του Apache Software Foundation) εισήγαγε και καθόρισε το REST στη διδακτορική του διατριβή το 2000. Ο Fielding οραματίστηκε το REST ως το αρχιτεκτονικό στυλ του Ιστού, παρόλο που έγραψε πολύ καιρό μετά το Διαδίκτυο ήταν μια συνεχιζόμενη ανησυχία. Το REST θεωρείται ευρέως ως η λύση σε ό, τι θεωρείται η αυξανόμενη πολυπλοκότητα των υπηρεσιών Ιστού με βάση το SOAP.

Το κεντρικό μέρος του REST είναι ο πόρος με δυνατότητα αναγνώρισης URI. Το REST προσδιορίζει πόρους από τους τύπους επεκτάσεων αλληλογραφίας πολλαπλών χρήσεων (MIME) (όπως κείμενο / xml). Επίσης, οι πόροι έχουν καταστάσεις που συλλαμβάνονται από τις αναπαραστάσεις τους. Όταν ένας πελάτης ζητά έναν πόρο από μια υπηρεσία RESTful Web, η υπηρεσία στέλνει μια παράσταση τύπου MIME στον πόρο στον πελάτη.

Οι πελάτες χρησιμοποιούν ρήματα POST, GET, PUT και DELETE HTTP για να ανακτήσουν τις αναπαραστάσεις πόρων και να χειριστούν πόρους. Το REST χαρτογραφεί αυτά τα ρήματα στη βάση δεδομένων Δημιουργία, Ανάγνωση, Ενημέρωση και Διαγραφή (CRUD), ως εξής:

  • POST: Δημιουργία νέου πόρου βάσει δεδομένων αιτήματος.
  • GET: Διαβάστε τον υπάρχοντα πόρο χωρίς να παράγετε παρενέργειες (μην τροποποιήσετε τον πόρο).
  • PUT: Ενημέρωση υπάρχοντος πόρου με δεδομένα αιτήματος.
  • ΔΙΑΓΡΑΦΗ: Διαγραφή υπάρχοντος πόρου.

Κάθε ρήμα ακολουθείται από ένα URI που προσδιορίζει τον πόρο. (Αυτή η εξαιρετικά απλή προσέγγιση είναι ουσιαστικά ασυμβίβαστη με την προσέγγιση του SOAP για την αποστολή κωδικοποιημένων μηνυμάτων σε έναν μόνο πόρο.) Το URI μπορεί να αναφέρεται σε μια συλλογή, όπως //javajeff.ca/libraryή σε ένα στοιχείο της συλλογής, όπως //javajeff.ca/library/9781484219157 - αυτά τα URI είναι μόνο εικόνες.

Για αιτήματα POST και PUT, τα δεδομένα πόρων που βασίζονται σε XML μεταβιβάζονται ως το κύριο μέρος του αιτήματος. Για παράδειγμα, θα μπορούσατε να ερμηνεύσετε POST //javajeff.ca/library HTTP / 1.1 (όπου HTTP / 1.1 περιγράφει την έκδοση HTTP του αιτούντος) ως αίτημα για εισαγωγή ΘΕΣΗΤα δεδομένα XML στο //javajeff.ca/library πόρος συλλογής.

Για αιτήματα GET και DELETE, τα δεδομένα συνήθως διαβιβάζονται ως συμβολοσειρές ερωτημάτων, όπου a συμβολοσειρά ερωτήματος είναι αυτό το τμήμα ενός URI που ξεκινά με ένα ? χαρακτήρας. Για παράδειγμα, πού GET //javajeff.ca/library ενδέχεται να επιστρέψει μια λίστα αναγνωριστικών για όλα τα βιβλία στο α βιβλιοθήκη πόρος, GET //javajeff.ca/library?isbn=9781484219157 πιθανόν να επιστρέψει μια αναπαράσταση του πόρου του βιβλίου του οποίου η συμβολοσειρά ερωτήματος προσδιορίζει τον Διεθνή Πρότυπο Βιβλίο (ISBN) 9781484219157.

Μάθετε περισσότερα σχετικά με τις αντιστοιχίσεις HTTP-CRUD

Για μια πλήρη περιγραφή των αντιστοιχιών μεταξύ των ρήματα HTTP και των αντίστοιχων CRUD τους, ανατρέξτε στον πίνακα "Μέθοδοι HTTP RESTful Web Service" στην καταχώριση της Αντιπροσωπευτικής Κατάστασης Μεταφοράς της Wikipedia.

Το REST βασίζεται επίσης στους τυπικούς κωδικούς απόκρισης HTTP, όπως 404 (ο πόρος που ζητήθηκε δεν βρέθηκε) και 200 ​​(η λειτουργία πόρων ήταν επιτυχής), μαζί με τους τύπους MIME (όταν ανακτώνται πόροι).

RESTful έναντι μεγάλων υπηρεσιών Ιστού

Εάν αναρωτιέστε εάν θα αναπτύξετε μια υπηρεσία Ιστού χρησιμοποιώντας SOAP ή REST, ρίξτε μια ματιά στις Υπηρεσίες Web RESTful έναντι Υπηρεσιών Ιστού "Big": Λήψη της σωστής αρχιτεκτονικής απόφασης.

Υποστήριξη υπηρεσίας Ιστού στο Java SE

Πριν από το Java SE 6, οι υπηρεσίες Web που βασίζονται σε Java αναπτύχθηκαν αποκλειστικά με το Java Enterprise Edition (EE) SDK. Παρόλο που το Java EE προτιμάται για την ανάπτυξη υπηρεσιών Web από άποψη παραγωγής, επειδή οι διακομιστές που βασίζονται σε Java EE παρέχουν πολύ υψηλό βαθμό επεκτασιμότητας, υποδομή ασφαλείας, εγκαταστάσεις παρακολούθησης και ούτω καθεξής, την επαναλαμβανόμενη ανάπτυξη μιας υπηρεσίας Web σε Java EE Το δοχείο ήταν συχνά χρονοβόρο, επιβραδύνοντας την ανάπτυξη. Το Java SE 6 απλοποίησε και επιτάχυνε την ανάπτυξη υπηρεσιών Web προσθέτοντας API, σχολιασμούς, εργαλεία και έναν ελαφρύ διακομιστή HTTP (για ανάπτυξη υπηρεσιών Web σε έναν απλό διακομιστή Web και δοκιμή τους σε αυτό το περιβάλλον) στον πυρήνα του.

API

Το Java SE παρέχει αρκετά API που υποστηρίζουν υπηρεσίες Web. Μαζί με διάφορα API JAXP (SAX, DOM, StAX και ούτω καθεξής) στα οποία συζητώ Java XML και JSON, Το Java SE παρέχει τα API JAX-WS, JAXB και SAAJ: