Web uygulamalarını arka uçlarına ve ön yüzlerine tamamen ayırmak ve (JSON) REST API ile iletişim kurmalarına izin vermek normal bir tasarım mıdır?


21

Yeni iş web uygulaması oluşturuyorum ve ulaşmak istiyorum:

  • Kendi alanlarındaki en iyi teknolojileri kullanın. Sağlam ORM ile güvenilir bir arka uç çerçevesi istiyorum. Ve ön uç uygulama için en güncel HTML ve Javascript özelliklerinin kullanımıyla en gelişmiş SPA (tek sayfa uygulama) çerçevesini istiyorum.
  • Web uygulamaları, mobil (Android) ve muhtemelen diğer türlerdeki (akıllı cihazlar vb.) Farklı uygulama türlerinden kullanım için arka uç varlıkları ve iş hizmetlerini gösterin.

Yani - her iki gereksinimi karşılamak için , arka uç ve ön uç uygulamalarındaki uygulamamı tamamen ayırmaya ve aralarındaki iletişimi REST API (JSON) kullanarak düzenlemeye meyilliyim . Bu ses yaklaşımı mı?

Bu tür bir ayrım açık bir tasarım çözümü değildir, çünkü birçok web uygulama teknolojisi, sunucu tarafı uygulamasının görünümün oluşturulmasını az ya da çok kontrol ettiği ve görünümden gelen yanıtları kısmen ele aldığı entegre görüntü katmanlarına sahiptir (örneğin, görüntü katmanına sahip SpringMVC, görüntüye sahip PHP Yii katman, Java JSF / Facelets bileşenlerinin durumunu sunucuya tamamen kaydeder). Yani - etrafında daha güçlü bir bağlantı öneren ve daha hızlı gelişme süresi ve daha standart yol yolculuğu vaat eden birçok teknoloji var. Bu yüzden - Teknolojileri yaygın olarak kullanılmayan bir şekilde kullanmaya başlarken dikkatli olmalıyım.

Anladığım kadarıyla tamamen ayrılmış SPA ön yüzü genellikle üçüncü taraf API kullanma zorunluluğundan doğar. Ancak , hem arka uç hem de ön uç bir şirket tarafından geliştirildiğinde böyle bir ayrıştırma ses tasarımı var mı?

Şu andaki teknolojilerim şu anda Java / Spring backend ve Angular2 / Web Components / Polymer'dir. Ancak bu, bu soru için önemli değil çünkü bu soru, genel teknolojiyle değil, somut teknolojilerin seçimi ile ilgili değil mi?


8
(1). Evet. Şimdi bu şekilde gitmek bir gün normaldir.
Laiv

5
(2). So - I must be cautious when starting to use technologies in manner which is not widely used.Evet, ipek atmak için bir çekiç kullanmayı planlıyorsanız, dikkatli olmalısınız. Belki de doğru araç değildir.
Laiv'te

3
Böylesine titiz bir şekilde ayrılmanın, belirgin bir ön geliştirme maliyeti yarattığını unutmayın. Bundan somut bir değer elde etmeniz gerekir.
usr

2
Ayrıca, etki alanınızı hiçbir zaman doğrudan tarayıcıya maruz bırakmayacağınızı da unutmayın. Bu, güvenlik sorunları yaratır ve veriler görüntülenmek üzere uygun şekilde biçimlendirilmez. Sadece JavaScript'in araması için özel bir amaç (REST) ​​arayüzü oluşturmanız gerekecektir. Ve bu birleşti.
usr

1
Bahar, PathVariable, ResponseBody, RequestBody ve RestController ek açıklamalarına sahiptir (Bunları kontrol etmelisiniz). Ajax tabanlı JSON / REST web uygulamalarını geliştirmeyi çok, çok kolay hale getiriyorlar, bu da Bahar'ı SPA için harika bir arka uç yapıyor. Ön ucu ve arka ucu bu şekilde ayırmanın daha iyi bir seçim olduğuna inanıyorum: Birlikte çalışmak için "zevk" olan klasik JSF uygulamaları bir karışıklıktı.
Traubenfuchs

Yanıtlar:


14

Web uygulamalarını arka uçlarına ve ön yüzlerine tamamen ayırmak ve (JSON) REST API ile iletişim kurmalarına izin vermek normal bir tasarım mıdır?

Evet normal. Ancak bu tür bir ayırım yapmanız gerekiyorsa ve bu ayarı genel uygulamanıza zorlamıyorsanız normaldir.

Bir SPA, onunla ilgili birkaç sorunla birlikte gelir. İşte şimdi aklımda pop sadece birkaç:

  • çoğunlukla JavaScript. Uygulamanızın bir bölümündeki bir hata, bu Javascript hatası nedeniyle uygulamanın diğer bölümlerinin çalışmasını engelleyebilir. Sunucudan sunulan sayfalarla (SpringMVC, PHP, vb.) Yeni bir bölüm yeniden yüklersiniz;
  • CORS . Zorunlu olmamakla birlikte, genellikle arka uç, ön uçtan farklı bir alan adındadır. Yani şimdi tarayıcı güvenlik sorunları ile uğraşmak zorundasınız;
  • SEO . Buna ihtiyacın var mı? Siteniz herkese açık mı? Google, Javascript’i anlayabilir ve sitenizden bir anlam çıkarmaya çalışabilir, ancak temel olarak bir botun denetimini ve en iyisini umduğunuzu umursunuz. Kontrolü geri almak, PhantomJS gibi başka araçlara güvenmek zorunda kalabilir .
  • ayrı ön uç uygulaması, ayrı projeler, dağıtım boru hatları, ekstra takımlar, vb. anlamına gelir;
  • tüm kod istemcideyken güvenlik yapmak zordur;

Tabii ki, SPA avantajları da var:

  • kullanıcıyla ön uçta tamamen etkileşimde bulunun ve yalnızca sunucudan gerektiği kadar veri yükleyin. Böylece daha iyi tepki ve kullanıcı deneyimi;
  • uygulamaya bağlı olarak, istemcide yapılan bazı işlemler, bu hesaplamaların sunucusunu ayırdığınız anlamına gelir.
  • arka ucu ve ön ucu geliştirmede daha iyi bir esnekliğe sahip olmak (ayrı olarak yapabilirsiniz);
  • arka ucunuz aslında bir API ise, yerel Android / iPhone uygulamaları gibi önünde diğer istemcilere sahip olabilirsiniz;
  • ayrım, ön uç geliştiricilerin makinelerinde çalışan bir sunucu uygulamasına ihtiyaç duymadan CSS / HTML yapmasını kolaylaştırır.

Yani, her iki yaklaşımın da avantajları ve dezavantajları var (SPA - sunucu sayfaları). Her iki seçeneği de araştırmaya biraz zaman ayırın ve ardından durumunuza göre seçim yapın.


11
"tüm kod istemcideyken güvenlik yapmak daha zor;" ehm, bunun büyük bir avantajı yoktur, güvenlik yapmak daha kolaydır, çünkü mantıklı ve anlaşılması kolay bir şekilde tasarlanmış, korumanız gereken çok net bir katmandır.
David Mulder

3
@DavidMulder: Net katman güvenliği sayesinde tüm işlemleri yapmak zordur, ancak doğru şekilde yapmak daha kolaydır. Net bir bölünme olmadan, zaman zaman yanıltıcı ama yanlış olan bir şeyi kırbaçlayabilirsiniz ;-)
Steve Jessop

1

Sorunuza cevap basit. Evet. Teklif ettiğin şey sağlam bir yaklaşım. Ama sonra sormak istediğin şeyin daha iyi bir yaklaşım olup olmadığı ve ne yazık ki hiçbirimiz sizin için cevaplayamıyoruz. Bu faktörler, hem organizasyonunuz hem de ürün gereksinimleriniz hakkındaki her şeyi açıklamayacak şekilde gerçek bir sonuç alınamayacak kadar çok sayıda yüzeye yayılmaktadır. Bence zaten ne yapacağını zaten biliyorsun.


0

Uyarılarla normal.

ön uç javascript çerçeveleri yapabilecekleri ile sınırlıdır. Birden fazla uygulama tarafından kullanılmak üzere ham apis oluşturursanız, genellikle ham api çağrılarının bazı sunucu tarafı işlemlerini gerektirir, bu belirli uygulama ile çalışan modelleri görüntüleyin.

Dolayısıyla 'normal' bir mimari olabilir:

database
business logic services (dll)
api exposing business logic
server side website exposing viewmodels and functionality via json rest endpoints
client side javascript implementing ui

Artık yalnızca bir web uygulamanız varsa, 'api açığa çıkaran iş mantığı' katmanını kesebilir ve sadece sunucu tarafındaki web kodunun doğrudan iş mantığını çağırmasını sağlayabilirsiniz.

Çünkü iş mantığını kendi kütüphanesine ayırdınız, hala kullanıcı arayüzü mantığından ayrıldı ve daha sonra her zaman bir servis katmanı ekleyebilirsiniz.

Benzer şekilde, api servisi sunucu tarafı kodu ile çağrıldığı için, http iletişimi sınırlı değilsiniz. (bu şu anda oldukça evrensel olmasına rağmen)

Ek olarak, javascript’in, sunucuyla aynı sunucuyu çağırması, cors ile uğraşmanıza gerek kalmaması anlamına gelir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.