Bu “anti-desen” mi ve kullanmayı bırakmalı mıyım yoksa bu akıllı tasarım mı?


10

Temelde bir REST hizmeti oluştururken aşağıdakileri yapmaya baktım:

  1. HTML isteniyor
  2. hizmet istenen web sayfasını döndürür ancak istenen "kaynak" olmadan, ör. veri
  3. web sayfası aynı hizmete AJAX isteği gönderen JavaScript içeriyor (farklı içerik türü)
  4. hizmeti daha sonra gerçek verileri (JSON) döndürür ve sayfa verileri görüntüler

Bir tarafta verimsiz görünüyor (2 istek), ancak daha sonra bunu kullandım, "performans kaygısız", yani düşük trafikli dahili uygulama ve web siteleri basit ve hızlı yük.

Bununla sonuçlanan nedeni, web sayfasının neredeyse saf Html + JavaScript olabileceği ve bunun gibi tablolar ve şeyler oluşturmak için neredeyse hiç sunucu tarafı malzeme gerekmiyor, özellikle döngüler yok (ki bu çok çirkin olduğunu düşünüyorum) slickgrid gibi şeyler), örneğin verilerin ayrılması ve görünüm.

Bunu kullanmaya başlamadan önce, bu iyi bir fikir mi yoksa sadece yapmayı bırakmalı mıyım?


2
Sevdiklerinizle daha fazla zaman geçirmek istiyorsanız ve hobilerin tadını çıkarmak ya da kişisel hedeflerin peşinde koşmak için serbest zamanınız varsa, o zaman Tanrı aşkına: Böyle uygulamaları programlamayın! Ama gece geç saatlerde ve hafta sonları "zeki" kodunu korumak ofisinde kalmak gibi isterseniz o zaman kendinize uygun.
Tulains Córdova

3
Kötü olduğunu düşündüğünüz şeyi özellikle açıklayabilir misiniz? Bağlam: Bu, iş açısından kritik bir 10 Mio LOC canavarı değildir. Daha çok 5000 LOC'ye benziyor ve birkaç gün boyunca işe yaramıyorsa önemli değil. Evet, öyle değil ki boktan şeyler yapmalıyım, bu yüzden çok kötü olduğunu düşündüğünüzü ebatlandırın.
beginner_

@begginer_ Her yazılım küçük başlar. Açıkladığınız şey bir Rube Goldberg Makinesini yeniden birleştirir: çekiç insana vurur, adam bisküvi düşer, papağan kapmak bisküvi ve vazo yatırır, vb.
Tulains Córdova

Bunun yapılmasının nedeni genellikle, verilerin getirilmesinin farklı sunucular olabileceğine ilişkin birden fazla eşzamanlı istekle yapılabileceği performansı arttırmaktır. Bu sizin durumunuz için geçerli gibi görünmüyor.
user16764

Bu hizmeti komut dosyaları veya istemciler gibi istemcilerden nasıl kullanıyorsunuz? Bu şeylerin javascript tercümanları yok. Bu yalnızca tarayıcı hizmeti için mi?
Bryan Oakley

Yanıtlar:


17

Bir kaynak talep ederseniz ve veri içermiyorsa, REST hizmeti değil. Json'da gerçek verileri sağlayan servis olabilir, ancak HTML kısmı değildir. Bir web uygulaması için önemli değil.

Teknik çalışır, ancak sınırlamalarının farkında olmanız gerekir:

  1. Arama motorları JavaScript'i yorumlamaz, bu nedenle bu şekilde uygulanan site Google ve benzerleri tarafından dizine eklenemez. Dahili uygulama için önemli değil, halkın karşı karşıya gelmesi için çok önemlidir.
  2. Özel ihtiyaçları olan kullanıcılar (Braille terminalleri kullananlar gibi) oldukça sınırlı olan ve JavaScript'i düzgün yorumlayamayacak özel tarayıcılar kullanır.

Ayrıca HTML üreten kodun sunucu tarafında mı yoksa istemci tarafında mı çalıştığı temelde aynıdır. Sunucu tarafında hem dil hem de çerçeve seçenekleri çok daha büyük ve eminim slickgrid birkaç eşdeğer olduğundan eminim.

Sunucu tarafında veri ve görüntü ayrımı yapmaya devam edebilir ve devam ettirebilirsiniz. Şablon sistemi, verileri veri yapısı veya hatta json (özellikle de gerçek hizmet, şablon sisteminden farklı bir dilde ise) olarak alabilir ve almalıdır ve bu verileri içeren bir şablonu genişletebilir.

Ve hayır, PHP hakkında düşünmüyorum; orada en az yetenekli şablon sistemidir (bunun üzerine inşa edilmiş daha iyi olanlar da vardır). Genshi veya XSLT veya web widget'ları sağlayan daha gelişmiş bir şey düşünüyorum .


Tam olarak bunu yapan yağ istemcilerini JavaScript'e yazıyorum. Ancak normal web siteleri için muhtemelen kötü bir fikirdir.
K ..

Neden REST değil?
Ocak'ta dagnelies

1
Uygulamayı oluşturan "veri" (HTML, JS, CSS, vb.) Ve uygulamanın görüntülediği "veri" (JSON) arasında ayrım yaparsanız JSON kısmı REST'tir, ancak "kod" yükleyen kısım t. Eğer her şeyi daha soyut görürseniz, ikisi de öyle.
K ..

2

Kodunuzu temiz bir şekilde yapılandırdığınızdan emin olduğunuz sürece, bununla ilgili yanlış bir şey yoktur. Statik içeriği web hizmetiniz yerine bir Apache'den bile sunabilirsiniz.


2
Apache, statik içerik için aşırı doldurmadır. Çok daha hızlı sunucular var. En popüler Nginx gibi görünüyor .
Jan Hudec

5
Bu bir örnekti, başka bir şey değildi.
Steven Schlansker

2

Bu iyi bir uygulamadır. Ve her zaman yapılır, @JanHudec'in belirttiği gibi althogugh, bir REST hizmeti olarak adlandırmak yanlıştır. Ancak birçok web sitesi bunu tam olarak belirttiğiniz nedenlerle yapıyor.


1
... ve birçoğunun bunu yapmasının en büyük nedeni, veri etkileşiminin yine de hizmetler / JSON aracılığıyla olmasıdır , bu nedenle tüm veri etkileşimlerinizi aynı şekilde ele almak daha iyidir. (yani bir tabloyu yenilemek için AJAX kullanıyorsanız ... tabloyu ilk etapta oluşturmak için de kullanmalısınız.)
Chad Thompson

Evet @ChadThompson, ben çok zaman ben eğer bulmak değil dinamik bir şeyler yapıyor istemci dayalı sayfasını güncellemek için ilk etapta bu gibi şeyler inşa yere satır aşağı bir özellik isteği alırsınız - hangi artık basit bir uygulamanın hem istemciye hem de sunucuya sayfanın nasıl oluşturulacağını bilmesini sağlar. İlk etapta sadece istemci üzerinde inşa etmek daha kolaydır.
Tacroy

1

Buna bir anti-desen demezdim, tarif ettiğiniz şey , Trello gibi hizmetlerin aksine, az ya da çok şişman bir müşteri . Sunucunun ilk sorumluluğu DOM'yi ve istemcinin çalışması için gereken kaynakları göndermektir. Veri merkezi otomasyonu ve ağ izleme alanlarında benzer projeler üzerinde çalıştım.

İstemci seyrek bir DOM olarak başlar, bazı verileri XHR aracılığıyla (bazen JSONP aracılığıyla) çeker ve sonunda kendisini bir soket sunucusuna bağlar. Daha da temel bir örnek, bir sohbet uygulaması olacaktır.

Tek nedeni değil bunu yapmak için doğru almak için son derece zor olabilir olmasıdır. Eşzamansız fonksiyonel programlamadan ve karşılaşabileceği tüm yarışlardan ve diğer zorluklardan memnunsanız, bunu korumakta sorun yaşamazsınız. Daha da önemlisi, yazarken sorun yaşamayacaksınız, böylece diğer insanlar sonunda bakımını yapabilirler.

Daha fazla özellik ekleme düşüncesi sizi korkutmaya başlarsa veya hata ayıklamanın bir kabus olduğunu bulmaya başlarsanız, denemeye ve öğrenmeye devam ederken üretimdeki diğer yöntemleri de düşünebilirsiniz.

Kendiniz için bir delik kazmadığınız sürece geçerli bir tasarımdır. Temiz bir arayüz yerine her yerde rastgele JS gobs ve gobs varsa, muhtemelen yeniden faktör veya proje farklı gitmek istiyorum. Tüm kaynaklar yüklendikten sonra çalıştırılacak şekilde tanımlanan işlevlerin çoğu anonim olmalı ve temiz bir arayüzden girilmelidir. Eğer değillerse, belaya gidebilirsiniz.


"Rastgele JS" ile ne demek istiyorsun? Benim durumumda yukarıda açıkladığınız şey, sahip olduğumdan çok daha karmaşıktır (birkaç giriş alanı ve bir tablo (slickgrid) veya jquery ui sekmeleri). İşte bu. Sayfa başına yaklaşık 200 LOC.
beginner_

0

@Jan Hudec'in dediği gibi, yaklaşımınız kesinlikle REST olarak adlandırılamaz. Gerçi istemci bir kaynak için istediği kısım olabilir. İstemcinin sunum bölümünü ele alması daha iyidir backbone. Kaynaklar için REST sunucusuyla iletişim kurar ve bunları kullanarak görüntüler views.


0

Bu bir anti-desen olabilir, ama aynı zamanda web uygulamalarının geleceği olduğunu düşünüyorum. Bununla birlikte, JavaScript ile uğraşmak yerine, en azından bir şablon kütüphanesi kullanmalısınız. Daha iyi bir çözüm AngularJS gibi bir istemci tarafı MVC çerçevesidir (ki şimdi kullanıyorum).

Bazı referanslar için, birkaç çerçeveyi karşılaştıran popüler bir blog yazısı ve aynı programı birden çok çerçeve kullanarak uygulayan bir site .

Ayrıca: Jan Hudec'in arama motoru etkileşimi ve ekran okuyucuları hakkındaki yorumları geçerlidir. Bir e-Ticaret sitesinde (pagerank önemli olan) çalışıyorsanız, muhtemelen istemci tarafı çerçeveleri kullanmak istemezsiniz. Ancak dahili uygulamalar için bunlar genellikle endişe verici değildir.


thx AngularJS'yi hiç duymadı. Ama şu anki ihtiyaçlarım için çok fazla olduğunu düşünüyorum.
beginner_

0

Yaptığınız iş kulağa hoş geliyor! Ancak json yanıtlarınız herhangi bir HTML içeriyorsa, zamanınızı boşa harcarsınız.

Başka bir nokta da aptal müşterinizin json verilerini muhtemelen farklı bir projeden alması gerektiğidir. Müşteri ve hizmet arasında doğru bir ayrım yapmayı hedeflemelisiniz, o zaman uygun bir RESTful hizmetiniz olacaktır

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.