Saya merancang API REST untuk sistem tiga tingkat seperti: Client application
-> Front-end API cloud server
-> user's home API server (Home)
.
Home
adalah perangkat rumah, dan seharusnya menjaga koneksi Front-end
melalui Websocket atau jajak pendapat yang panjang (ini adalah tempat pertama di mana kita melanggar REST. Semakin buruk nantinya) . Front-end
sebagian besar Client
permintaan terowongan untuk Home
koneksi dan menangani beberapa panggilan itu sendiri. Terkadang Home
mengirim pemberitahuan ke Client
.
Front-end
dan Home
pada dasarnya memiliki API yang sama; Client
mungkin terhubung Home
secara langsung, melalui LAN. Dalam hal ini, Home
perlu mendaftarkan beberapa Client
tindakan pada Front-end
dirinya sendiri.
Kelebihan untuk REST dalam sistem ini adalah:
- REST dapat dibaca oleh manusia;
- REST memiliki pemetaan kata kerja yang didefinisikan dengan baik (seperti CRUD), kata benda dan kode respons terhadap objek protokol;
- Ia bekerja melalui HTTP dan melewati semua proxy yang mungkin;
Kontras REST adalah:
- Kami tidak hanya membutuhkan gaya komunikasi permintaan-respons, tetapi juga berlangganan-penerbitan;
- Kode kesalahan HTTP mungkin tidak cukup untuk menangani kesalahan komunikasi tiga tingkat;
Front-end
mungkin kembali202 Accepted
ke beberapa panggilan async hanya untuk mengetahui bahwaHome
koneksi yang diperlukan terputus dan seharusnya ada503
; Home
perlu mengirim pesan keClient
.Client
harus pollingFront-end
atau untuk menjaga koneksi.
Kami sedang mempertimbangkan WAMP / Autobahn melalui Websocket untuk mendapatkan fungsionalitas mempublikasikan / berlangganan, ketika saya menyadari bahwa itu sudah terlihat seperti antrian pesan.
Apakah layak mengevaluasi semacam antrian pengiriman pesan sebagai transportasi?
Sepertinya contra antrian pesan adalah:
- Saya perlu mendefinisikan kata kerja CRUD dan kode kesalahan pada tingkat pesan.
- Saya membaca sesuatu tentang "biaya perawatan yang lebih tinggi", tetapi apa artinya?
Seberapa serius pertimbangan ini?
sumber
@Jimmy Hoffa
titik valid, terima kasih. Itu benar, tetapi tidak sepenuhnya. Ini adalah database umum, penyimpanan, dan sebagainya.@Javier
terima kasih, itu bagian yang baik dari sebuah jawaban.@Mike Brown
persis. Silakan lakukan.Jawaban:
Jika Anda memiliki konektivitas, lanjutkan dengan antrian pesan - meskipun Anda harus mendefinisikan protokol Anda sendiri (bukan tugas yang sulit!) Untuk mengirim pesan dari struktur dan format tertentu.
Masalah dengan pemeliharaan adalah bahwa biasanya klien dan server dibangun secara terpisah sehingga Anda harus berhati-hati untuk menjaga kedua ujungnya menggunakan definisi pesan yang sama, tetapi jika Anda tidak cukup terorganisir, cukup gunakan XML yang sama yang akan Anda gunakan dalam REST Anda layanan.
Jika Anda memiliki masalah konektivitas melalui internet, dengan port 80 dan http saja dan komunikasi 'searah' maka sistem gaya REST mungkin yang terbaik. Kirim dan polling, atau dapatkan websocket untuk data panggilan balik, tetapi umumnya arsitek sistem Anda adalah klien / server. Jika Anda memiliki kemampuan untuk mendapatkan konektivitas, maka sistem pengiriman pesan sangat bagus.
Saya akan menggunakan ZeroMQ untuk sistem pengiriman pesan, yang cukup dapat dikonfigurasi untuk memutar semua skenario, termasuk yang toleran terhadap kesalahan. Saya tidak yakin bahwa itu berfungsi lebih dari http .
sumber
@Javier
berkomentar: ØMQ tampaknya tidak mendukung enkripsi itu sendiri. Atm : zeromq.org/area:faq#toc8 melalui RabbitMQ: rabbitmq.com/ssl.htmlHome
adalah perangkat rumah pengguna, danClient
merupakan smartphone melalui Wi-Fi atau 3G. Salah satu bagian besar dari pertanyaan adalah ketidaktahuan saya tentang metode NAT traversal.Sepertinya Autobahn cocok dengan apa yang Anda coba lakukan. Ada alat lain yang tersedia juga. Lihat Windows Azure Service Bus (yang memiliki kerangka kerja klien untuk Java, .NET, PHP, Python, NodeJS, dan Ruby).
Sementara pesan built in rest berguna. Anda akan menemukan bahwa aplikasi Anda akan melampaui operasi CRUD dasar. Misalnya jika aplikasi Anda adalah sistem perbankan. Dari pada
Perbarui Acct 54321 Balance = Saldo - 20.00 Perbarui Acct 98765 Balance = Saldo + 20.00
Anda mungkin ingin satu pesan seperti
Transfer 20,00 dari akun 54321 ke akun 98765
Yang terbaik adalah Anda menemukan hambatan ini dengan REST sekarang daripada nanti. Lihat Pusat Acara Greg Young yang membahas cara membuat model yang lebih kaya untuk pengiriman pesan dalam aplikasi Anda.
sumber