SORU
4 ŞUBAT 2009, ÇARŞAMBA


REST web servisleri toplu taşıma işlemleri için desen?

Kanıtlanmış tasarım desenleri bir DİNLENME içinde kaynakları üzerinde toplu işlemler için ne var tarzı web hizmeti?

Performans ve istikrar açısından idealler ve gerçeklik arasında bir denge olmaya çalışıyorum. Elimizde bir API şu anda tüm işlemleri ya da almak bir Kaynak Listesi (örn: GET /kullanıcı) veya bir tek örnek (KOYUN /kullanıcı/1, SİL /kullanıcı/22, vs.).

Nesneleri bir bütün kümesi tek bir alanı güncelleştirmek için istediğiniz bazı durumlar vardır. Çok savurgan her nesne için tüm temsil ve geriye bir alanı güncelleştirmek için göndermek gibi görünüyor.

Bir RPC tarzı API, bir yöntem olabilir:

/mail.do?method=markAsRead&messageIds=1,2,3,4... etc.

Burada KALAN eşdeğer nedir? Ya ben şimdi ve sonra uzlaşma Tamam. Tasarım gerçekten performans, vb. birkaç özel operasyonlar eklemek berbat mı? Her durumda istemci şu anda bir Web Tarayıcısı (istemci tarafında javascript uygulama).

CEVAP
27 EKİM 2009, Salı


Partiler için basit Dinlendirici bir desen bir koleksiyon kullanın kaynak yapmaktır. Örneğin, birkaç mesaj aynı anda silmek için.

DELETE /mail?&id=0&id=1&id=2

Biraz daha karmaşık kısmi kaynak ya da kaynak öznitelikleri toplu güncelleştirme. O, her markedAsRead öznitelik güncelleştirme. Temel olarak, her kaynak bir parçası olarak özniteliği tedavi etmek yerine, kaynak koymak için bir kova gibi davranın. Bir örnek zaten yayınlanmıştır. Biraz çarpıttım.

POST /mail?markAsRead=true
POSTDATA: ids=[0,1,2]

Temel olarak, posta listesini okumak işaretli olarak güncelliyoruz.

Aynı kategori için birkaç öğeleri atamak için kullanabilirsiniz.

POST /mail?category=junk
POSTDATA: ids=[0,1,2]

Belli ki çok daha karmaşık iTunes tarzı kısmi güncelleştirmeleri (örneğin, sanatçı albumTitle ama trackTitle) toplu iş yapmak. Kova benzetmesi yıkmaya başlar.

POST /mail?markAsRead=true&category=junk
POSTDATA: ids=[0,1,2]

Uzun vadede, çok daha kolay tek kısmi bir kaynak güncelleştirmek için, ya da kaynak bağlıyor. Sadece bir subresource kullanın.

POST /mail/0/markAsRead
POSTDATA: true

Alternatif olarak, parametreli kaynakları kullanabilirsiniz. Bu DİNLENME desen daha az yaygındır, ama URİ ve HTTP gözlük izin verilir. Noktalı yatay bir kaynak içinde ilgili parametreleri böler.

Birçok özelliğe sahiptir, çeşitli kaynaklar güncelleme:

POST /mail/0;1;2/markAsRead;category
POSTDATA: markAsRead=true,category=junk

Çeşitli kaynaklar güncelleme, sadece bir özellik:

POST /mail/0;1;2/markAsRead
POSTDATA: true

Birkaç özelliklere sahiptir güncelleştirme, yalnızca bir kaynak:

POST /mail/0/markAsRead;category
POSTDATA: markAsRead=true,category=junk

Dinlendirici bir yaratıcılık doludur.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • Cristina Landa

    Cristina Lan

    28 Ocak 2010
  • Epic Tutorials for iPhone, iPad and iOS

    Epic Tutoria

    18 EYLÜL 2011