Dalam membandingkan struktur REST [api] dengan model OO, saya melihat kesamaan ini:
Kedua:
Berorientasi data
- REST = Sumberdaya
- OO = Objek
Operasi surround di sekitar data
- REST = mengelilingi VERBS (Dapatkan, Posting, ...) di sekitar sumber daya
- OO = mempromosikan operasi di sekitar objek dengan enkapsulasi
Namun, praktik OO yang baik tidak selalu berlaku pada REST apis ketika mencoba menerapkan pola fasad misalnya: di REST, Anda tidak memiliki 1 pengontrol untuk menangani semua permintaan DAN Anda tidak menyembunyikan kompleksitas objek internal.
Sebaliknya, REST mempromosikan penerbitan sumber daya dari semua hubungan dengan sumber daya dan lainnya di setidaknya dua bentuk:
melalui hubungan hierarki sumber daya (Kontak id 43 terdiri dari alamat 453):
/api/contacts/43/addresses/453
melalui tautan dalam respons json REST:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
Kembali ke OO, pola desain fasad menghormati a Low Coupling
antara objectA dan ' objectB client ' dan High Cohesion
untuk objectA ini dan komposisi objek internalnya ( objectC , objectD ). Dengan ObjectA antarmuka, ini memungkinkan pengembang untuk dampak batas objectB dari ObjectA perubahan internal (dalam objectC dan objectD ), selama ObjectA api (operasi) masih dihormati.
Dalam REST, data (sumber daya), hubungan (tautan), dan perilaku (kata kerja) diledakkan dalam berbagai elemen dan tersedia untuk web.
Bermain dengan REST, saya selalu berdampak pada perubahan kode antara klien dan server saya: Karena saya memiliki High Coupling
antara Backbone.js
permintaan saya dan Low Cohesion
antara sumber daya.
Saya tidak pernah menemukan cara untuk membiarkan Backbone.js javascript application
kesepakatan saya dengan penemuan " sumber daya dan fitur REST " dipromosikan oleh tautan REST. Saya mengerti bahwa WWW dimaksudkan untuk dilayani oleh multi server, dan bahwa elemen OO harus diledakkan untuk dilayani oleh banyak host di sana, tetapi untuk skenario sederhana seperti "menyimpan" halaman yang menunjukkan kontak dengan alamatnya, Saya berakhir dengan:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
yang mengarahkan saya untuk memindahkan tanggung jawab transaksi aksi atom pada aplikasi browser (karena dua sumber dapat diatasi secara terpisah).
Dengan mengingat hal ini, jika saya tidak dapat menyederhanakan pengembangan saya (Pola desain fasad tidak berlaku), dan jika saya membawa lebih banyak kompleksitas kepada klien saya (menangani penyelamatan atom transaksional), di mana manfaatnya tenang?
PUT /api/contacts/43
kaskade pembaruan ke objek batin? Saya memiliki banyak API yang dirancang seperti ini (URL master membaca / membuat / memperbarui "keseluruhan" dan sub-url memperbarui bagian-bagiannya). Pastikan Anda tidak memperbarui alamat ketika tidak ada perubahan yang diperlukan (untuk alasan kinerja).