2008-11-21 25 views
5

Çeşitli yerlerde iki tür örnek görüyorum. Bir " "telefon = 123.456.7890" http://127.0.0.1/services/rest/user/123"Bir REST PUT yöntemi için önerilen/etkili istek yükü nedir?

-d PUT -X

kıvrılma gibi form alanlarını kullanan ve diğerleri gibi bir XML içeriğini (bazı varyasyon) bu

kullanır

yankı "< kullanıcı> < id> 123 </id> < telefon> 123.456.7890 </telefon> </kullanıcı>" | -X PUT kıvırmak -d @ - "http://127.0.0.1/services/rest/user/"

Bu form alanları kullanmak gibi görünüyor

kısalık avantajına sahiptir ve açıkça sadece modifiye alanları hedefleyerek müşterinin niyeti belirleme, ama "derin garip adrese yapar "meta veriler.

XML içeriğinin kullanılması daha eksiksiz olma avantajına sahiptir, ancak müşterinin hangi alanı değiştirdiğini saptamanın ek yükünün dezavantajı (tüm kaynakları küçük değişiklikler ile geri gönderdiklerini varsayarak).

En iyi uygulama, hatta daha yaygın bir uygulama var mı?

cevap

0

İkinci örnekte, URL belirli bir kaynağa başvurmuyor, dolayısıyla IMHO RESTful değil.

Bunu düzeltirseniz, seçim formu ve XML kodlaması için aşağı iner. Eğer yapısal ve genişletilebilir veri gerekiyorsa

ardından XML yararlı olabilir:

<phone type="work, mobile"><num>555-555</num><ext>123</ext></phone> 

ancak gerekli değildir: Yanlış XML kodlaması alabilirsiniz API kullanıcıların

phone=555-555&phone-ext=123&phone-type=work&phone-type=mobile 

sürü sorun ad kavrama sahip dolaylı olarak, form kodlaması geniş kitleler için daha iyi olabilir.

0

İyi soru! Belirli bir en iyi uygulama ya da yaygın uygulama bilmiyorum. Ama sorunun gerçekten form alanları veya XML ile ilgili olmadığını belirtmek istiyorum, kısmi temsiller ve tam temsillerle ilgilidir. Aralarındaki pratik farkları kısa bir süre içinde tanımladınız. Sorunun bir yönü, kimin değiştiğini belirleme sorumluluğuna kimin sahip olduğu: müşteri veya sunucu.

Bir melez seçenek bir istemci yeni bir değerle birlikte böyle XPath veya JSONpath olarak "derin" meta, işaret etmek bazı sözdizimi kullanarak, tam nelerin değiştiğini belirleyebildiğinde burada biçimi çeşit olacaktır.

2

JSON (P) gibi bir şey olabilir mi? (Ben tam sözdizimi hakkında emin değilim):

$ echo '{user: {id: 123, phone: 123.456.7890}}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/' 

Ya

$ echo '{phone: 123.456.7890}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/123.json' 
İlgili konular