Karısı: Roy Fielding kim?
Ryan: Bir adam. O akıllı.
Karısı: Ah? Ne yaptı?
Ryan: İlk web sunucularının yazılmasına yardımcı oldu ve ardından web'in neden bu şekilde çalıştığını açıklayan bir ton araştırma yaptı. Adı, sunuculardan tarayıcınıza sayfa almak için kullanılan protokolün spesifikasyonundadır.
Karısı: Nasıl çalışır?
Ryan: Web?
Karısı: Evet.
Ryan: Hımm. Aslında hepsi oldukça şaşırtıcı. Ve komik olan şey, her şeyin çok değerli olması. Bahsettiğim protokol HTTP, insanların bir nedenden dolayı görmezden geldiği her türlü temiz şeyi yapabiliyor.
Karısı: http'yi tarayıcıya yazdıklarımın başlangıcı gibi mi demek istiyorsun?
Ryan: Evet. Bu ilk bölüm tarayıcıya hangi protokolü kullanacağını söyler. Buraya yazdığınız şeyler bilgi işlem tarihindeki en önemli atılımlardan biridir.
Karısı: Neden?
Ryan: Çünkü dünyanın herhangi bir yerindeki bir şeyin yerini dünyanın herhangi bir yerinden tanımlayabiliyor. Web'in temeli budur. Bilgi ve bilgi için GPS koordinatları gibi düşünebilirsiniz.
Karısı: Web sayfaları için mi?
Ryan: Gerçekten her şey için. O adam Roy Fielding, bahsettiğim araştırmada bu şeylerin neye işaret ettiği hakkında çok konuşuyor. Web, REST adında bir mimari tarz üzerine inşa edilmiştir. REST, kaynakların bir tanımını sağlar;
Karısı: Web sayfası bir kaynak mı?
Ryan: Bir çeşit. Web sayfası, bir kaynağın temsilidir. Kaynaklar sadece kavramlardır. URL'ler - tarayıcıya yazdığınız şeyler ...
Karısı: URL'nin ne olduğunu biliyorum ..
Ryan: Ah, doğru. Bunlar tarayıcıya bir yerde bir kavram olduğunu söyler. Bir tarayıcı daha sonra kavramın belirli bir temsilini isteyebilir. Özellikle, tarayıcı kavramın web sayfası temsilini ister.
Karısı: Başka ne tür temsiller var?
Ryan: Aslında, temsiller çok fazla kullanılmayan bu şeylerden biridir. Çoğu durumda, bir kaynağın yalnızca tek bir temsili vardır. Ancak, gelecekte temsillerin daha fazla kullanılacağını umuyoruz, çünkü her yerde bir sürü yeni format var.
Karısı: Ne gibi?
Ryan: Hımm. İnsanların Web Hizmetleri dediği bir kavram var. Bu, birçok farklı insan için birçok farklı şey anlamına gelir, ancak temel kavram, makinelerin web'i tıpkı insanlar gibi kullanabileceği.
Karısı: Bu başka bir robot şey mi?
Ryan: Hayır, pek değil. Makinelerin masada oturacağı ve internette dolaşacağı anlamına gelmez. Ancak bilgisayarlar, iletileri birbirlerine arka arkaya göndermek için aynı protokolleri kullanabilir. Bunu uzun zamandır yapıyoruz, ancak bugün kullandığımız tekniklerin hiçbiri, tüm dünyadaki tüm makinelerle konuşmanız gerektiğinde iyi çalışmıyor.
Karısı: Neden olmasın?
Ryan: Çünkü böyle kullanılmak üzere tasarlanmamışlardı. Fielding ve arkadaşları web'i oluşturmaya başladığında, dünyanın herhangi bir yerindeki herhangi bir makineyle konuşabilmek birincil endişeydi. Bilgisayarların birbirleriyle konuşmasını sağlamak için işte kullandığımız tekniklerin çoğunun bu gereksinimleri yoktu. Sadece küçük bir makine grubuyla konuşman gerekiyordu.
Karısı: Ve şimdi tüm makinelerle konuşman gerekiyor mu?
Ryan: Evet - ve dahası. Diğer makinelerdeki tüm şeyler hakkında tüm makinelerle konuşabilmeliyiz. Bu nedenle, bir makinenin başka bir makineye başka bir makinede olabilecek bir kaynak hakkında bilgi vermesinin bir yoluna ihtiyacımız var.
Karısı: Ne?
Ryan: Diyelim ki kız kardeşinle konuşuyorsun ve süpürgeyi ödünç almak istiyor. Ama sende yok - annende var. Yani kız kardeşine bunun yerine annenden almasını söylersin. Bu gerçek hayatta her zaman olur ve makineler de konuşmaya her zaman olur.
Karısı: Peki makineler birbirlerine şeylerin nerede olduğunu nasıl söyler?
Ryan: Elbette URL. Makinelerin konuşması gereken her şeyin karşılık gelen bir URL'si varsa, bir adın makine eşdeğerini oluşturdunuz. Sen ve ben ve dünyanın geri kalanının isimler hakkında belirli bir şekilde konuşmayı kabul ettiğimiz oldukça önemli, değil mi?
Karısı: Evet.
Ryan: Makinelerin evrensel bir ismi yok - bu yüzden emiyorlar. Her programlama dili, veritabanı veya diğer sistem türlerinin isimler hakkında konuşmanın farklı bir yolu vardır. Bu yüzden URL çok önemlidir. Tüm bu sistemlerin birbirlerinin isimlerini anlatmasına izin verelim.
Karısı: Ama bir web sayfasına bakarken böyle düşünmüyorum.
Ryan: Kimse bilmiyor. Fielding ve bir avuç insan hariç. Bu yüzden makineler hala emiyor.
Karısı: Fiiller, zamirler ve sıfatlar ne olacak?
Ryan: Komik sordun çünkü bu REST'in bir başka büyük yönü. Fiiller zaten.
Karısı: Sadece şaka yapıyordum.
Ryan: Komik bir şakaydı ama aslında hiç şaka değil. Fiiller önemlidir. Programlama ve CS teorisinde polimorfizm adı verilen güçlü bir kavram vardır. Bu, farklı isimlerin kendilerine aynı fiili uygulayabileceğini söylemenin geeky bir yoludur.
Karısı: Anlamıyorum .
Ryan: Şey .. Sehpaya bak. İsimler nelerdir? Kupa, tepsi, gazete, uzak. Şimdi, bunların hepsine yapabileceğiniz bazı şeyler nelerdir?
Karısı: Anlamıyorum ...
Ryan: Onları alabilirsin, değil mi? Onları alabilirsin. Onları devirebilirsin. Onları yakabilirsin. Aynı fiilleri orada oturan nesnelere de uygulayabilirsiniz.
Karısı: Tamam ... öyle mi?
Ryan: Şey, bu önemli. Ya benim yerine, "kupayı al" ve "gazeteyi al" ve "uzaktan kumandayı al" diyebilseydim; bunun yerine isimlerin her biri için farklı fiiller bulmamız gerekiyorsa? Evrensel olarak "get" kelimesini kullanamadım, bunun yerine her fiil / isim kombinasyonu için yeni bir kelime düşünmek zorunda kaldım.
Karısı: Vay canına! Bu tuhaf.
Ryan: Evet, öyle. Beynimiz bir şekilde aynı fiillerin birçok farklı isme uygulanabileceğini bilecek kadar zekidir. Bazı fiiller diğerlerinden daha belirgindir ve sadece küçük bir isim dizisine uygulanır. Mesela bir bardak kullanamam ve araba içemem. Ancak bazı fiiller GET, PUT ve DELETE gibi neredeyse evrenseldir.
Karısı: Bir bardağı SİLEMEZSİNİZ.
Ryan: Tamam, ama atabilirsin. Bu başka bir şakaydı, değil mi?
Karısı: Evet.
Ryan: Her neyse, HTTP - Fielding ve arkadaşları tarafından oluşturulan bu protokol - tamamen isimlere fiil uygulamakla ilgilidir. Örneğin, bir web sayfasına gittiğinizde, tarayıcı girdiğiniz URL üzerinde bir HTTP GET yapar ve geri bir web sayfası gelir.
Web sayfalarında genellikle görüntüler vardır, değil mi? Bunlar ayrı kaynaklar. Web sayfası sadece resimlerin URL'lerini belirtir ve tarayıcı gider ve tüm kaynaklar elde edilinceye ve web sayfası görüntülenene kadar tarayıcıda daha fazla HTTP GET yapar. Ancak burada önemli olan, çok farklı isimlerin aynı şekilde ele alınabilmesidir. İsmin bir resim, metin, video, mp3, slayt gösterisi, her neyse. Bir URL verildiğinde tüm bunları aynı şekilde elde edebilirim.
Karısı: GET gibi geliyor oldukça önemli bir fiildir.
Ryan: Öyle. Özellikle bir web tarayıcısı kullandığınız için tarayıcılar hemen hemen sadece Kaynaklarla başka türlü etkileşimde bulunmazlar. Bu bir sorundur, çünkü birçok kişinin HTTP'nin sadece GETing için olduğunu varsaymasına neden olmuştur. Ancak HTTP aslında fiilleri isimlere uygulamak için genel amaçlı bir protokoldür.
Karısı: Güzel. Ama yine de bunun bir şeyi nasıl değiştirdiğini göremiyorum. Ne tür isimler ve fiiller istiyorsunuz?
Ryan: İsimler orada ama doğru biçimde değil.
Amazon.com sitesine göz atarken beni Noel için satın alacak şeyler mi arıyorsunuz? Her ürünü isimler olarak hayal edin. Şimdi, bir makinenin anlayabileceği bir temsilde mevcut olsaydı, çok düzgün şeyler yapabilirdiniz.
Karısı: Bir makine neden normal bir web sayfasını anlayamıyor?
Ryan: Çünkü web sayfaları insanlar tarafından anlaşılmak üzere tasarlandı. Bir makine, düzen ve stil ile ilgilenmez. Makinelerin temelde verilere ihtiyacı vardır. İdeal olarak, her URL'nin okunabilir ve makine tarafından okunabilir bir temsili olacaktır. Bir makine kaynağı aldığında, makine tarafından okunabilir olanı ister. Bir tarayıcı bir insan için bir kaynak aldığında, okunabilir insanı ister.
Karısı: Yani insanlar tüm sayfaları için makine formatları yapmak zorunda kalacaklardı?
Ryan: Değerli olsaydı.
Bak, bunun hakkında çok soyutlama ile konuşuyorduk. Gerçek bir örnek almaya ne dersin? Bir öğretmensiniz - okulda, öğrencileri yönetmenize izin veren büyük bir bilgisayar sisteminiz veya daha büyük olasılıkla üç veya dört bilgisayar sisteminiz var: hangi sınıflarda olduklarını, hangi notları aldıklarını, acil durum irtibat kişileri, bilgi Öğrettiğiniz kitaplar, vb. hakkında. Sistemler web tabanlıysa, muhtemelen burada yer alan isimlerin her biri için bir URL vardır: öğrenci, öğretmen, sınıf, kitap, oda vb. Şu anda URL'yi almak tarayıcı size bir web sayfası verir. Her URL için makine tarafından okunabilir bir sunum olsaydı, tüm araçların standart bir şekilde tüketilebileceği için yeni araçları sisteme kilitlemek önemsiz olurdu. Ayrıca, her bir sistemin birbirleriyle konuşmasını biraz daha kolaylaştıracaktır. Veya, sınav puanları toplamak için her bir okul sistemiyle her biri ile konuşabilen bir eyalet veya ülke çapında sistem oluşturabilirsiniz. İmkanlar sonsuzdur.
Sistemlerin her biri basit bir HTTP GET kullanarak birbirlerinden bilgi alacaktır. Bir sistemin başka bir sisteme bir şey eklemesi gerekiyorsa, bir HTTP POST kullanır. Bir sistem başka bir sistemdeki bir şeyi güncellemek istiyorsa, bir HTTP PUT kullanır. Çözülmesi gereken tek şey verinin nasıl görünmesi gerektiğidir.
Karısı: Yani siz ve şu anda insanların üzerinde çalıştığı tüm bilgisayar bu mu? Verilerin neye benzemesi gerektiğine karar vermek?
Ryan: Ne yazık ki hayır. Bunun yerine, büyük çoğunluk, bu şeyleri neredeyse faydalı veya etkili olmayan farklı bir şekilde yapmak için karmaşık özelliklerin katmanlarını yazmakla meşgul. İsimler evrensel değildir ve fiiller polimorfik değildir. Onlarca yıllık gerçek saha kullanımı ve kanıtlanmış teknikler atıyoruz ve geçmişte başarısız olan diğer sistemlere çok benzeyen bir şeyle başlıyoruz. HTTP kullanıyoruz, ancak yalnızca ağımız ve güvenlik insanlarımızla daha az konuşmamıza yardımcı olduğu için. Gösterişli araçlar ve sihirbazlar için basit işlem yapıyoruz.
Karısı: Neden?
Ryan: Hiçbir fikrim yok.
Karısı: Neden bir şey söylemiyorsun?
Ryan: Belki yaparım.