Sığınakta akışı?

8 Cevap php

Yani ...

I REST biraz hakkında okuma oldum ve bunun arkasındaki fikir güzel, ama sesler soru kolayca bir web sayfasının standart akışına entegre edilebilir, nedir?

Örneğin, bir kullanıcı öğenin çeşit, bir blog yazısı ya da ne sana sahip oluşturur, ve şimdi onu silmek istiyor, o yüzden sayfasında bir 'Sil' bağlantısını tıklar. Şimdi ne olacak? Nasıl bir DELETE istek sorunu yok, diyelim ki, http://mysite.com/posts/5? Ve nasıl bu isteği ele? Ben cURL ya da bir şey ile hiçbir deneyimi var, ama bunun görünüyor, ben curl_init('http://mysite.com/posts/5 'olurdu) and then work some magic. But where would I even put that script? That would have to be on another page, which would break the whole idea of REST. Then I would just be GET olurdu sırayla {[(3)] başka bir sayfa, ing } Ben başlangıçta amaçlanan sayfa?

Bu yüzden insanlar nadiren REST kullanın ya da bunu yapmak için güzel bir yoldur aslında var mı?


Ben açıklamak gerekiyor gibi görünüyor. İnsanlar gibi kelimeleri URL "POST", "SİL" ve de öneriyorlar. REST biz bu kaynak her eylem için benzersiz her resource için URL ama not sahip olduğunu belirler inanıyorum. Bu da biz sadece one ve her kaynak için sadece one URL var demektir varsayalım. Ek params yani I (DELETE PUT, POST veya GET ya göndererek) one URL'den belirli bir yazının içeriğini DELETE veya GÖRMEK edebilmek istiyorum, farklı değil, URL'ler

8 Cevap

Huzurlu bir sunucu ile, aynı url (diyelim / kitap / 1) bir çok farklı fiiller yanıt verebilir. Bu fiiller, POST, göstermek, yolu ile birlikte, PUT ve DELETE, GET what you want to do to the data on the server. Yanıtı size isteğinize cevap söyler.

DİNLENME öngörülebilir ve mantıklı bir şekilde verilere erişme hakkında olduğunu.

Her url Belirli bir dosyanın haritasına sahip güçlü bir PHP arka plan, gelirseniz, haklısın, gerçekten mantıklı değil. Iki en görünür sığınakta geliştirme ortamları, ASP.NET MVC ve Raylar, her fiiller okuyun ve sizin için özel bir yönlendirme yapmak, özel sunucuları (veya sunucu mantığı) var. Bu sizin beklediğiniz gibi uygulamanın "normal akış" üzerinden geçelim buydu. PHP, böyle WSO2's WSF ile bu gibi yardım çerçeveler vardır.

How REST works with Web Browsers

Örneğin, sizin örnek alın. Biz mesajlarını var ve biz tek silmek istiyoruz.

  1. Biz ileti / 4 / gibi bir url ziyaret ederek başlayabilirsiniz. Beklediğimiz gibi, bu yazı 4, onun özelliklerini, ve bunu sürebilir bazı eylemleri gösterir. Bu url işlemek için istek GET /posts/4 gibi görünecektir. Yanıtı öğeyi açıklar HTML içerir.

  2. Kullanıcı "Öğe 4 Sil" bağlantısını, HTML kısmını tıklar. Bu sunucuya DELETE /posts/4 gibi bir istek gönderir. Uyarı, bu /posts/4 url yeniden kullanılmış, ancak mantık farklı olmalıdır.

    HTML formları ve web tarayıcıları, çoğu varsayılan yöntem = bir yönteme "delete" = "post" linki ile bir bağlantı değişecek. Sen fiil değiştirmek için Javascript (gibi bir şey this) kullanmanız gerekecektir. Ruby on bir alternatif olarak, (_method) yöntemi, bir formuna kullanılmak üzere olan belirtmek için gizli bir giriş alanı kullanır.

  3. Sunucu tarafında, mantık yürütüldüğünde "bir öğe silme". Çünkü isteği fiilinin bu yürütmek bilir (DELETE), eylem yapılmaktadır hangi maçlar. Bu HTTP fiiller anlamlı hale, REST önemli bir nokta bulunuyor.

  4. Öğeyi sildikten sonra, "hayır, üzgünüm, bunu yapamazsın" "yep, bitti" ya da benzeri bir sayfa ile cevap verebilir ama bir tarayıcı için başka bir yere koymak daha mantıklı. Öğe GET /posts iyi mantıklı bir yönlendirme ile yanıt, silinen.

Eğer sunucu günlüğüne bakarsanız, bu sunucuya ne yaptığını herkes çok net olacak, ama o kadar önemli değil ...

How REST works with Arbitrary Data

REST Bir başka önemli nokta da birden çok veri formatları ile çalışır. Okumak ve programlı blog ile etkileşim istedim bir program yazdığımız varsayalım. Sen daha ziyade bilgi için HTML kazımak zorunda değil, XML verilen tüm mesajları isteyebilirsiniz.

GET /posts/4.xml sezgisel: "Sunucu, post 4. anlatan bana xml verin." Tepki bu xml olacaktır. Bir sığınakta sunucu bariz nasıl istediğiniz bilgi almak için yapar.

Eğer DELETE /posts/4.xml isteği yapıldığı zaman, sen "Sunucu, madde 4. silin lütfen.", Soruyorsun , Gibi bir tepki "Tamam, tabii," ne oldu ifade etmek genellikle yeterlidir. Program daha sonra istediği başka ne karar ve başka bir isteği yapabilirsiniz.

Peki tek yönlü DELETE yöntemini kullanarak bir AJAX arama yapmaktır.

Facebook'un REST sunucusu sonrası yöntemi soran, onlar gibi yapabilir, bir sahte bir tanesidir: POST, vb, bu istek için gereken eylem ve diğer değerleri GET.

Neden facebook sahte DİNLENME sunucu olduğunu söylüyorlar? : Iyi, REST İlkeleri diyor

  • Her kaynak hiper bağlantılar kullanılmak üzere bir genel sözdizimi kullanılarak benzersiz adreslenebilir

facebook sadece / server.php var ve hatta (POST, ..., GET PUT, DELETE) için, talepte nerede var

başka bir yol mod_rewrite kullanarak ve istemci istemektedir url ayrıştırmak

EDIT: Sadece bulundu this, ilginç görünüyor. Eğlenin!

REST nadiren kullanılır sanmıyorum. Sen StackOverflow, şu anda kullanıyoruz. Bildiğim kadarıyla özel örnekte gider gibi, bunu desteklemek tarayıcılarında XMLHttpRequest olsa DELETE istekleri gönderebilirsiniz. JS kapalı, ya da olmayan uyumlu tarayıcılar için olduğunda, gibi bir şey yapabilirsiniz:

POST http://foo.com/delete?post=5

İdeal, ama yine de daha huzurlu birçok site daha yok.

EDIT: POST değiştirildi

Kullandığınız hangi çerçeve bağlı olarak, eylemleri her kaynak için nasıl işlendiğini belirleyen modelleri vardır.

Temelde başka bir parametre kullanarak gerçekleştirmek için hangi eylem kaynak göndermek istiyorum. Bu parametre, örneğin AJAX / JS ile gönderilebilir.

Eğer without javascript / ajax (durumunda devre dışı olduğunu) yapmak istiyorsanız, o zaman bir form POST yöntemi kaynak ekstra EYLEM parametre gönderme de çalışmak.

Tabii ki, her iki durumda da, güvenliği düşünün ve onlar konusu kaynağı onlar olmamalı bir eylem gönderme değil emin olmak gerekir. Backend üzerinde denetimi yapmak ve uygun bir tepki ya da hata mesajı göndermek için emin olun.

İstemci tarafı komut dosyası, ister JS / Ajax aracılığıyla veya formu POST veya diğer yöntemler ekstra güvenlik önlemi gerektirir.

Afişten açıklama sonra düzenlenebilir.

Bunu overthink etmeyin. Sen düz HTML formları ve bir tarayıcı ile bunu yapmak mümkün olacak değiliz. They do not support DELETE method. Ajax yapabilirsiniz.

I want to be able to DELETE to VIEW the contents of a particular post from one URL (by sending either DELETE, PUT, POST, or GET), not different URLs with additional params

Görüntülemek için Sil? Ben bunu anlamıyorum emin değilim, ama silme değil URL yoluyla, kafalardan yapılmalıdır. Silme yöntemi bir görünüm vermemelidir. DİNLENME bir service, tüm istekleri görsel tüketim içindir olduğunu.

Eğer gerçekten SİL fiilini kullanarak hakkında hiçbir seçim varsa o zaman aşağıdaki gibi bir şey öneririm:

POST http://mysite.com/Trashcan?resourceUrl=/Customer/75

Eğer gerçekten REST farketmez kullanmak ne url, ancak, bu adresler tamamen fiillerini önlemek eğer etkileşim DİNLENME şekilde anlamak kolaydır.

Ben standart "eylemlerin" ötesine gitmek gerekir ve sadece denetleyici üzerinde yeni bir işlem eklemek için çok cazip hem Rails ve ASP.NET MVC kullanıcıların pek çok soru gördük. Bunu yaparken ile sorun sadece REST homojen arayüz kısıtlaması atıyorlardı olmasıdır.

Trashcan metafor restfully siler yapmanın tek yolu değildir ama url içinde bir "delete" koyarak olarak okumak gibi açık olduğunu iddia ediyorum.

İşte fiilleri yerine biraz daha "isim-tabanlı" yolu vardır.

POST http://mysite.com/Printer/75/PrintQueue?url=http://mysite.com/Document/xyz
POST http://mysite.com/CurrentLogins?user=bob
POST http://mysite.com/QueryProcessor?query=FindMyInformation
POST http://mysite.com/SearchEngine?searchTerms=cat,blue,furry
POST http://mysite.com/OrderProcessor?cart=http://mysite.com/user/2323/cart

Bazen bir isim tabanlı url ile gelip küçük bir kutunun dışında düşünmek zorunda, ve denemek ve bunu yapmak için bilgiçlik görünebilir, ama benim için fayda benim değişkenleri yönetmek yeteneği geliyor. Ben o zaman benim değişkenlerden birini azaltmak bu kaynakların çalışabilir fiillerin sayısını düzeltmek eğer olursa olsun, ben ne benim arayüzü kaynakların bir değişken sayıda gidiyorum.

Bir webbased / WebApplication tabanlı bir istek varsayarak, bunu yapmanın başka bir yolu, 2 submitbuttons olması. Yana PUT ve kullanımı aynı uri / url SİL. Belirli bir silme form eklemek ve bu silmek-butonu belirli bir isim takmak, yani bu bir yazı ile gönderilen olduğunda, bir DELETE içine eylemi açmak için bu düğmeye-adını kullanabilirsiniz olabilir