2008-11-21 7 views
5

Widzę dwa rodzaje przykładów w różnych miejscach. Jeden wykorzystuje pola formularzy jakJaki jest zalecany/efektywny ładunek żądania dla metody REST PUT?

curl -X PUT -d "telefonu 123.456.7890 =" "http://127.0.0.1/services/rest/user/123"

a drugi korzysta z zawartości XML podobne (jakąś odmianę) Ten

echo "< user> < id> 123 </id> < telefon> 123.456.7890 </telefon> </user>" | curl -X -d @ PUT - „http://127.0.0.1/services/rest/user/

Wydaje się, używając pola formularza, ma tę zaletę, zwięzłości i jednoznacznie identyfikujący intencji klienta poprzez ukierunkowanie tylko zmodyfikowane pola, ale sprawia, że ​​niewygodne do rozwiązania „głębiej "metadane.

Korzystanie z treści XML ma tę zaletę, że jest bardziej kompletne, ale wadą narzutów na to, które pole faktycznie modyfikuje klient (zakładając, że odsyła cały zasób z niewielkimi modyfikacjami).

Czy istnieje najlepsza praktyka lub nawet bardziej powszechna praktyka?

Odpowiedz

0

W drugim przykładzie URL nie odnosi się do konkretnego zasobu, więc IMHO nie jest RESTOWN.

Jeśli to naprawisz, wybór sprowadza się do formowania i kodowania XML.

Jeśli potrzebujesz danych strukturalnych i rozciągliwe, a następnie XML mogą być przydatne:

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

ale nie neccessary: ​​

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

Wielu użytkowników API można uzyskać kodowanie XML złego, mają problemy z uchwyceniem nazw nieokreślony, więc kodowanie formularzy może być lepsze dla szerokiego grona odbiorców.

0

Dobre pytanie! Nie znam konkretnej najlepszej praktyki lub powszechnej praktyki. Ale chcę zaznaczyć, że pytanie nie dotyczy tak naprawdę pól formularzy czy XML, chodzi o częściowe reprezentacje i pełne reprezentacje. Zwięźle opisaliście praktyczne różnice między nimi. Jednym z aspektów tego pytania jest to, kto jest odpowiedzialny za określenie, co się zmieniło: klienta lub serwera.

Opcja hybrydyczna byłaby rodzajem formatu, w którym klient mógłby określić, co zmieniło się automatycznie, używając pewnej składni do wskazania "głębszych" metadanych, takich jak XPath lub JSONpath, wraz z nową wartością.

2

Może to być coś w stylu JSON (P)? (Nie jestem pewien dokładnej składni):

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

Albo

$ echo '{phone: 123.456.7890}' |\ 
> curl -X PUT -d @- 'http://127.0.0.1/services/rest/user/123.json' 
Powiązane problemy