Layanan web di Java SE, Bagian 1: Ikhtisar alat

Java Standard Edition (SE) 6 menyertakan dukungan untuk layanan Web. Posting ini memulai seri empat bagian tentang layanan Web di Java SE dengan menjelaskan apa itu layanan Web dan gambaran umum dukungan Java SE untuk mereka. Posting selanjutnya akan menggunakan dukungan ini untuk membangun layanan Web berbasis SOAP dan RESTful, dan juga akan mencakup topik layanan Web lanjutan.

XML dan JSON Java

Dalam seri ini, saya berasumsi bahwa Anda memahami XML dan JSON. Jika tidak, Anda mungkin ingin melihat buku XML dan JSON Java saya , yang diiklankan di akhir posting ini.

Apa itu layanan web?

Wikipedia mendefinisikan layanan Web sebagai "sistem perangkat lunak yang dirancang untuk mendukung interaksi mesin-ke-mesin yang dapat dioperasikan melalui jaringan." Definisi yang lebih rinci dapat diperoleh dengan terlebih dahulu mendefinisikan bagian-bagian istilah ini:

  • Web: Jaringan sumber daya yang sangat besar dan saling berhubungan, di mana sumber daya adalah sumber data bernama Uniform Resource Identifier (URI) seperti dokumen berbasis PDF, aliran video, halaman Web, atau bahkan aplikasi. Sumber daya ini dapat diakses dengan menggunakan protokol Internet standar seperti HyperText Transfer Protocol (HTTP) atau Simple Mail Transfer Protocol (SMTP).
  • Layanan: Aplikasi berbasis server atau komponen perangkat lunak yang mengekspos sumber daya ke klien melalui pertukaran pesan sesuai dengan pola pertukaran pesan (MEP). MEP respons-permintaan adalah tipikal.

Dengan definisi ini, layanan Web adalah aplikasi berbasis server / komponen perangkat lunak yang mengekspos sumber daya berbasis web kepada klien melalui pertukaran pesan. Pesan ini dapat diformat sesuai dengan Extensible Markup Language (XML) atau JavaScript Object Notation (JSON). Selain itu, pesan ini dapat dianggap sebagai menjalankan fungsi layanan Web dan menerima hasil pemanggilan. Gambar 1 mengilustrasikan pertukaran pesan ini.

Gambar 1. Klien mengakses sumber daya dengan bertukar pesan dengan layanan Web

Bisnis dan layanan Web

Bisnis menggunakan layanan Web karena mereka mengatasi masalah middleware tradisional (misalnya, mahal untuk diperoleh dan dipelihara, tidak dapat berkomunikasi dengan perangkat lunak backend dan aplikasi klien di seluruh Internet, dan tidak fleksibel) dengan didasarkan pada standar bebas dan terbuka, dengan pemeliharaannya, dengan melibatkan Web, dan dengan menjadi fleksibel. Selain itu, mereka membantu bisnis yang lebih besar mempertahankan investasi mereka yang seringkali signifikan dalam perangkat lunak lawas.

Layanan web dapat diklasifikasikan sebagai sederhana atau kompleks. Layanan Web sederhana tidak berinteraksi dengan layanan Web lain (misalnya, aplikasi berbasis server mandiri dengan fungsi tunggal yang mengembalikan waktu saat ini untuk zona waktu tertentu). Sebaliknya, layanan Web yang kompleks sering kali berinteraksi dengan layanan Web lainnya. Misalnya, layanan Web jaringan sosial umum mungkin berinteraksi dengan Twitter dan layanan Web Facebook untuk mendapatkan dan mengembalikan semua Twitter dan semua informasi Facebook untuk individu tertentu ke kliennya. Layanan Web kompleks juga dikenal sebagai mashup karena mereka tumbuk (menggabungkan) data dari beberapa layanan Web.

Arsitektur berorientasi layanan

Layanan web adalah implementasi dari Service-Oriented Architecture (SOA) , yang merupakan gaya desain perangkat lunak di mana layanan disediakan untuk berbagai komponen perangkat lunak melalui protokol komunikasi melalui jaringan. Pikirkan SOA sebagai seperangkat prinsip desain atau kerangka kerja untuk menerapkan logika bisnis sebagai layanan yang dapat digunakan kembali yang dapat digabungkan dengan berbagai cara untuk memenuhi persyaratan bisnis yang berkembang.

Layanan web berbasis SOAP

Layanan Web berbasis SOAP adalah kategori layanan Web yang banyak digunakan yang didasarkan pada SOAP , bahasa XML untuk menentukan pesan (pemanggilan fungsi abstrak atau tanggapannya) yang dapat dipahami oleh kedua ujung koneksi jaringan. Pertukaran pesan SOAP disebut operasi , yang sesuai dengan panggilan fungsi dan responsnya, dan yang digambarkan pada Gambar 2.

Gambar 2. Operasi layanan Web melibatkan pesan masukan dan keluaran

Operasi terkait sering kali dikelompokkan ke dalam antarmuka , yang secara konseptual mirip dengan antarmuka Java. Sebuah mengikat memberikan rincian konkret tentang bagaimana sebuah antarmuka terikat untuk protokol messaging (terutama SOAP) untuk berkomunikasi perintah, kode kesalahan, dan barang-barang lainnya di atas kawat. URI pengikatan dan alamat jaringan ( alamat IP dan port) dikenal sebagai titik akhir , dan kumpulan titik akhir adalah layanan Web . Gambar 3 menyajikan arsitektur ini.

Gambar 3. Antarmuka operasi dapat diakses melalui titik akhir mereka

SOAP sering digunakan dengan Web Services Description Language (WSDL, diucapkan whiz-dull) , bahasa XML untuk menentukan operasi layanan Web. Sebuah dokumen WSDL adalah kontrak formal antara layanan Web berbasis SOAP dan kliennya, menyediakan semua rincian untuk berinteraksi dengan layanan Web. Dokumen ini memungkinkan Anda mengelompokkan pesan ke dalam operasi dan operasi ke dalam antarmuka. Ini juga memungkinkan Anda menentukan pengikatan untuk setiap antarmuka serta alamat titik akhir.

Selain mendukung dokumen WSDL, layanan Web berbasis SOAP memiliki properti berikut:

  • Kemampuan untuk menangani persyaratan nonfungsional yang kompleks seperti keamanan dan transaksi: Persyaratan ini tersedia melalui berbagai spesifikasi. Untuk mempromosikan interoperabilitas di antara spesifikasi ini, Organisasi Interoperabilitas Layanan Web (WS-I) (sebuah konsorsium industri) dibentuk. WS-I telah menetapkan satu set profil, di mana profil adalah sekumpulan spesifikasi layanan Web bernama pada tingkat revisi tertentu, bersama dengan satu set pedoman implementasi dan interoperabilitas yang merekomendasikan bagaimana spesifikasi dapat digunakan untuk mengembangkan layanan Web yang dapat dioperasikan. Misalnya, profil paling pertama, WS-I Basic Profile 1.0 , terdiri dari kumpulan spesifikasi layanan Web nonpemilik berikut ini:
  • SOAP 1.1
  • WSDL 1.1.0
  • Universal Description Discovery and Integration (UDDI) 2.0
  • XML 1.0 (Edisi Kedua)
  • Skema XML Bagian 1: Struktur
  • Skema XML Bagian 2: Jenis data
  • RFC2246: Transport Layer Security Protocol Version 1.0
  • RFC2459: Sertifikat Infrastruktur Kunci Publik Internet X.509 dan Profil CRL
  • RFC2616: HyperText Transfer Protocol 1.1
  • RFC2818: HTTP melalui TLS
  • RFC2965: Mekanisme Manajemen Status HTTP
  • Protokol Lapisan Soket Aman Versi 3.0

Contoh profil tambahan mencakup Profil Keamanan Dasar WS-I dan Profil Pengikatan SOAP Sederhana. Untuk informasi lebih lanjut tentang ini dan profil lainnya, kunjungi situs web WS-I. Java SE mendukung Profil Dasar WS-I.

  • Kemampuan untuk berinteraksi dengan layanan Web secara asinkron: Klien layanan web harus dapat berinteraksi dengan layanan Web dengan cara yang tidak memblokir dan tidak sinkron. Dukungan pemanggilan asinkron sisi klien untuk operasi layanan Web disediakan di Java SE.

Layanan Web berbasis SOAP dijalankan dalam lingkungan yang mencakup pemohon layanan (klien), penyedia layanan, dan perantara layanan. Lingkungan ini ditunjukkan pada Gambar 4.

Gambar 4. Layanan Web berbasis SOAP melibatkan pemohon layanan, penyedia layanan, dan perantara layanan (misalnya, UDDI)

Pemohon layanan, biasanya aplikasi klien (misalnya, browser Web), atau mungkin layanan Web lain, pertama-tama menemukan penyedia layanan dengan cara tertentu. Misalnya, pemohon layanan mungkin mengirim dokumen WSDL ke broker layanan, yang merespons dengan dokumen WSDL lain yang mengidentifikasi lokasi penyedia layanan. Pemohon layanan kemudian berkomunikasi dengan penyedia layanan melalui pesan SOAP.

Penyedia layanan perlu dipublikasikan agar orang lain dapat menemukan dan menggunakannya. Pada bulan Agustus 2000, inisiatif industri terbuka yang dikenal sebagai Deskripsi Universal, Penemuan, dan Integrasi (UDDI) diluncurkan untuk memungkinkan bisnis mempublikasikan daftar layanan, menemukan satu sama lain, dan menentukan bagaimana layanan atau aplikasi perangkat lunak berinteraksi melalui Internet. Namun, registri berbasis XML yang tidak bergantung platform ini tidak diadopsi secara luas dan saat ini tidak digunakan. Banyak pengembang menemukan UDDI terlalu rumit dan kurang fungsional, dan memilih alternatif seperti menerbitkan informasi di situs web. Misalnya, Google pernah membuat layanan Web publiknya (mis., Google Maps) tersedia di //code.google.com/more/.

Pesan SOAP yang mengalir antara pemohon layanan dan penyedia layanan sering tidak terlihat, diteruskan sebagai permintaan dan tanggapan antara perpustakaan SOAP dari tumpukan protokol layanan Web mereka. Namun, pesan-pesan ini dapat diakses secara langsung, seperti yang akan Anda temukan nanti dalam rangkaian ini.

Layanan Web Besar

Layanan Web berbasis SOAP juga dikenal sebagai layanan Web besar karena didasarkan pada banyak spesifikasi, seperti profil WS-I yang disebutkan sebelumnya.

Layanan web yang tenang

Layanan Web berbasis SOAP dapat dikirimkan melalui protokol seperti HTTP, SMTP, FTP, dan Blocks Extensible Exchange Protocol (BEEP). Mengirim pesan SOAP melalui HTTP dapat dilihat sebagai jenis layanan Web RESTful khusus.

A RESTful Web Service adalah kategori layanan Web yang banyak digunakan yang didasarkan pada Representational State Transfer (REST) , gaya arsitektur perangkat lunak untuk sistem hypermedia terdistribusi (sistem di mana gambar, teks, dan sumber daya lainnya berada di sekitar jaringan dan dapat diakses melalui hyperlink) . Sistem hypermedia yang menarik dalam konteks layanan Web adalah World Wide Web.

Sejarah REST

Roy Fielding (penulis utama spesifikasi HTTP versi 1.0 dan 1.1, dan salah satu pendiri Apache Software Foundation) memperkenalkan dan mendefinisikan REST dalam disertasi doktoralnya pada tahun 2000. Fielding membayangkan REST sebagai gaya arsitektur Web, meskipun ia menulis itu lama setelah Web menjadi perhatian. REST secara luas dianggap sebagai solusi untuk apa yang dianggap sebagai semakin kompleksnya layanan Web berbasis SOAP.

Bagian sentral dari REST adalah resource yang dapat diidentifikasi URI. REST mengidentifikasi sumber daya menurut jenis Multipurpose Internet Mail Extensions (MIME) (seperti teks / xml). Juga, sumber daya memiliki status yang ditangkap oleh representasi mereka. Ketika klien meminta sumber daya dari layanan Web RESTful, layanan mengirimkan representasi sumber yang diketik MIME ke klien.

Klien menggunakan kata kerja HTTP POST, GET, PUT, dan DELETE untuk mengambil representasi sumber daya dan memanipulasi sumber daya. REST memetakan kata kerja ini ke database operasi Buat, Baca, Perbarui, dan Hapus (CRUD), sebagai berikut:

  • POST: Buat sumber daya baru berdasarkan data permintaan.
  • DAPATKAN: Membaca sumber daya yang ada tanpa menimbulkan efek samping (jangan mengubah sumber daya).
  • PUT: Perbarui sumber daya yang ada dengan data permintaan.
  • HAPUS: Hapus sumber daya yang ada.

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

Untuk permintaan POST dan PUT, data sumber daya berbasis XML diteruskan sebagai isi permintaan. Misalnya, Anda dapat menafsirkan POST //javajeff.ca/library HTTP/ 1.1( HTTP/ 1.1menjelaskan versi HTTP pemohon) sebagai permintaan untuk memasukkan POSTdata XML ke dalam //javajeff.ca/librarysumber daya koleksi.

Untuk permintaan GET dan DELETE, data biasanya diteruskan sebagai string kueri, di mana string kueri adalah bagian dari URI yang diawali dengan ?karakter. Misalnya, di mana GET //javajeff.ca/librarymungkin mengembalikan daftar pengenal untuk semua buku dalam librarysumber daya, GET //javajeff.ca/library?isbn=9781484219157mungkin akan mengembalikan representasi sumber daya buku yang string kuerinya mengidentifikasi Nomor Buku Standar Internasional (ISBN) 9781484219157.

Mempelajari lebih lanjut tentang pemetaan HTTP-CRUD

Untuk penjelasan lengkap tentang pemetaan antara kata kerja HTTP dan CRUD, lihat tabel "Metode HTTP RESTful Web Service" di entri Transfer Status Representasional Wikipedia.

REST juga mengandalkan kode respons standar HTTP, seperti 404 (sumber daya yang diminta tidak ditemukan) dan 200 (operasi sumber daya berhasil), bersama dengan jenis MIME (saat representasi sumber daya diambil).

Layanan Web tenang vs besar

Jika Anda bertanya-tanya tentang apakah akan mengembangkan layanan Web menggunakan SOAP atau REST, lihat Layanan Web RESTful vs. Layanan Web "Besar": Membuat Keputusan Arsitektur yang Tepat.

Dukungan layanan web di Java SE

Sebelum Java SE 6, layanan Web berbasis Java dikembangkan secara eksklusif dengan Java Enterprise Edition (EE) SDK. Meskipun Java EE lebih disukai untuk mengembangkan layanan Web dari perspektif produksi, karena server berbasis Java EE menyediakan tingkat skalabilitas yang sangat tinggi, infrastruktur keamanan, fasilitas pemantauan, dan seterusnya, penyebaran berulang dari layanan Web ke Java EE kontainer sering memakan waktu, memperlambat pembangunan. Java SE 6 menyederhanakan dan mempercepat pengembangan layanan Web dengan menambahkan API, anotasi, alat, dan server HTTP ringan (untuk menyebarkan layanan Web ke server Web sederhana dan mengujinya di lingkungan ini) ke dalam intinya.

Lebah

Java SE menyediakan beberapa API yang mendukung layanan Web. Seiring dengan berbagai JAXP API (SAX, DOM, StAX, dan sebagainya) yang saya diskusikan di Java XML dan JSON , Java SE menyediakan API JAX-WS, JAXB, dan SAAJ: