Sekalipun utas ini telah menerima jawaban, jangan ragu untuk mengusulkan ide lain, Anda gunakan atau suka
Saya telah menemukan artikel ini:
Dan itu membawa saya ke video Google I / O 2010 ini tentang aplikasi klien REST
Sejak sekarang, saya telah membuat komponen REST sebagai komponen statis di kelas pengontrol Aplikasi saya.
Mulai sekarang, saya pikir, saya harus mengubah polanya. Seseorang menunjukkan bahwa aplikasi Google IOSched adalah contoh yang bagus tentang cara menulis klien REST di Android. Orang lain mengatakan bahwa cara ini terlalu rumit.
Jadi, adakah yang bisa menunjukkan kepada kami praktik terbaik apa? Dengan cara yang singkat dan sederhana.
Aplikasi IOSched terlalu rumit untuk contoh kasus penggunaan.
Jawaban:
EDIT 2 (Oktober 2017):
Sekarang tahun 2017. Gunakan saja Retrofit. Hampir tidak ada alasan untuk menggunakan yang lain.
EDIT:
Jawaban aslinya sudah lebih dari satu setengah tahun pada saat pengeditan ini. Meskipun konsep yang disajikan dalam jawaban asli masih berlaku, seperti jawaban lain menunjukkan, sekarang ada perpustakaan di luar sana yang membuat tugas ini lebih mudah bagi Anda. Lebih penting lagi, beberapa pustaka ini menangani perubahan konfigurasi perangkat untuk Anda.
Jawaban asli disimpan di bawah untuk referensi. Tapi harap juga meluangkan waktu untuk memeriksa beberapa pustaka klien Rest untuk Android untuk melihat apakah mereka sesuai dengan kasus penggunaan Anda. Berikut ini adalah daftar dari beberapa perpustakaan yang telah saya evaluasi. Ini sama sekali tidak dimaksudkan sebagai daftar yang lengkap.
Jawaban Asli:
Mempresentasikan pendekatan saya untuk memiliki klien REST di Android. Saya tidak mengklaim ini adalah yang terbaik :) Juga, perhatikan bahwa ini adalah apa yang saya pikirkan sebagai tanggapan atas kebutuhan saya. Anda mungkin perlu memiliki lebih banyak lapisan / menambahkan lebih banyak kerumitan jika kasus penggunaan Anda menuntutnya. Misalnya, saya tidak memiliki penyimpanan lokal sama sekali; karena aplikasi saya dapat mentolerir hilangnya beberapa respons REST.
Pendekatan saya menggunakan just
AsyncTask
s under the covers. Dalam kasus saya, saya "memanggil" Tugas ini dariActivity
instance saya ; tetapi untuk sepenuhnya memperhitungkan kasus-kasus seperti rotasi layar, Anda dapat memilih untuk memanggilnya dari salah satuService
atau semacamnya.Saya secara sadar memilih klien REST saya sendiri untuk menjadi API. Artinya, aplikasi yang menggunakan klien REST saya bahkan tidak perlu mengetahui URL REST aktual dan format data yang digunakan.
Klien akan memiliki 2 lapisan:
Lapisan atas: Tujuan dari lapisan ini adalah untuk menyediakan metode yang mencerminkan fungsionalitas REST API. Misalnya, Anda dapat memiliki satu metode Java yang sesuai dengan setiap URL di REST API Anda (atau bahkan dua - satu untuk GET dan satu untuk POST).
Ini adalah titik masuk ke API klien REST. Ini adalah lapisan yang biasanya digunakan aplikasi. Bisa jadi tunggal, tapi belum tentu.
Respons panggilan REST diurai oleh lapisan ini menjadi POJO dan dikembalikan ke aplikasi.
Ini adalah
AsyncTask
lapisan tingkat bawah, yang menggunakan metode klien HTTP untuk benar-benar keluar dan melakukan panggilan REST itu.Selain itu, saya memilih untuk menggunakan mekanisme Callback untuk mengkomunikasikan hasil dari
AsyncTask
kembali ke aplikasi.Cukup teks. Mari kita lihat beberapa kode sekarang. Mari kita ambil URL REST API hipotetis - http://myhypotheticalapi.com/user/profile
Lapisan atas mungkin terlihat seperti ini:
Perhatikan bahwa aplikasi tidak menggunakan JSON atau XML (atau format lain apa pun) yang dikembalikan oleh REST API secara langsung. Sebaliknya, aplikasi hanya melihat kacang
Profile
.Kemudian, lapisan bawah (lapisan AsyncTask) mungkin terlihat seperti ini:
Berikut ini cara aplikasi menggunakan API (dalam
Activity
atauService
):Saya harap komentarnya cukup untuk menjelaskan desainnya; tapi dengan senang hati saya akan memberikan info lebih lanjut.
sumber
GetResponseCallback
lebih umum. Yang saya lebih suka adalah menggunakan antarmuka penanda : Sukainterface IGetResopnse{}
menunjukkan semua kelas yang bisa menjadi tanggapan. Lalu, saya punyaclass Profile implements IGetResponse
dll Akhirnya, membuatGetResponseCallback
generik denganIGetResponse
sebagai batas atas :public abstract class GetResponseCallback<? extends IGetResponse>
."Mengembangkan aplikasi klien Android REST" oleh Virgil Dobjanschi menyebabkan banyak diskusi, karena tidak ada kode sumber yang disajikan selama sesi atau diberikan setelahnya.
Satu-satunya implementasi referensi yang saya tahu (beri komentar jika Anda tahu lebih banyak) tersedia di Datadroid (sesi Google IO disebutkan di bawah / presentasi). Ini adalah perpustakaan yang dapat Anda gunakan dalam aplikasi Anda sendiri.
Tautan kedua meminta kerangka kerja REST "terbaik", yang banyak dibahas di stackoverflow. Bagi saya ukuran aplikasi itu penting, diikuti oleh kinerja implementasinya.
Oleh karena itu saya tetap berpegang pada org.json atau GSON untuk skenario yang lebih kompleks. Untuk arsitektur implementasi org.json, saya menggunakan kelas statis yang mewakili kasus penggunaan server (misalnya findPerson, getPerson). Saya menyebut fungsi ini dari layanan dan menggunakan kelas utilitas yang melakukan pemetaan (khusus proyek) dan jaringan IO (template REST saya sendiri untuk GET atau POST biasa). Saya mencoba menghindari penggunaan refleksi.
sumber
Jangan pernah menggunakan AsynTask untuk melakukan permintaan jaringan atau apa pun yang perlu dipertahankan. Tugas Asinkron sangat terikat dengan aktivitas Anda dan jika pengguna mengubah orientasi layar sejak Aplikasi dibuat, AsyncTask akan dihentikan.
Saya menyarankan Anda untuk menggunakan pola Layanan dengan Intent Service dan ResultReceiver. Lihatlah ke RESTDroid . Ini adalah pustaka yang memungkinkan Anda melakukan segala jenis permintaan REST secara asinkron dan memberi tahu UI Anda dengan Request Listeners yang mengimplementasikan pola layanan Virgil Dobjanschi.
sumber
Ada pustaka lain dengan API yang jauh lebih bersih dan data yang aman untuk tipe. https://github.com/kodart/Httpzoid
Berikut ini contoh penggunaan sederhana
Atau lebih kompleks dengan callback
Ini segar baru, tapi terlihat sangat menjanjikan.
sumber
Ada banyak perpustakaan di luar sana dan saya menggunakan yang ini: https://github.com/nerde/rest-resource . Ini dibuat oleh saya, dan, seperti yang Anda lihat di dokumentasi, jauh lebih bersih dan sederhana daripada yang lain. Ini tidak fokus pada Android, tapi saya menggunakannya dan bekerja dengan cukup baik.
Ini mendukung HTTP Basic Auth. Itu melakukan pekerjaan kotor serialisasi dan deserialisasi objek JSON. Anda akan menyukainya, terutama jika API Anda seperti Rails.
sumber
Penafian: Saya terlibat dalam proyek open source rest2mobile
Alternatif lain sebagai klien REST adalah menggunakan rest2mobile .
Pendekatannya sedikit berbeda karena menggunakan contoh lain yang konkret untuk menghasilkan kode klien untuk layanan REST. Kode tersebut menggantikan URL REST dan payload JSON dengan metode java asli dan POJO. Ini juga secara otomatis menangani koneksi server, pemanggilan asinkron dan POJO ke / dari konversi JSON.
Perhatikan bahwa alat ini hadir dalam berbagai rasa (cli, plugin, dukungan android / ios / js) dan Anda dapat menggunakan plugin studio android untuk membuat API langsung ke aplikasi Anda.
Semua kode dapat ditemukan di github di sini .
sumber
Kami memiliki sumber terbuka pustaka klien REST asinkron ringan kami untuk Android, Anda mungkin merasa berguna jika Anda memiliki persyaratan minimal dan tidak ingin menangani multithreading sendiri - sangat OK untuk komunikasi dasar tetapi bukan klien REST yang lengkap Perpustakaan.
Ini disebut libRESTfulClient dan dapat ditemukan di GitHub .
sumber