Kömür madenindeki bir kanarya.
Yaklaşık bir yıldır böyle bir soru bekliyordum. Bu günün gelmesi kaçınılmazdı ve eminim önümüzdeki aylarda buna benzer daha birçok soru göreceğiz.
Uyarı işaretleri
Kesinlikle haklısınız, RESTful istemcileri oluşturmak SOAP istemcilerinden daha uzun sürer. SOAP araç kitleri, çok sayıda standart kod alır ve istemci proxy nesnelerini neredeyse hiç çaba harcamadan kullanılabilir hale getirir. Visual Studio ve bir sunucu URL'si gibi bir araçla, rastgele karmaşıklıktaki uzak nesnelere yerel olarak beş dakikadan daha kısa sürede erişebiliyorum.
Application / xml ve application / json döndüren hizmetler, istemci geliştiriciler için çok can sıkıcıdır. Bu veri bloğuyla ne yapmamız gerekiyor?
Neyse ki, REST hizmetleri sağlayan pek çok site, aynı zamanda bir dizi istemci kitaplığı da sağlar, böylece bu kitaplıkları, bir dizi güçlü türde nesneye erişim sağlamak için kullanabiliriz. Yine de biraz aptal görünüyor. SOAP kullanmış olsalardı, bu proxy sınıflarını kendimiz kod üretebilirdik.
SABUN tepegöz, ha. Öldüren gecikmedir. İnsanlar kablo üzerinden geçen fazla bayt sayısı konusunda gerçekten endişeliyse, o zaman HTTP doğru seçim olmayabilir. Kullanıcı aracısı başlığı tarafından kaç bayt kullanıldığını gördünüz mü?
Evet, HTML ve javascript dışında herhangi bir şey için hata ayıklama aracı olarak bir web tarayıcısı kullanmayı hiç denediniz mi? Güven bana berbat. Fiillerden yalnızca ikisini kullanabilirsiniz, önbelleğe alma sürekli olarak araya giriyor, hata işleme o kadar çok bilgiyi yutuyor ki, sürekli olarak lanet bir favicon.ico arıyor. Sadece bana ateş et.
Okunabilir URL. Sadece isimler, fiiller yok. Evet, sadece CRUD işlemlerini yaptığımız ve nesnelerin hiyerarşisine yalnızca tek bir yoldan erişmemiz gerektiği sürece bu kolay. Ne yazık ki çoğu uygulama bundan biraz daha fazla işlevselliğe ihtiyaç duyar.
Yaklaşan felaket
Şu anda sahip olduğunuz aynı sonuçlara varma sürecinde olan REST hizmetleriyle entegre olan uygulamalar geliştiren geliştiricilerin bir metrik yükü var. Basitlik, esneklik, ölçeklenebilirlik, evrim geçirebilirlik ve şans eseri yeniden kullanımın kutsal kasesi vaat edildi. Web'in kendisinin özellikleri, işler nasıl ters gidebilir.
Ancak, sürüm oluşturmanın da bir sorun olduğunu anlıyorlar, ancak derleyici sorunları tespit etmeye yardımcı olmuyor. El ile yazılmış istemci kodu, veri yapıları geliştikçe ve URL'ler yeniden düzenlenirken sürdürülmesi gereken bir sıkıntıdır. API'leri sadece isimler ve dört fiil etrafında tasarlamak gerçekten zor olabilir, özellikle RESTful Url zealotları sorgu dizelerini ne zaman kullanıp kullanamayacağınızı size söyler.
Geliştiriciler, hem Json formatlarını hem de Xml formatlarını desteklemek için neden çabalarımızı boşa harcadığımızı sormaya başlayacaklar, neden çabalarımızı sadece birine odaklanıp bunu iyi yapmayalım?
İşler nasıl bu kadar yanlış gitti
Sana neyin yanlış gittiğini söyleyeceğim. Biz geliştiriciler olarak pazarlama departmanlarının birincil zayıflığımızdan yararlanmasına izin veriyoruz. Gümüş kurşun için sonsuz arayışımız bizi REST'in gerçekte ne olduğu gerçeğine kör etti. Yüzeyde REST çok kolay ve basit görünüyor. Kaynaklarınızı URL'lerle adlandırın ve GET, PUT, POST ve DELETE'i kullanın. Cehennem, biz geliştiriciler bunu nasıl yapacağımızı zaten biliyoruz, yıllardır tabloları, sütunları ve SELECT, INSERT, UPDATE ve DELETE içeren SQL ifadeleri olan veritabanları ile uğraşıyoruz. Bir parça kek olmalıydı.
Kendini tanımlayabilme ve hiper ortam kısıtlaması gibi bazı kişilerin tartıştığı REST'in başka bölümleri de vardır, ancak bu kısıtlamalar kaynak tanımlama ve tek tip arayüz kadar basit değildir. Görünüşe göre, istenen hedef basitliktir.
REST'in bu sulandırılmış sürümü, geliştirici kültüründe birçok yönden doğrulanmıştır. Kaynak Tanımlamayı ve tek tip arabirimi teşvik eden ancak diğer kısıtlamaları desteklemek için hiçbir şey yapmayan sunucu çerçeveleri oluşturuldu. Yaklaşımlar, (HI-REST vs LO-REST, Corporate REST vs Academic REST, REST vs RESTful) farklılaşan terimler etrafında dalgalanmaya başladı.
Birkaç kişi, tüm kısıtlamaları uygulamazsanız, bunun REST olmadığını haykırıyor. Faydaları alamayacaksın. Yarı DİNLENME yok. Ancak bu sesler, kıymetli terimlerinin bilinmezlikten çalınması ve ana akım haline getirilmesi nedeniyle üzülen dini fanatikler olarak etiketlendi. REST'i olduğundan daha zor hale getirmeye çalışan kıskanç insanlar.
REST terimi, kesinlikle ana akım haline geldi. Bir API'ye sahip hemen hemen her büyük web mülkü "REST" i destekler. Twitter ve Netflix çok yüksek profilli iki tanesidir. Korkunç olan şey, yalnızca kendi kendini tanımlayan bir genel API düşünebiliyorum ve hiper ortam kısıtlamasını gerçekten uygulayan bir avuç var. StackOverflow ve Gowalla gibi bazı sitelerin yanıtlarında bağlantıları desteklediğinden emin olun, ancak bağlantılarında büyük boşluklar var. StackOverflow API'nin kök sayfası yoktur. Web sitesi için bir ana sayfa olmasaydı web sitesinin ne kadar başarılı olacağını bir düşünün!
Kandırıldın korkarım
Şimdiye kadar yaptıysanız, sorunuzun kısa cevabı şu API'lerin (Netflix ve Twitter) tüm kısıtlamalara uymamasıdır ve bu nedenle REST apis'in getirmesi gereken faydaları elde edemezsiniz.
REST istemcilerinin oluşturulması SOAP istemcilerinden daha uzun sürer, ancak bunlar belirli bir hizmete bağlı değildir, bu nedenle bunları hizmetlerde yeniden kullanabilmeniz gerekir. Bir web tarayıcısının klasik örneğini ele alalım. Bir web tarayıcısı kaç hizmete erişebilir? Peki ya Feed Okuyucu? Şimdi ortalama Twitter istemcisi kaç farklı hizmete erişebilir? Evet, sadece bir.
REST istemcilerinin tek bir hizmetle arabirim oluşturacak şekilde oluşturulmaması gerekir, herhangi bir hizmet tarafından sunulabilecek belirli ortam türlerini işlemek için oluşturulmaları gerekir. Buradaki açık soru, application / json veya application / xml sağlayan bir hizmet için bir REST istemcisini nasıl oluşturabileceğinizdir. Yapamazsın. Bunun nedeni, bu formatların bir REST istemcisi için tamamen yararsız olmasıdır. Kendin söyledin,
gerçek bir şema veya referans belgesi olmadığı için borudan neyin geri geleceği konusunda "tahminler" yapmanız gerekir
Twitter gibi hizmetler için kesinlikle haklısınız. Bununla birlikte, REST'teki kendi kendini tanımlayan kısıtlama, HTTP içerik türü başlığının kablo üzerinden iletilen içeriği tam olarak tanımlaması gerektiğini söyler. Application / json ve application / xml'yi sunmak size içerik hakkında hiçbir şey söylemez.
REST tabanlı sistemlerin performansı düşünüldüğünde, büyük resme bakmak gerekir. Zarf baytları hakkında konuşmak, hızlı sıralamayı kabuk sıralamasıyla karşılaştırırken döngü çözülmesinden bahsetmek gibidir. SOAP'ın daha iyi performans gösterebileceği senaryolar vardır ve REST'in daha iyi performans gösterebileceği senaryolar vardır. Bağlam her şeydir.
REST, hangi medya türlerini desteklediği konusunda çok esnek davranarak ve önbelleğe alma için gelişmiş desteğe sahip olarak performans avantajının çoğunu kazanır. Önbelleğe almanın iyi çalışması için neredeyse tüm kısıtlamalara uyulması gerekir.
Okunabilir url'ler hakkındaki son noktanız, en ironik olanıdır. Hiper ortam kısıtlamasına gerçekten bağlı kalırsanız, her URL bir GUID olabilir ve istemci geliştiricisi okunabilirlikte hiçbir şey kaybetmez.
URI'lerin istemciye opak olması gerektiği gerçeği, REST sistemlerini geliştirirken en önemli şeylerden biridir. Okunabilir URL'ler sunucu geliştiricisi için uygundur ve iyi yapılandırılmış URL'ler, sunucu çerçevesinin istekleri göndermesini kolaylaştırır, ancak bunlar API'yi tüketen geliştiriciler üzerinde hiçbir etkisi olmaması gereken uygulama ayrıntılarıdır.
Twitter API RESTful olmaya yakın bile değil ve bu yüzden SABUN üzerinden kullanmanın herhangi bir yararı göremiyorsunuz. Netflix API çok daha yakındır, ancak genel medya türlerinin kullanılması, tek bir kısıtlamaya bile uyulmamasının hizmetten elde edilen faydalar üzerinde derin bir etkisi olabileceğini göstermektedir.
Hepsi onların suçu olmayabilir
Hizmet sağlayıcılara bir sürü damping yaptım, ancak DİNLENMEK için dans etmek iki kişi alır. Bir hizmet, tüm kısıtlamaları dini olarak takip edebilir ve bir müşteri yine de tüm faydaları kolayca geri alabilir.
Bir istemci belirli kaynak türlerine erişmek için URL'leri sabit kodluyorsa, sunucunun bu URL'leri değiştirmesini engelliyor demektir. Hizmetin url'lerini nasıl yapılandırdığına dair örtük bilgiye dayalı her türlü URL yapısı bir ihlaldir.
Bir bağlantıdan ne tür bir temsilin döndürüleceğine ilişkin varsayımlarda bulunmak sorunlara yol açabilir. HTTP başlıklarında açıkça belirtilmeyen bilgiye dayalı olarak temsilin içeriği hakkında varsayımlar yapmak, kesinlikle ileride acıya neden olacak bir bağlantı oluşturacaktır.
SABUN kullanmalı mıydı?
Şahsen ben öyle düşünmüyorum. Doğru yapılan REST, dağıtılmış bir sistemin uzun vadede gelişmesine izin verir. Farklı insanlar tarafından geliştirilen ve uzun yıllar dayanması gereken bileşenlere sahip dağıtılmış sistemler kuruyorsanız, REST oldukça iyi bir seçenektir.