Bu konuyla ilgili yeni okuyucular, ne yapmanız gerektiği ve deneyimden derslerin göreceli yokluğu ile ilgili sonsuz tartışmadan etkilenecektir. REST'in SOAP'a göre "tercih edildiği" gerçeği, sanırım, deneyimden yüksek seviyeli bir öğrenme, ama oradan ilerlemiş olmamız gereken iyilik mi? Yıl 2016. Roy'un tezi 2000 yılındaydı. Ne geliştirdik? Eğlencelimiydi? Entegrasyonu kolay mıydı? Desteklemek? Akıllı telefonların ve kesintili mobil bağlantıların yükselişini ele alacak mı?
ME'ye göre, gerçek hayat ağları güvenilmez. İstek zaman aşımı. Bağlantılar sıfırlandı. Ağlar bir seferde saatler veya günler boyunca azalır. Trenler mobil kullanıcılarla tünellere giriyor. Herhangi bir talep için (zaman zaman tüm bu tartışmalarda kabul edildiği gibi), istek yolda suya düşebilir ya da yanıt geri dönerken suya düşebilir. Bu koşullarda, doğrudan önemli kaynaklara karşı PUT, POST ve DELETE istekleri yayınlamak beni her zaman biraz acımasız ve naif olarak etkiledi.
HTTP, istek yanıtının güvenilir bir şekilde tamamlanmasını sağlamak için hiçbir şey yapmaz ve bu sadece ağa duyarlı uygulamaların işi olduğundan iyidir. Böyle bir uygulama geliştirerek, POST yerine PUT kullanmak için çemberlerden atlayabilir, daha sonra yinelenen istekleri algılarsanız sunucuda belirli bir hata vermek için daha fazla çember yapabilirsiniz. Müşteriye geri döndüğünüzde, bu hataları yorumlamak, yeniden doldurmak, yeniden doğrulamak ve yeniden yayınlamak için çembere atlamanız gerekir.
Veya bunu yapabilirsiniz : güvensiz taleplerinizi geçici tek kullanıcılı kaynaklar olarak düşünün (onlara eylem diyelim). İstemciler, kaynak için boş bir POST bulunan önemli bir kaynak üzerinde yeni bir "işlem" ister. POST yalnızca bunun için kullanılacaktır. Yeni basılmış eylemin URI'sine güvenli bir şekilde sahip olduktan sonra, istemci hedef kaynağa değil, eylem URI'sına güvensiz bir istek koyar . Eylemin çözümlenmesi ve "gerçek" kaynağın güncellenmesi, API'nizin işidir ve burada güvenilir olmayan ağdan ayrılmıştır.
Sunucu işi yapar, yanıtı döndürür ve kararlaştırılan eylem URI'sında saklar . Bir şeyler ters giderse, istemci isteği tekrarlar (doğal davranış!) Ve sunucu zaten görmüşse, saklanan yanıtı tekrarlar ve başka bir şey yapmaz .
Benzerliği vaatlerle hızlı bir şekilde tespit edeceksiniz: herhangi bir şey yapmadan önce sonuç için yer tutucuyu oluşturup iade ediyoruz. Ayrıca bir söz gibi, bir eylem bir kez başarılı olabilir veya başarısız olabilir, ancak sonucu tekrar tekrar getirilebilir.
Hepsinden iyisi, gönderme ve alma uygulamalarına benzersiz olarak tanımlanmış eylemi kendi ortamlarındaki benzersizliğe bağlama şansı veriyoruz. Müşterilerden sorumlu davranış talep etmeye ve uygulamaya!
Bu nedenle, çok sayıda dikenli sorun ortadan kalkar. Tekrarlanan ekleme istekleri kopya oluşturmaz ve verilere sahip olana kadar gerçek kaynağı oluşturmayız. (veritabanı sütunları boş bırakılamaz). Tekrarlanan güncelleme istekleri uyumsuz durumlara ulaşmaz ve sonraki değişikliklerin üzerine yazmaz. Müşteriler, orijinal onayı herhangi bir nedenle (istemci çöktü, yanıt kayboldu vb.) Alabilir ve sorunsuz bir şekilde işleyebilir.
Art arda silme istekleri, 404 hatasına basmadan orijinal onayı görebilir ve işleyebilir. İşler beklenenden daha uzun sürerse, geçici olarak yanıt verebiliriz ve müşterinin kesin sonucu kontrol edebileceği bir yerimiz vardır. Bu desenin en güzel kısmı Kung-Fu (Panda) özelliğidir. Bir zayıflık, müşterilerin cevabı anlamadıklarında bir talebi tekrarlama eğilimi ve bunu bir güce dönüştürüyoruz :-)
Bana bunun RESTful olmadığını söylemeden önce, REST ilkelerine saygı duyulması gereken çeşitli yolları göz önünde bulundurun. İstemciler URL oluşturmaz. Anlambilimde küçük bir değişiklik olsa da API keşfedilebilir durumda kalır. HTTP fiilleri uygun şekilde kullanılır. Bunun uygulanması büyük bir değişiklik olduğunu düşünüyorsanız, size deneyimden olmadığını söyleyebilirim.
Saklamak için büyük miktarda veriye sahip olacağını düşünüyorsanız, hadi konuşalım: tipik bir güncelleme onayı kilobaytın bir kısmıdır. HTTP şu anda size kesin olarak yanıt vermeniz için bir iki dakika veriyor. İşlemleri yalnızca bir hafta boyunca saklasanız bile, müşterilerin yetişme şansı vardır. Çok yüksek hacimleriniz varsa, asitle uyumlu özel bir anahtar değeri deposu veya bellek içi bir çözüm isteyebilirsiniz.