REST yapısı ile bir OO modelinin karşılaştırılmasında şu benzerlikleri görüyorum:
Her ikisi de:
Veri odaklı mı
- REST = Kaynaklar
- OO = Nesneler
Verilerin etrafında surround çalışma
- REST = Surround VERBS (Al, Gönder, ...)
- OO = kapsülleme yoluyla nesnelerin etrafındaki işlemi teşvik
Bununla birlikte, örneğin cephe modelini uygulamaya çalışırken iyi OO uygulamaları her zaman REST API'leri üzerinde durmaz: REST'te, tüm istekleri işlemek için 1 denetleyiciniz yoktur VE dahili nesne karmaşıklığını gizlemezsiniz.
Aksine, REST bir kaynakla ve diğerleriyle olan tüm ilişkilerin en az iki biçimde yayınlanmasını teşvik eder:
Kaynak hiyerarşi ilişkileri yoluyla (43 numaralı bir kişi 454 numaralı bir adresten oluşur):
/api/contacts/43/addresses/453
bir REST json yanıtındaki bağlantılar aracılığıyla:
>> GET /api/contacts/43 << HTTP Response { id: 43, ... addresses: [{ id: 453, ... }], links: [{ favoriteAddress: { id: 453 } }] }
OO'ya dönersek , cephe tasarım modeli Low Coupling
bir objectA ile onun ' objectB istemcisi ' arasında ve High Cohesion
bu objectA ve onun dahili nesne kompozisyonu ( objectC , objectD ) arasında bir a'ya saygı duyar . İle ObjectA arayüzünde, bu sınırı etkisiyle bir geliştirici izin objectB ait ObjectA (iç değişikliklere objectC ve objectD sürece,) ObjectA hala saygı API (operasyonlar).
REST'te, veriler (kaynak), ilişkiler (bağlantılar) ve davranış (fiiller) farklı öğelerde patlatılır ve web tarafından kullanılabilir.
REST ile oynamak, her zaman istemcim ve sunucu arasındaki kod değişiklikleri üzerinde bir etkisi var: Çünkü High Coupling
benim Backbone.js
istekleri Low Cohesion
arasında ve kaynaklar arasında.
REST bağlantıları tarafından tanıtılan Backbone.js javascript application
" REST kaynakları ve özellikleri " keşfi ile nasıl başa çıkabileceğimi asla anlayamadım . WWW'nin çoklu sunucular tarafından sunulması gerektiğini ve OO öğelerinin orada birçok ana bilgisayar tarafından hizmet verilmek üzere patlatılması gerektiğini, ancak adresleriyle bir kişiyi gösteren bir sayfayı "kaydetmek" gibi basit bir senaryo için, Ben sonunda:
GET /api/contacts/43?embed=(addresses) [save button pressed] PUT /api/contacts/43 PUT /api/contacts/43/addresses/453
bu da kaydetme eylemini tarayıcı uygulamalarında atom işlemsel sorumluluğunu taşımama yönlendiriyor (çünkü iki kaynak ayrı ayrı ele alınabilir).
Bunu göz önünde bulundurarak, gelişimimi basitleştiremezsem (Cephe tasarım desenleri geçerli değil) ve müşterime daha fazla karmaşıklık getirirsem (işlemsel atomik tasarruf işlemek), RESTful olmanın faydası nedir?
PUT /api/contacts/43
İç nesneler için güncellemeleri basamaklandırmayla ilgili sorun nedir ? Ben böyle tasarlanmış API bir sürü vardı (ana URL okur / oluşturur / "bütün" ve alt urls parçaları günceller). Hiçbir değişiklik gerekmediğinde (performans nedenleriyle) adresi güncellemediğinizden emin olun.