SORU
3 ŞUBAT 2010, ÇARŞAMBA


DİNLENME yerine-GERİSİ olmayan bir avantaja HTTP nedir?

Görünüşe göre, REST is just a set of conventions about how to use HTTP. Bu kuralları sağlayacak merak ediyorum. Bilen var mı?

CEVAP
23 EKİM 2012, Salı


Kısmen kimse gerçekten ne DİNLENMEYE karar verir, çünkü bu iyi bir cevap alırsınız sanmıyorum. wikipedia page kodlardan ağır ve açıklama ışık. Tartışma bu sayfa üzerinde yağsız sadece insan aynı fikirde, bakalım nasıl bir değer. Ancak söyleyebileceğim kadarıyla, geri KALANI bu

Yerine rastgele adlı ayarlayıcı ve alıcı Url ve kullanma GET tüm alıcılar ve POST tüm bu belirleyiciler, biz denemek zorunda URL tanımlamak kaynakları, ve HTTP eylemleri GET, POST, PUT ve DELETE şeyler için onları. Yani yerine

GET /get_article?id=1
POST /delete_article   id=1

Yaparsın

GET /articles/1/
DELETE /articles/1/

Ve ardından POST PUT "" ve "güncelleme" işlemleri (ama kimse kabul eder tersi). oluşturmak için uygun

Sorgu dizeleri çünkü önbellekleme argümanlar yanlış bencegenellikle önbelleğe, ve ayrıca gerçekten bunları kullanmana gerek yok. Örneğin django bu gibi şeyler çok kolay hale getirir, ve DİNLENME olduğunu söyleyemem:

GET /get_article/1/
POST /delete_article/     id=1

Hatta sadece URL fiil vardır:

GET /read/article/1/
POST /delete/article/1/
POST /update/article/1/
POST /create/article/

Bu durumda GET yan etkileri olmadan bir şey anlamına gelir, ve POST sunucu üzerinde veri değiştiren bir şey anlamına gelir. Bu özellikle-vs-**PUT 21 Her şey kurtulabilirsiniz olarak belki biraz daha net ve daha kolay olduğunu düşünüyorum. Eğer isterseniz tümleci ekleyebilirsiniz ARTI, bu yüzden yapay HTTP sunduğu için değil. Örneğin:

POST /hide/article/1/
POST /show/article/1/

(Ya da onlar ne kadar örnekler düşünmek ne olursa olsun!)

Sonuç olarak, görebildiğim sadece iki avantajı vardır:

  1. Web API / keşfetmek anlamak için daha temiz ve daha kolay olabilir.
  2. Bir web sitesi ile veri senkronize ederken, sadece 23 ** ya da her şeyi söyleyebilirsin, çünkü muhtemelen DİNLENMEK için daha kolaydır. Bu ağır kodunuzu bağlıdır.

Ancak çok büyük bir dezavantajı var bence

  1. Tüm eylemleri kolayca CRUD (create, read/almak, güncelleme, silme) göster. Hatta nesne türü kaynakları ile ilgili olabilir.
  2. Şüpheli yararları için ekstra bir çaba.
  3. Kafa karışıklığı PUT POST hangi olarak. İngilizce onlar da benzer şeyler yani ("/duvarda bir ilan koyacağım")..

Gerçekten ekstra çaba gitmek istemiyorsanız, ya da eğer servis haritalar gerçekten iyi CRUD operasyonları, API ikinci versiyonu için DİNLENME kaydedin. bu kadar söyleyebilirim bulunan sonuç:

Edit

Sadece DİNLENMEM başka bir sorun geldi: kolay bir istek içinde birden çok şey veya parçaların bir bileşik elde etmek istediğiniz nesne. bunu belirtmek için. Bu gidiş-dönüş zamanı önemli olabilir ve bağlantılar güvenilmez olduğu mobil üzerinde özellikle önemlidir. Örneğin, facebook zaman çizelgesi üzerinde mesajlar alıyorsanız varsayalım. "Saf" bir şeyler olacak gibi

GET /timeline_posts     // Returns a list of post IDs.
GET /timeline_posts/1/  // Returns a list of message IDs in the post.
GET /timeline_posts/2/
GET /timeline_posts/3/
GET /message/10/
GET /message/11/
....

Saçma olan. Facebook API oldukça büyük IMO, ne yaptıklarına bir bakalım:

Varsayılan olarak, çoğu nesne özellikleri bir sorgu yaptığınızda döndürülür. İle iade istediğiniz alanları (veya bağlantıları) seçebilirsiniz "alanlar" sorgu parametresi. Örneğin, bu URL dönecektir Ben kimliği, adı ve resmi: https://graph.facebook.com/bgolub?fields=id,name,picture

DİNLENME ile böyle bir şey yapmak istiyorum, nasıl, ve eğer sen yaptıysan hala DİNLENME olarak kabul edip etmeyeceği konusunda hiçbir fikrim yok. Kesinlikle ama yapmamalısın bunu anlatmaya çalışır kimse gözardı ediyorum özellikle nedeni ise (DİNLENME değil "çünkü")!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DavidParody

    DavidParody

    17 EKİM 2009
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • kindlechatmail

    kindlechatma

    25 AĞUSTOS 2010