Perkhidmatan web di Java SE, Bahagian 1: Gambaran keseluruhan alat

Java Standard Edition (SE) 6 termasuk sokongan untuk perkhidmatan Web. Catatan ini memulakan siri empat bahagian pada perkhidmatan Web di Java SE dengan menjelaskan apa itu perkhidmatan Web dan melihat sokongan Java SE untuk mereka. Catatan masa depan akan menggunakan sokongan ini untuk membina perkhidmatan Web berasaskan SOAP dan RESTful, dan juga akan merangkumi topik perkhidmatan Web lanjutan.

Java XML dan JSON

Dalam siri ini, saya menganggap bahawa anda memahami XML dan JSON. Sekiranya tidak, anda mungkin ingin melihat buku Java XML dan JSON saya , yang diiklankan pada akhir catatan ini.

Apa itu perkhidmatan web?

Wikipedia mendefinisikan perkhidmatan Web sebagai "sistem perisian yang dirancang untuk menyokong interaksi mesin-ke-mesin yang saling beroperasi melalui rangkaian." Definisi yang lebih terperinci dapat diperoleh dengan terlebih dahulu menentukan bahagian-bahagian istilah ini:

  • Web: Jaringan sumber yang sangat besar yang saling berkaitan, di mana sumbernya adalah sumber data yang dinamakan Uniform Resource Identifier (URI) seperti dokumen berasaskan PDF, aliran video, halaman Web, atau bahkan aplikasi. Sumber-sumber ini dapat diakses dengan menggunakan protokol Internet standard seperti HyperText Transfer Protocol (HTTP) atau Simple Mail Transfer Protocol (SMTP).
  • Perkhidmatan: Komponen aplikasi atau perisian berasaskan pelayan yang memperlihatkan sumber daya kepada klien melalui pertukaran mesej mengikut corak pertukaran mesej (MEP). MEP permintaan-respons adalah tipikal.

Mengingat definisi ini, perkhidmatan Web adalah komponen aplikasi / perisian berasaskan pelayan yang memperlihatkan sumber berasaskan Web kepada klien melalui pertukaran mesej. Mesej-mesej ini mungkin diformat menurut Extensible Markup Language (XML) atau JavaScript Object Notation (JSON). Juga, mesej ini dapat dianggap sebagai fungsi fungsi perkhidmatan Web dan menerima hasil permintaan. Gambar 1 menggambarkan pertukaran mesej ini.

Gambar 1. Pelanggan mengakses sumber dengan menukar mesej dengan perkhidmatan Web

Perniagaan dan perkhidmatan Web

Perniagaan menggunakan perkhidmatan Web kerana mereka mengatasi masalah middleware tradisional (misalnya, mahal untuk memperoleh dan menyelenggara, tidak dapat berkomunikasi dengan perisian backend dan aplikasi klien di seluruh Internet, dan tidak fleksibel) dengan didasarkan pada standard bebas dan terbuka, oleh kebolehlanjutannya, dengan melibatkan Web, dan dengan fleksibel. Selain itu, mereka membantu perniagaan yang lebih besar untuk mengekalkan pelaburan mereka yang sering ketara dalam perisian warisan.

Perkhidmatan web boleh dikelaskan sebagai sederhana atau kompleks. Perkhidmatan Web sederhana tidak berinteraksi dengan perkhidmatan Web lain (misalnya, aplikasi berasaskan pelayan yang berdiri sendiri dengan satu fungsi yang mengembalikan masa semasa untuk zon waktu yang ditentukan). Sebaliknya, perkhidmatan Web yang kompleks sering berinteraksi dengan perkhidmatan Web yang lain. Sebagai contoh, perkhidmatan Web rangkaian sosial yang umum dapat berinteraksi dengan perkhidmatan Web Twitter dan Facebook untuk mendapatkan dan mengembalikan kepada pelanggannya semua Twitter dan semua maklumat Facebook untuk individu tertentu. Perkhidmatan Web Complex juga dikenali sebagai mashup kerana mereka mash (menggabungkan) data daripada perkhidmatan Web berbilang.

Senibina berorientasikan perkhidmatan

Perkhidmatan web adalah implementasi Service-Oriented Architecture (SOA) , yang merupakan gaya reka bentuk perisian di mana perkhidmatan diberikan kepada berbagai komponen perisian melalui protokol komunikasi melalui rangkaian. Fikirkan SOA sebagai satu set prinsip reka bentuk atau kerangka kerja untuk menerapkan logik perniagaan sebagai perkhidmatan yang dapat digunakan semula yang dapat digabungkan dengan cara yang berbeza untuk memenuhi keperluan perniagaan yang terus berkembang.

Perkhidmatan web berasaskan sabun

A perkhidmatan web berasaskan SOAP adalah kategori perkhidmatan web digunakan secara meluas yang berdasarkan SOAP , bahasa XML untuk menentukan mesej (doa fungsi abstrak atau jawapan mereka) yang boleh difahami oleh kedua-dua hujung sambungan rangkaian. Pertukaran mesej SOAP disebut operasi , yang sesuai dengan panggilan fungsi dan responsnya, dan yang digambarkan dalam Gambar 2.

Gambar 2. Operasi perkhidmatan Web melibatkan mesej input dan output

Operasi yang berkaitan sering dikelompokkan ke antara muka , yang secara konseptual serupa dengan antara muka Java. A mengikat menyediakan maklumat konkrit tentang bagaimana antara muka adalah terikat untuk protokol pesanan (terutamanya SOAP) untuk berkomunikasi arahan, kod ralat, dan lain-lain lebih wayar. Mengikat dan alamat rangkaian ( alamat IP dan port) URI dikenal sebagai titik akhir , dan kumpulan titik akhir adalah perkhidmatan Web . Rajah 3 menunjukkan seni bina ini.

Rajah 3. Antaramuka operasi dapat dicapai melalui titik akhir mereka

SOAP sering digunakan dengan Bahasa Penerangan Perkhidmatan Web (WSDL, diucapkan whiz-dull) , bahasa XML untuk menentukan operasi perkhidmatan Web. A dokumen WSDL adalah kontrak rasmi antara perkhidmatan Web berasaskan SOAP dan pelanggan, menyediakan semua butiran untuk berinteraksi dengan perkhidmatan Web. Dokumen ini membolehkan anda mengumpulkan mesej ke dalam operasi dan operasi ke antara muka. Ini juga membolehkan anda menentukan pengikatan untuk setiap antara muka dan juga alamat titik akhir.

Selain menyokong dokumen WSDL, perkhidmatan Web berasaskan SOAP mempunyai sifat berikut:

  • Keupayaan untuk menangani keperluan tidak berfungsi yang kompleks seperti keselamatan dan transaksi: Keperluan ini disediakan melalui pelbagai spesifikasi. Untuk mempromosikan interoperabiliti antara spesifikasi ini, Organisasi Interoperabiliti Perkhidmatan Web (WS-I) (sebuah konsortium industri) dibentuk. WS-I telah menetapkan satu set profil, di mana profil adalah sekumpulan spesifikasi perkhidmatan Web bernama pada tingkat revisi tertentu, bersama dengan seperangkat panduan pelaksanaan dan interoperabilitas yang mengesyorkan bagaimana spesifikasi tersebut dapat digunakan untuk mengembangkan layanan Web yang dapat beroperasi. Sebagai contoh, profil pertama, Profil Asas WS-I 1.0 , terdiri daripada set spesifikasi perkhidmatan Web bukan milik berikut:
  • Sabun 1.1
  • WSDL 1.1
  • Penemuan Penerangan Sejagat dan Integrasi (UDDI) 2.0
  • XML 1.0 (Edisi Kedua)
  • Skema XML Bahagian 1: Struktur
  • Skema XML Bahagian 2: Jenis Data
  • RFC2246: Protokol Keselamatan Lapisan Pengangkutan Versi 1.0
  • RFC2459: Sijil Infrastruktur Kunci Awam Internet dan Profil CRL
  • RFC2616: Protokol Pemindahan Hiperteks 1.1
  • RFC2818: HTTP melalui TLS
  • RFC2965: Mekanisme Pengurusan Negeri HTTP
  • Protokol Lapisan Soket Selamat Versi 3.0

Contoh profil tambahan termasuk Profil Keselamatan Asas WS-I dan Profil Pengikat SOAP Mudah. Untuk maklumat lebih lanjut mengenai profil ini dan profil lain, lawati laman web WS-I. Java SE menyokong Profil Asas WS-I.

  • Keupayaan untuk berinteraksi dengan perkhidmatan Web secara serentak: Pelanggan perkhidmatan web seharusnya dapat berinteraksi dengan perkhidmatan Web dengan cara yang tidak menyekat dan tidak segerak. Sokongan pemanggil tidak serentak pelanggan untuk operasi perkhidmatan Web disediakan di Java SE.

Perkhidmatan Web berasaskan SOAP dijalankan dalam lingkungan yang merangkumi pemohon perkhidmatan (pelanggan), penyedia perkhidmatan, dan broker perkhidmatan. Persekitaran ini ditunjukkan dalam Rajah 4.

Gambar 4. Perkhidmatan Web berasaskan SOAP melibatkan pemohon perkhidmatan, penyedia perkhidmatan, dan broker perkhidmatan (misalnya, UDDI)

Pemohon perkhidmatan, biasanya aplikasi pelanggan (misalnya, penyemak imbas Web), atau mungkin perkhidmatan Web lain, terlebih dahulu mencari penyedia perkhidmatan dengan cara tertentu. Sebagai contoh, pemohon perkhidmatan mungkin menghantar dokumen WSDL ke broker perkhidmatan, yang bertindak balas dengan dokumen WSDL lain yang mengenal pasti lokasi penyedia perkhidmatan. Pemohon perkhidmatan kemudian berkomunikasi dengan penyedia perkhidmatan melalui pesanan SOAP.

Penyedia perkhidmatan perlu diterbitkan supaya orang lain dapat mencari dan menggunakannya. Pada bulan Ogos 2000, inisiatif industri terbuka yang dikenali sebagai Universal Description, Discovery, and Integration (UDDI) dilancarkan untuk membolehkan perniagaan menerbitkan senarai perkhidmatan, saling menemukan, dan menentukan bagaimana perkhidmatan atau aplikasi perisian berinteraksi melalui Internet. Walau bagaimanapun, pendaftaran berasaskan XML yang bebas platform ini tidak banyak digunakan dan pada masa ini tidak digunakan. Banyak pembangun mendapati UDDI terlalu rumit dan kurang berfungsi, dan memilih alternatif seperti menerbitkan maklumat di laman web. Sebagai contoh, Google pernah menyediakan perkhidmatan Web awamnya (misalnya, Peta Google) yang tersedia di //code.google.com/more/.

Mesej SOAP yang mengalir antara pemohon perkhidmatan dan penyedia perkhidmatan sering tidak terlihat, disampaikan sebagai permintaan dan respons antara perpustakaan SOAP dari tumpukan protokol perkhidmatan Web mereka. Walau bagaimanapun, adalah mungkin untuk mengakses mesej ini secara langsung, seperti yang akan anda ketahui kemudian dalam siri ini.

Perkhidmatan Web besar

Perkhidmatan Web berasaskan SOAP juga dikenali sebagai perkhidmatan Web besar kerana berdasarkan pada banyak spesifikasi, seperti profil WS-I yang disebutkan sebelumnya.

Perkhidmatan web TERBAIK

Perkhidmatan Web berasaskan SOAP dapat disampaikan melalui protokol seperti HTTP, SMTP, FTP, dan Blok Extensible Exchange Protocol (BEEP). Menyampaikan pesanan SOAP melalui HTTP dapat dilihat sebagai jenis perkhidmatan RESTful Web khas.

A RESTful Web Service adalah kategori digunakan secara meluas Web perkhidmatan yang berdasarkan Transfer perwakilan Negeri (REST) , gaya seni bina perisian untuk diedarkan sistem hipermedia (sistem di mana imej, teks, dan sumber-sumber yang lain terletak di area rangkaian dan boleh diakses melalui hyperlink) . Sistem hipermedia yang menarik dalam konteks perkhidmatan Web adalah World Wide Web.

Sejarah REST

Roy Fielding (pengarang utama spesifikasi HTTP versi 1.0 dan 1.1, dan pendiri Apache Software Foundation) memperkenalkan dan mendefinisikan REST dalam disertasi doktoralnya pada tahun 2000. Fielding membayangkan REST sebagai gaya seni bina Web, walaupun dia menulis lama setelah Web menjadi perhatian berterusan. REST secara meluas dianggap sebagai penyelesaian untuk apa yang dianggap sebagai kerumitan perkhidmatan Web berasaskan SOAP yang semakin meningkat.

Bahagian tengah REST adalah sumber yang dapat dikenal pasti URI. REST mengenal pasti sumber berdasarkan jenis Pelanjutan Mel Internet Serbaguna (MIME) mereka (seperti teks / xml). Juga, sumber mempunyai keadaan yang ditangkap oleh perwakilannya. Apabila pelanggan meminta sumber dari perkhidmatan Web RESTful, perkhidmatan tersebut menghantar representasi sumber yang ditaip MIME kepada klien.

Pelanggan menggunakan kata kerja POST, GET, PUT, dan DELETE HTTP untuk mengambil perwakilan sumber dan untuk memanipulasi sumber. REST memetakan kata kerja ini ke pangkalan data Buat, Baca, Kemas kini, dan Hapus (CRUD), seperti berikut:

  • POST: Buat sumber baru berdasarkan data permintaan.
  • DAPATKAN: Baca sumber yang ada tanpa menghasilkan kesan sampingan (jangan ubah sumbernya).
  • PUT: Kemas kini sumber yang ada dengan data permintaan.
  • HAPUS: Padamkan sumber yang ada.

Setiap kata kerja diikuti oleh URI yang mengenal pasti sumber. (Pendekatan yang sangat sederhana ini pada dasarnya tidak sesuai dengan pendekatan SOAP untuk mengirim pesan yang dikodekan ke satu sumber.) URI mungkin merujuk pada koleksi, seperti //javajeff.ca/library, atau elemen koleksi, seperti //javajeff.ca/library/9781484219157- URI ini hanya ilustrasi.

Untuk permintaan POST dan PUT, data sumber berasaskan XML diteruskan sebagai badan permintaan. Sebagai contoh, anda dapat menafsirkan POST //javajeff.ca/library HTTP/ 1.1(di mana HTTP/ 1.1menggambarkan versi HTTP pemohon) sebagai permintaan untuk memasukkan POSTdata XML ke dalam //javajeff.ca/librarysumber pengumpulan.

Untuk permintaan GET dan DELETE, data biasanya diteruskan sebagai rentetan pertanyaan, di mana rentetan pertanyaan adalah bahagian URI yang dimulai dengan ?watak. Sebagai contoh, di mana GET //javajeff.ca/librarymungkin mengembalikan senarai pengecam untuk semua buku dalam librarysumber, GET //javajeff.ca/library?isbn=9781484219157mungkin akan mengembalikan representasi sumber buku yang rentetan pertanyaannya mengenal pasti Nombor Buku Standard Antarabangsa (ISBN) 9781484219157.

Ketahui lebih lanjut mengenai pemetaan HTTP-CRUD

Untuk penerangan lengkap mengenai pemetaan antara kata kerja HTTP dan rakan CRUDnya, lihat jadual "Kaedah HTTP Perkhidmatan Web RESTful" dalam entri Pemindahan Negeri Perwakilan Wikipedia.

REST juga bergantung pada kod respons standard HTTP, seperti 404 (sumber yang diminta tidak dijumpai) dan 200 (operasi sumber daya berjaya), bersama dengan jenis MIME (ketika perwakilan sumber sedang diambil).

Perkhidmatan Web TERBAIK vs besar

Sekiranya anda tertanya-tanya sama ada untuk mengembangkan perkhidmatan Web menggunakan SOAP atau REST, lihat Perkhidmatan Web RESTful berbanding Perkhidmatan Web "Besar": Membuat Keputusan Senibina yang Tepat.

Sokongan perkhidmatan web di Java SE

Sebelum Java SE 6, perkhidmatan Web berbasis Java dikembangkan secara eksklusif dengan Java Enterprise Edition (EE) SDK. Walaupun Java EE lebih disukai untuk mengembangkan perkhidmatan Web dari perspektif produksi, kerana server yang berbasis Java EE memberikan tingkat skalabilitas yang sangat tinggi, infrastruktur keamanan, fasilitas pemantauan, dan sebagainya, penyebaran berulang dari layanan Web ke Java EE bekas sering memakan masa, memperlahankan perkembangan. Java SE 6 mempermudah dan mempercepat pengembangan layanan Web dengan menambahkan API, anotasi, alat, dan pelayan HTTP ringan (untuk menyebarkan perkhidmatan Web ke pelayan Web sederhana dan mengujinya di lingkungan ini) ke intinya.

API

Java SE menyediakan beberapa API yang menyokong perkhidmatan Web. Bersama dengan pelbagai API JAXP (SAX, DOM, StAX, dan sebagainya) yang saya bincangkan dalam Java XML dan JSON , Java SE menyediakan API JAX-WS, JAXB, dan SAAJ: