Saya akan membuat panggilan tenang di Jawa. Namun, saya tidak tahu bagaimana menelepon. Apakah saya perlu menggunakan koneksi URLC atau yang lainnya? Ada yang bisa bantu saya. Terima kasih.
Tergantung bagaimana Anda melakukan panggilan istirahat di aplikasi Anda. Apakah Anda menggunakan implementasi JaxRS? Yang khusus? Apakah Anda melakukan permintaan secara manual?
Colin Hebert
@Colin Hebert, terima kasih atas balasan Anda. Tapi saya tidak punya ide tentang panggilan tenang. dapatkah Anda memberi saya informasi lebih lanjut tentang berbagai bagian dari panggilan ISTIRAHAT.
Jika Anda menelepon layanan tenang dari Service Provider (misalnya Facebook, Twitter), Anda dapat melakukannya dengan rasa pilihan Anda:
Jika Anda tidak ingin menggunakan pustaka eksternal, Anda dapat menggunakan java.net.HttpURLConnectionatau javax.net.ssl.HttpsURLConnection(untuk SSL), tetapi itu adalah panggilan yang dienkapsulasi dalam pola tipe Pabrik di java.net.URLConnection. Untuk menerima hasilnya, Anda harus connection.getInputStream()mengembalikan InputStream. Anda kemudian harus mengubah aliran input Anda ke string dan mengurai string ke objek yang representatif (misalnya XML, JSON, dll).
Atau, Apache HttpClient (versi 4 adalah yang terbaru). Ini lebih stabil dan kuat daripada standar java URLConnectiondan mendukung sebagian besar (jika tidak semua) protokol HTTP (dan juga dapat diatur ke mode Ketat). Respons Anda akan tetap ada InputStreamdan Anda dapat menggunakannya seperti yang disebutkan di atas.
Jangan menemukan kembali roda, gunakan salah satu implementasi RESTful yang ada.
Qwerky
13
Itu tidak menciptakan kembali roda, saya katakan Anda dapat menggunakan apa pun yang flavourAnda inginkan. Beberapa menginginkan default URLConnection, beberapa menginginkan HttpClient. Bagaimanapun, itu ada di sana untuk Anda gunakan.
Buhake Sindi
@The Elite Gentleman, terima kasih atas balasan Anda. Setelah memeriksa semua perpustakaan, saya ingin menggunakan Apache HttpClient, maukah Anda memberi saya lebih banyak referensi tentang yang ini?
Pertanyaan
@Pertanyaan, tautan ke contoh HttpClient 4 tampaknya rusak, jadi jika Anda memiliki pertanyaan (maksudnya ... lol), beri tahu saya .... Saya menanganinya hampir setiap hari.
Buhake Sindi
Tolong tunjukkan kode contoh tentang bagaimana menggunakan kelas-kelas ini, daripada hanya mencatat keberadaan mereka
Jonathan
150
Pembaruan: Sudah hampir 5 tahun sejak saya menulis jawaban di bawah ini; hari ini saya memiliki perspektif yang berbeda.
99% dari waktu ketika orang menggunakan istilah REST, mereka benar-benar berarti HTTP; mereka tidak terlalu peduli tentang “sumber daya”, “representasi”, “transfer negara”, “antarmuka seragam”, “hypermedia”, atau kendala atau aspek lain dari gaya arsitektur REST yang diidentifikasi oleh Fielding . Abstraksi yang disediakan oleh berbagai kerangka kerja REST karenanya membingungkan dan tidak membantu.
Jadi: Anda ingin mengirim permintaan HTTP menggunakan Java pada tahun 2015. Anda menginginkan API yang jelas, ekspresif, intuitif, idiomatik, sederhana. Apa yang harus digunakan? Saya tidak lagi menggunakan Java, tetapi selama beberapa tahun terakhir perpustakaan klien HTTP Java yang tampaknya paling menjanjikan dan menarik adalah OkHttp . Saksikan berikut ini.
Anda pasti dapat berinteraksi dengan layanan web RESTful dengan menggunakan URLConnectionatau HTTPClient untuk mengkode permintaan HTTP.
Namun, umumnya lebih diinginkan untuk menggunakan pustaka atau kerangka kerja yang menyediakan API semantik dan lebih sederhana yang dirancang khusus untuk tujuan ini. Ini membuat kode lebih mudah untuk ditulis, dibaca, dan didebug, dan mengurangi duplikasi usaha. Kerangka kerja ini umumnya menerapkan beberapa fitur hebat yang tidak selalu ada atau mudah digunakan di perpustakaan tingkat rendah, seperti negosiasi konten, caching, dan otentikasi.
Form form =newForm();
form.add("x","foo");
form.add("y","bar");ClientResource resource =newClientResource("http://localhost:8080/someresource");Response response = resource.post(form.getWebRepresentation());if(response.getStatus().isSuccess()){System.out.println("Success! "+ response.getStatus());System.out.println(response.getEntity().getText());}else{System.out.println("ERROR! "+ response.getStatus());System.out.println(response.getEntity().getText());}
Tentu saja, permintaan GET bahkan lebih sederhana, dan Anda juga dapat menentukan hal-hal seperti tag dan Acceptheader entitas , tetapi semoga contoh-contoh ini bermanfaat non-sepele tetapi tidak terlalu rumit.
Seperti yang Anda lihat, Restlet dan Jersey memiliki API klien yang serupa. Saya percaya mereka dikembangkan sekitar waktu yang sama, dan karena itu saling mempengaruhi.
Saya menemukan API Restlet menjadi sedikit lebih semantik, dan karena itu sedikit lebih jelas, tetapi YMMV.
Seperti yang saya katakan, saya paling akrab dengan Restlet, saya telah menggunakannya di banyak aplikasi selama bertahun-tahun, dan saya sangat senang dengannya. Ini adalah kerangka kerja yang sangat matang, kuat, sederhana, efektif, aktif, dan didukung dengan baik. Saya tidak dapat berbicara dengan Jersey atau RESTEasy, tetapi kesan saya adalah mereka berdua juga pilihan yang solid.
Tapi masih posting yang bagus. Dan saya harus setuju dengan "99% dari waktu ketika orang menggunakan istilah REST, mereka benar-benar berarti HTTP; ... Abstraksi yang disediakan oleh berbagai kerangka kerja REST karenanya membingungkan dan tidak membantu."
AlexD
2
Dalam contoh Jersey Anda, di mana / bagaimana objek Formulir bisa digunakan? Itu dibuat, tetapi tampaknya tidak menambahkan apa pun pada contoh.
splungebob
29
Ini sangat rumit di java, itulah sebabnya saya menyarankan menggunakan RestTemplateabstraksi Spring :
String result =
restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}",String.class,"42","21");
Ada beberapa API SISA yang sangat bagus di sekitar, saya sarankan menggunakan satu daripada menciptakan kembali roda.
Qwerky
seperti yang saya katakan: rumit sekali. (tidak, saya tidak membatalkan ini, ini solusi yang sangat valid)
Sean Patrick Floyd
4
@Qwerky Pustaka API sisi Klien biasanya merupakan pelanggaran batasan REST. Mereka memperkenalkan kopling terlalu banyak. Menggunakan perpustakaan HTTP yang baik adalah opsi yang jauh lebih baik dalam jangka panjang.
Darrel Miller
10
Ada beberapa API yang tenang. Saya akan merekomendasikan Jersey;
Anda dapat melihat CXF . Anda dapat mengunjungi Artikel JAX-RS di sini
Memanggil sesederhana ini (kutipan):
BookStore store =JAXRSClientFactory.create("http://bookstore.com",BookStore.class);// (1) remote GET call to http://bookstore.com/bookstoreBooks books = store.getAllBooks();// (2) no remote callBookResource subresource = store.getBookSubresource(1);// {3} remote GET call to http://bookstore.com/bookstore/1Book b = subresource.getDescription();
Solusi Paling Mudah akan menggunakan perpustakaan klien Apache http. lihat kode sampel berikut .. kode ini menggunakan keamanan dasar untuk otentikasi.
Jawaban:
Jika Anda menelepon layanan tenang dari Service Provider (misalnya Facebook, Twitter), Anda dapat melakukannya dengan rasa pilihan Anda:
Jika Anda tidak ingin menggunakan pustaka eksternal, Anda dapat menggunakan
java.net.HttpURLConnection
ataujavax.net.ssl.HttpsURLConnection
(untuk SSL), tetapi itu adalah panggilan yang dienkapsulasi dalam pola tipe Pabrik dijava.net.URLConnection
. Untuk menerima hasilnya, Anda harusconnection.getInputStream()
mengembalikanInputStream
. Anda kemudian harus mengubah aliran input Anda ke string dan mengurai string ke objek yang representatif (misalnya XML, JSON, dll).Atau, Apache HttpClient (versi 4 adalah yang terbaru). Ini lebih stabil dan kuat daripada standar java
URLConnection
dan mendukung sebagian besar (jika tidak semua) protokol HTTP (dan juga dapat diatur ke mode Ketat). Respons Anda akan tetap adaInputStream
dan Anda dapat menggunakannya seperti yang disebutkan di atas.Dokumentasi di HttpClient: http://hc.apache.org/httpcomponents-client-ga/tutorial/html/index.html
sumber
flavour
Anda inginkan. Beberapa menginginkan defaultURLConnection
, beberapa menginginkanHttpClient
. Bagaimanapun, itu ada di sana untuk Anda gunakan.Pembaruan: Sudah hampir 5 tahun sejak saya menulis jawaban di bawah ini; hari ini saya memiliki perspektif yang berbeda.
99% dari waktu ketika orang menggunakan istilah REST, mereka benar-benar berarti HTTP; mereka tidak terlalu peduli tentang “sumber daya”, “representasi”, “transfer negara”, “antarmuka seragam”, “hypermedia”, atau kendala atau aspek lain dari gaya arsitektur REST yang diidentifikasi oleh Fielding . Abstraksi yang disediakan oleh berbagai kerangka kerja REST karenanya membingungkan dan tidak membantu.
Jadi: Anda ingin mengirim permintaan HTTP menggunakan Java pada tahun 2015. Anda menginginkan API yang jelas, ekspresif, intuitif, idiomatik, sederhana. Apa yang harus digunakan? Saya tidak lagi menggunakan Java, tetapi selama beberapa tahun terakhir perpustakaan klien HTTP Java yang tampaknya paling menjanjikan dan menarik adalah OkHttp . Saksikan berikut ini.
Anda pasti dapat berinteraksi dengan layanan web RESTful dengan menggunakan
URLConnection
atau HTTPClient untuk mengkode permintaan HTTP.Namun, umumnya lebih diinginkan untuk menggunakan pustaka atau kerangka kerja yang menyediakan API semantik dan lebih sederhana yang dirancang khusus untuk tujuan ini. Ini membuat kode lebih mudah untuk ditulis, dibaca, dan didebug, dan mengurangi duplikasi usaha. Kerangka kerja ini umumnya menerapkan beberapa fitur hebat yang tidak selalu ada atau mudah digunakan di perpustakaan tingkat rendah, seperti negosiasi konten, caching, dan otentikasi.
Beberapa opsi yang paling matang adalah Jersey , RESTEasy , dan Restlet .
Saya paling akrab dengan Restlet, dan Jersey, mari kita lihat bagaimana kami akan membuat
POST
permintaan dengan kedua API.Contoh Jersey
Contoh Restlet
Tentu saja, permintaan GET bahkan lebih sederhana, dan Anda juga dapat menentukan hal-hal seperti tag dan
Accept
header entitas , tetapi semoga contoh-contoh ini bermanfaat non-sepele tetapi tidak terlalu rumit.Seperti yang Anda lihat, Restlet dan Jersey memiliki API klien yang serupa. Saya percaya mereka dikembangkan sekitar waktu yang sama, dan karena itu saling mempengaruhi.
Saya menemukan API Restlet menjadi sedikit lebih semantik, dan karena itu sedikit lebih jelas, tetapi YMMV.
Seperti yang saya katakan, saya paling akrab dengan Restlet, saya telah menggunakannya di banyak aplikasi selama bertahun-tahun, dan saya sangat senang dengannya. Ini adalah kerangka kerja yang sangat matang, kuat, sederhana, efektif, aktif, dan didukung dengan baik. Saya tidak dapat berbicara dengan Jersey atau RESTEasy, tetapi kesan saya adalah mereka berdua juga pilihan yang solid.
sumber
Ini sangat rumit di java, itulah sebabnya saya menyarankan menggunakan
RestTemplate
abstraksi Spring :Referensi:
RestTemplate
sumber
Jika Anda hanya perlu melakukan panggilan sederhana ke layanan REST dari java Anda menggunakan sesuatu di sepanjang baris ini
sumber
Ada beberapa API yang tenang. Saya akan merekomendasikan Jersey;
https://jersey.java.net/
Dokumentasi API Klien ada di sini;
https://jersey.java.net/documentation/latest/index.html
Perbarui
Lokasi untuk dokumen OAuth dalam komentar di bawah adalah tautan mati dan telah pindah ke https://jersey.java.net/nonav/documentation/latest/security.html#d0e12334
sumber
Saya ingin berbagi pengalaman pribadi saya, menelepon REST WS dengan panggilan Post JSON:
sumber
Anda dapat melihat CXF . Anda dapat mengunjungi Artikel JAX-RS di sini
Memanggil sesederhana ini (kutipan):
sumber
Memang, ini "sangat rumit di Jawa":
Dari: https://jersey.java.net/documentation/latest/client.html
sumber
Solusi Paling Mudah akan menggunakan perpustakaan klien Apache http. lihat kode sampel berikut .. kode ini menggunakan keamanan dasar untuk otentikasi.
Tambahkan Ketergantungan berikut.
sumber
Saya melihat banyak jawaban, inilah yang kami gunakan pada 2020 WebClient , dan BTW RestTemplate akan mulai ditinggalkan. (dapat memeriksa ini) RestTemplate akan ditinggalkan
sumber
Anda dapat menggunakan Async Http Client (Perpustakaan juga mendukung Protokol WebSocket ) seperti itu:
sumber