SORU
29 AĞUSTOS 2013, PERŞEMBE


Backbone.js DİNLENME aramalar anlamak

Backbone.js eşitleme yöntemini anlamaya çalışıyorum ve belgelere geçiyordu http://backbonejs.org/#Sync

Yazıyor

The default sync handler maps CRUD to REST like so:

create → POST   /collection
read → GET   /collection[/id]
update → PUT   /collection/id
delete → DELETE   /collection/id

Şimdi her zaman Omurga için ön uç geliştirme ve yeni olduğum yukarıdaki anlamak zor buluyorum...hiç DİNLENME ya da sunucu tarafında başka bir protokol kullanılır

Basitçe (Omurga aldığımızda geri KALAN haritalar gibi.aynı açıklar mısınız sync) Çok basit bir örnek, son derece yararlı olacaktır...

CEVAP
29 AĞUSTOS 2013, PERŞEMBE


Eğer sakıncası yoksa, bazı ifadeler takas ile başlayacağım. GERİSİ kendi başına bir protokol değildir, sadece HTTP protokolünü kullanarak bir yol. GERİSİ tarzı göreceksin olarak API için özellikle yararlıdır. Bir API bu tarza uygun zaman olduğu söyleniyor "". Dinlendirici Eğer çalıştığınız API Huzurlu değil ise, Omurga çok sayıda değişiklik yapmak gerekecek.sırayla senkronize çalışması için. Bu yüzden umarım! :)

HTTP Protokolü

Örnekler severim, işte bu sayfanın HTML kodu almak için bir HTTP isteği için:

GET /questions/18504235/understand-backbone-js-rest-calls HTTP/1.1
Host: stackoverflow.com

[İsteğe bağlı] Eğer komut satırı ile oynanan veya terminal Varsa, komut çalıştırmayı deneyin telnet stackoverflow.com 80 yukarıda, tuşuna basarak ve ardından yapıştırma birkaç kez girin. Voila! Bu zafer tüm HTML.

Bu örnekte...

  • GETyöntem.
  • /questions/18504235/understand-backbone-js-rest-callsyol.
  • HTTP/1.1protokol.
  • Host: stackoverflow.com bir örneğidirbaşlık.

Tarayıcınız Bu sayfanın HTML kodu almak için aynı, sadece daha fazla başlıkları ile geliyor yaklaşık. Serin, değil mi?

Ön çalışma bu yana, muhtemelen bu form birçok kez etiketi gördüm. İşte bir örnek:

<form action="/login" method="post">
    <input type="text" name="username" />
    <input type="password" name="password" />
    <input type="submit" name="submit" value="Log In" />
</form>

Uygun veri ile birlikte bu formu gönderdiğinizde, tarayıcınız bu gibi bir istek gönderir:

POST /login HTTP/1.1
Host: stackoverflow.com

username=testndtv&password=zachrabbitisawesome123&submit=Log In

Önceki örnekte ve bu bir ile üç arasında farklılıklar vardır.

  1. yöntemşimdi 24**.
  2. yolşimdi 25**.
  3. Fazladan bir çizgi varvücut.

Diğer yöntemleri bir sürü varken, olanları Dinlendirici uygulamalarda kullanılırPOST, GET, PUT, DELETE. Bu veriler ile almak için gerekenin sunucu, her şey için farklı yolları var zorunda kalmadan söyler.

Omurga geri

Umarım şimdi biraz daha HTTP nasıl çalıştığını anlamak. Ama nasıl bu Omurga arasındaki ilişki nedir? Haydi öğrenelim!

İşte Omurga bir uygulama içinde bulabilirsiniz kod küçük bir parça.

var BookModel = Backbone.Model.extend({
    urlRoot: '/books'
});
var BookCollection = Backbone.Collection.extend({
    model: BookModel
    , url: '/books'
});

Oluştur (POST)

Dinlendirici bir API kullanarak olduğumuza göre, bu Bilgi Omurgası oluşturmak, okuma, güncelleştirme ve kitap tüm bilgileri silmek için ihtiyacı olan her şey! Başlangıç yeni bir kitap yapmak istiyorum. Aşağıdaki kod yeterli olacaktır:

var brandNewBook = new BookModel({ title: '1984', author: 'George Orwel' });
brandNewBook.save();

Omurga yapmaya çalıştığını anlaroluşturunyeni bir kitap, ve aşağıdaki istek yapmak için verilmiş bilgilerden bilir:

POST /books HTTP/1.1
Host: example.com

{"title":"1984","author":"George Orwel"}

Okuma (GET)

Ne kadar kolay oldu? Ama bu Bilgi bir noktada geri dönmek istiyoruz. Hadi new BookCollection().fetch() yaptık diyelim. Omurga etmeye çalıştığını anlarokuyunbirtoplamakitap, ve aşağıdaki istek olurdu:

GET /books HTTP/1.1
Host: example.com

BAM. Bu kadar kolay. Ama biz sadece bir kitap için bilgi istedi. Hadi kitap #42 söylüyorlar. new BookModel({ id: 42 }).fetch() yaptık diyelim. Omurga etmeye çalıştığını görürokuyunbirtekkitap:

GET /books/42 HTTP/1.1
Host: example.com

Güncelleme (KOYMAK)

Oh lanet olsun, ben sadece Bay Orwell adını yanlış yazmışım fark ettim. Kolay tamir!

brandNewBook.set('author', 'George Orwell');
brandNewBook.save();

Omurga brandNewBook adında olmasına rağmen önceden kaydedilmiş olduğunu bilecek kadar akıllıdır. Bu yüzdengüncelleştirmelerikitap:

PUT /books/84 HTTP/1.1
Host: example.com

{"title":"1984","author":"George Orwell"}

Sil (DELETE)

Son olarak, hükümetin her hareketini takip olduğunu fark, ve 1984 okumuş gerçeği gömmek gerekir. Muhtemelen çok geç, ama denemek acıyor asla. brandNewBook.destroy() ve Omurga çalıştırınduygulu ve tehlike anlar olursileraşağıdaki isteği ile kitabı:

DELETE /books/84 HTTP/1.1
Host: example.com

Ve gitti.

Diğer Yararlı Bilgiler

Sunucuya gönderiyoruz ne hakkında çok şey konuştuk olmakla birlikte, muhtemelen de geri alıyoruz ne de bir göz atmak lazım. Kitap toplama geri dönelim. Eğer Hatırlarsanız, /books 42 *bir istek yaptık. Teorik olarak, bu gibi bir şey: geri almalıyız

[
    {"id":42,"author":"Douglas Adams","title":"The Hitchhiker's Guide to the Galaxy"}
    , {"id":3,"author":"J. R. R. Tolkien","title":"The Lord of the Rings: The Fellowship of the Ring"}
]

Korkacak bir şey yok. Ve hatta daha iyi, Omurga kutudan bu işlemek için nasıl bilir. Ama eğer değişirse ne biraz? id tanımlayıcı bir alan olmak yerine, bookId oldu?

[
    {"bookId":42,"author":"Douglas Adams","title":"The Hitchhiker's Guide to the Galaxy"}
    , {"bookId":3,"author":"J. R. R. Tolkien","title":"The Lord of the Rings: The Fellowship of the Ring"}
]

Omurga her API biraz farklı olur, ve bu sorun değil. Yapmanız gereken tek şey idAttribute gibi: bildirin

var BookModel = Backbone.Model.extend({
    urlRoot: '/books'
    , idAttribute: 'bookId'
});

Sadece koleksiyon zaten modeli denetler beri bu model için bilgi ekleyin. Tıpkı bunun gibi, Omurga API anlar!Eğer umurumda bile değil...

Bu dezavantajı bazı durumlarda bookId kullanmak için hatırlamak zorunda. Biz daha önce new BookModel({ id: 42 }).fetch() tek bir kitap hakkında veri yüklemek için kullanılan, örneğin, şimdi new BookModel({ bookId: 42 }).fetch() kullanmak zorundayız.


Umarım bu yanıt bilgilendirici, ve dayanılmaz derecede sıkıcı değil de buldum. Birçokları için, protokol ve Dinlendirici mimarisi HTTP en heyecan verici konusu değil, biraz abartmak denedim fark ettim. Sonra bir noktada bu geri her okuduğumda pişman olabilirim, ama devam edin ve bu yine de göndermek istiyorum. 2 şey burada.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dellbear816

    Dellbear816

    4 Mart 2008
  • max2sims2

    max2sims2

    19 Kasım 2008
  • schmittastic

    schmittastic

    9 EYLÜL 2009