Ön ve arka ucu tam yığın javascript ile ayırma yöntemleri?


31

Diyelim ki açısal, huysuz ve bower kullanılarak yazılmış, çoğunlukla tek sayfalık bir uygulama olan bir ön uç var. Ve sanırım, çoğunlukla sadece bir ORM'nin üzerinde oturan, bir veritabanından nesneleri depolayan / alan, grunt, express ve sequelize gibi nesneleri kullanan bir REST API'si olan bir arka uçum var.

Açısal uygulama, kullanıcının gördüğü tüm görsel şeyleri yapar, ancak bunu arka uç tarafından sağlanan hizmetler üzerine bir GUI olarak yapar.

Bunları iki farklı kod tabanına ayırmak, bağımsız geliştirme, versiyonlama, sürekli entegrasyon, geliştirmeye itme vb.

Sorum şu, bunu temiz bir şekilde yapmak için hangi yöntemler var? Tam yığınlı javascript için önerilen en iyi yöntemler var mı?

Seçenek # 1 bir monolith gibi görünüyor, yani "onları ayırmayın". Profesyonel, inşaat zincirinin basit olması ve her şeyin tek bir yerde olması - ancak birçok eksiler var; bağımsız olarak daha zor versiyonda kırılmış bir ön, konuşlandırılamaz bir sırt vb. anlamına gelir.

Seçenek # 2, ön uç yapı zincirinin arka uçlara bir sürü dosya yazmasıyla sonuçlandığı yarı-monolit gibi görünüyor. distVb ön uç küçültür, uglifies, bu çekip çeviren arka uç, yayınlamadan biter zaman ön uç dizin böylece esasen, arka uçta bazı dizine bakın olur.

Seçenek # 3 tam ayrılma gibi görünüyor: ön uç ve arka uç her biri farklı bağlantı noktalarında kendi sunucularını çalıştırıyor ve tamamen ayrı projeler. Dezavantajı, birbirlerinin portlarını bilmeleri için yapılandırılmış olmaları gerektiği görünüyor; arka uç CORS'un ön uçtan çıkmasına izin vermeli ve ön uç tüm bu bitiş noktalarının nerede olması gerektiğini bilmelidir.

Seçenek # 4, her şeyi bir araya getirmek için liman işçisi gibi bir şey kullanmak olabilir.

Eminim başka seçenekler de vardır. Önerilen en iyi uygulama nedir?

Yanıtlar:


18

Aralarında bir REST arayüzü ile bir ön uç, arka uç uygulama. Zaten tam bir ayrımın var.

Benim oyum, seçenek # 3’e göre. Yapılandırma, sıkı bir şekilde bağlanmış kod bağlamaları gerektirmeden tam olarak ayrılmanıza izin verir. CORS hakkında endişeleniyorsanız, her şeyi bir etki alanına koyun. CORS'unuz olması gerekiyorsa, bunu yönetmenin en iyi yolu bir yapılandırmadır.

Ancak burada "en iyi uygulama" yoktur. En iyi uygulama, özel ihtiyaçlarınızı en iyi şekilde karşılayacak olandır.


2
İki ayrı sunucu olsalar her şeyi bir etki alanına nasıl koyarsınız? Aynı konakta çalışsalar bile, farklı kökenlerde olmaları için farklı limanlarda olmaları gerekirdi.
FrobberOfBits

1
En iyi uygulama yoksa, bu yapılandırmanın nasıl yapıldığına dair mevcut örnekler var mı?
FrobberOfBits 27:15

7
Başvurunuzun önünde bir ters proxy (nginx) koymak ve monte edebilirsiniz /konumu localhost:3000(ön uç sunucusu) ve /api/karşı localhost:3001(API sunucusuna). nginx daha sonra varsayılan http portunu dinler.
nvartolomei

@ nvartolomei Ters proxy kullanmaya katılıyorum. Bazı bilgileri arka uç, ön uç ve rota bilgileri gibi temiz bir şekilde paylaşmanın bir yolu var mı? Ayrıca, ters proxy'nizi bir CDN'ye yönlendirmek kolay mıdır?
Andrew Allbright

6

Evet, ikisini ayırmalı ve ön uç uygulamasını bir üçüncü taraf uygulaması gibi değerlendirmelisiniz - sonunda başka bir müşteri, örneğin bir mobil uygulama ekleyebilir ve ilk müşteri bu şekilde oluşturulmuşsa hayatınız kolaylaşacaktır.

Docker kaplarını veya başka bir dağıtım sistemini kullanmak, çoğunlukla uygulamanızın ön ucu yalnızca çözülmesi gereken statik varlıklar olduğu için arka uçla ilgilidir. Bu varlıkları statik olarak sunucunuzda veya cloudfront benzeri bir CDN gibi başka bir yerde barındırabilirsiniz.

Kordonlardan kaçınmak size Küçük bir konfigürasyon kazandırır, ancak yukarıdaki cevabın bahsettiği gibi, asıl mesele budur. Kordonlar (ve token auth) kullanmak, arka uçlarınızı diğer müşteriler için de hazırlar.

Düzenleme: tam yığın js en iyi uygulamaları kadar - Ben sadece şunu söyleyebilirim, tutarlı olun. Eğer söz kullanıyorsanız (ve yapmalısınız), her iki tarafta da yapın. Aynı js stilini ve formatını koruyun, aynı test kütüphanelerini kullanın (mümkün olduğunda).

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.