Saya memiliki beberapa layanan web yang ingin saya panggil. $resource
atau $http
, yang mana yang harus saya gunakan?
$resource
: https://docs.angularjs.org/api/ngResource/service/$resource
$http
: https://docs.angularjs.org/api/ng/service/$http
Setelah saya membaca dua halaman API di atas saya tersesat.
Bisakah Anda jelaskan kepada saya dalam bahasa Inggris yang sederhana apa perbedaannya dan dalam situasi apa saya harus menggunakannya? Bagaimana cara menyusun panggilan ini dan membaca hasilnya menjadi objek js dengan benar?
Jawaban:
$http
adalah untuk tujuan umum AJAX. Dalam kebanyakan kasus, inilah yang akan Anda gunakan. Dengan$http
Anda akan membuatGET
,POST
,DELETE
jenis secara manual dan pengolahan benda mereka kembali pada Anda sendiri.$resource
membungkus$http
untuk digunakan dalam skenario API web yang tenang.Berbicara sangat umum: layanan web Sebuah tenang akan menjadi layanan dengan satu endpoint untuk tipe data yang melakukan hal yang berbeda dengan jenis data berdasarkan HTTP metode seperti
GET
,POST
,PUT
,DELETE
, dll Jadi dengan$resource
, Anda dapat memanggilGET
untuk mendapatkan sumber daya sebagai objek JavaScript, lalu ubah dan kirim kembali denganPOST
, atau bahkan hapus denganDELETE
.... jika itu masuk akal.
sumber
$resource
layanan hanya akan idiomatik / baik jika Anda mendukung SISA endpointGET
,POST
, danDELETE
? Docs ( docs.angularjs.org/api/ngResource.$resource ) menunjukkan bahwa Anda mendapatkan 3 metode REST ini$resource
.PUT
atau apa pun yang Anda inginkanGET
,,POST
danDELETE
hanya default. Jika Anda memiliki titik akhir yang berhubungan dengan sumber daya yang sama (yang penting) untuk lebih dari satu metode HTTP, maka itu$resource
adalah pilihan yang baik..$promise
kerjanya dengan baikresolve
untuk routing dan mengikat.Saya merasa bahwa jawaban lain, meskipun benar, tidak cukup menjelaskan akar pertanyaan:
REST
adalah bagian dariHTTP
. Ini berarti segala sesuatu yang dapat dilakukan melaluiREST
dapat dilakukan melaluiHTTP
tetapi tidak semua yang dapat dilakukan melaluiHTTP
dapat dilakukan melaluiREST
. Itu sebabnya$resource
menggunakan$http
internal.Jadi, kapan harus saling menggunakan?
Jika yang Anda butuhkan adalah
REST
, yaitu, Anda mencoba mengakses layananRESTful
web,$resource
akan membuatnya sangat mudah untuk berinteraksi dengan layanan web tersebut.Jika sebaliknya, Anda mencoba mengakses APA SAJA yang bukan layanan
RESTful
web, Anda harus menggunakannya$http
. Perlu diingat, Anda juga bisa mengakses layananRESTful
web via$http
, itu hanya akan jauh lebih rumit daripada dengan$resource
. Ini adalah cara kebanyakan orang melakukannya di luar AngularJS, dengan menggunakanjQuery.ajax
(setara dengan Angular$http
).sumber
$http
membuat panggilan AJAX untuk keperluan umum, di mana secara umum berarti itu bisa termasuk api tenang ditambah api tidak tenang .dan
$resource
dikhususkan untuk bagian tenang itu .Restful Api menjadi lazim dalam beberapa tahun terakhir karena url lebih terorganisir daripada url acak yang dibuat oleh programmer.
Jika saya menggunakan RESTful API untuk membangun url, itu akan menjadi sesuatu seperti
/api/cars/:carId
.$resource
cara untuk mengambil dataIni akan memberi Anda objek sumber daya , yang disertai dengan
get
,save
,query
,remove
,delete
metode otomatis.$http
cara untuk mengambil dataLihat bagaimana kita perlu mendefinisikan setiap operasi umum pada RESTFul API . Juga satu perbedaan adalah yang
$http
mengembalikanpromise
saat$resource
mengembalikan objek. Ada juga plugin pihak ketiga untuk membantu Angular menangani RESTFul API seperti restangularJika API itu seperti
/api/getcarsinfo
. Semua yang tersisa untuk kita gunakan$http
.sumber
/api/getcarsinfo
saya kira kita masih bisa menggunakan$resource
Saya pikir jawabannya lebih tergantung pada siapa Anda pada saat Anda menulis kode. Gunakan
$http
jika Anda baru di Angular, sampai Anda tahu mengapa Anda perlu$resource
. Sampai Anda memiliki pengalaman nyata tentang bagaimana$http
menahan Anda, dan Anda memahami implikasi penggunaan$resource
dalam kode Anda , tetaplah dengan$http
.Ini adalah pengalaman saya: Saya memulai proyek Angular pertama saya, saya perlu membuat permintaan HTTP ke antarmuka RESTful, jadi saya melakukan penelitian yang sama dengan yang Anda lakukan sekarang. Berdasarkan diskusi yang saya baca di SO pertanyaan seperti ini, saya memilih untuk ikut
$resource
. Ini adalah kesalahan yang saya harap bisa saya batalkan. Inilah alasannya:$http
Contohnya banyak, membantu, dan umumnya hanya apa yang Anda butuhkan. Jelas$resource
contoh yang langka, dan (dalam pengalaman saya) jarang semua yang Anda butuhkan. Untuk pemula Angular, Anda tidak akan menyadari implikasi pilihan Anda sampai nanti, ketika Anda terjebak bingung dengan dokumentasi dan marah karena Anda tidak dapat menemukan$resource
contoh-contoh bermanfaat untuk membantu Anda.$http
mungkin adalah peta mental 1-ke-1 untuk apa yang Anda cari. Anda tidak perlu mempelajari konsep baru untuk memahami apa yang Anda dapatkan$http
.$resource
membawa banyak nuansa bahwa Anda belum memiliki peta mental untuk saat ini.$http
mengembalikan janji dan.then
mampu, sehingga cocok dengan hal-hal baru yang Anda pelajari tentang Angular dan janji.$resource
, yang tidak mengembalikan janji secara langsung, mempersulit pemahaman tentatif Anda pada fundamental Angular.$resource
sangat kuat karena memadatkan kode untuk panggilan CRUD tenang dan transformasi untuk input dan output. Itu bagus jika Anda muak menulis kode berulang kali untuk memproses hasil$http
diri Anda sendiri. Untuk orang lain,$resource
tambahkan lapisan sintaksis dan parameter yang lewat yang membingungkan.Seandainya saya mengenal saya 3 bulan lalu, dan saya akan dengan tegas mengatakan pada diri sendiri: "Tetaplah dengan
$http
anak kecil. Tidak apa-apa."sumber
/user/:userId
atau/thing
. Setelah Anda pindah ke/users/roles/:roleId
maka Anda harus memodifikasi $ sumber url dan params pada basis per kata kerja dan Anda mungkin juga menggunakan $ http pada saat itu.$resource
dan beralih ke$http
tempat. Saya tidak bisa cukup menekankan betapa saya berharap dan berharap saya belum pernah bertemu$resource
. Saya mungkin telah membuang lebih dari seminggu mengejar nuansa$resource
selama berbulan-bulan.$http
sangat mudah dan langsung, setiap keuntungan yang bisa didapat$resource
telah terhapus secara menyeluruh oleh kurva belajar.Saya pikir penting untuk menekankan bahwa $ resource mengharapkan objek atau array sebagai respons dari server, bukan string mentah. Jadi jika Anda memiliki string mentah (atau apa pun kecuali objek dan array) sebagai respons, Anda harus menggunakan $ http
sumber
Ketika datang untuk memilih antara
$http
atau$resource
berbicara secara teknis tidak ada jawaban benar atau salah pada dasarnya keduanya akan melakukan hal yang sama.Tujuannya
$resource
adalah untuk memungkinkan Anda meneruskan string template (string yang berisi placeholder) bersama dengan nilai parameter.$resource
akan mengganti placeholder dari string template dengan nilai parameter yang dilewatkan sebagai objek. Ini sebagian besar berguna ketika berinteraksi dengan sumber data RESTFul karena mereka menggunakan prinsip serupa untuk mendefinisikan URL.Apa yang
$http
dilakukan adalah melakukan Permintaan HTTP Asinkron.sumber
$resource
tidak dapat melakukan Asynchronous? Hanya ingin mengklarifikasi$http
adalah cara paling sederhana untuk melakukan Permintaan HTTP Asinkron dan apa yang$resource
pada dasarnya melakukan hal yang sama tetapi dengan parameter yang berbedalayanan sumber daya hanyalah layanan yang berguna untuk bekerja dengan REST APSI. ketika Anda menggunakannya, Anda tidak menulis metode CRUD Anda (membuat, membaca, memperbarui, dan menghapus)
Sejauh yang saya lihat, layanan sumber daya hanyalah jalan pintas, Anda dapat melakukan apa saja dengan layanan http.
sumber
$http.get('/path/to/thing', params)
versusmyResource.get(params)
plus sebenarnya melakukan konfigurasi untukmyResource
. Lebih banyak kode di depan dan hanya benar-benar berfungsi dengan baik dengan kata benda API yang sama . Kalau tidak, Anda mengkode sama seperti jika Anda menggunakan $ http.Satu hal yang saya perhatikan ketika menggunakan $ resource lebih dari $ http adalah jika Anda menggunakan Web API di .net
$ resource diikat menjadi satu pengontrol yang mengeksekusi satu tujuan.
$ resource ('/ user /: userId', {userId: '@ id'});
Sedangkan $ http bisa berupa apa saja. tentukan url saja.
$ http.get - "api / otentikasi"
itu hanya pendapat saya.
sumber
Layanan $ resource saat ini tidak mendukung janji dan oleh karena itu memiliki antarmuka yang berbeda dengan layanan $ http.
sumber
var myResource = $resource(...config...);
saat itu di tempat lain dalam layanan yang Anda lakukanreturn myResource.get(..params...)
atau dapat Anda lakukanvar save = myResource.save(); save.$promise.then(...fn...); return save;