Предлагам ви да използвате POST, а не PUT, за ключ за автоматично нарастване или да не използвате ключа за автоматично увеличаване в идентификатора на ресурса.
Ако използвате POST, тогава бихте направили POST до /users
, а не до /users/1
. Отговорът може да ви пренасочи към /users/1
или какъвто и да е идентификаторът.
Ако използвате PUT, тогава може да PUT до /users/10292829
, където номерът е уникален ресурсен ключ, генериран на клиента. Този ключ може да бъде генериран във времето или може да бъде хеш от време, идентификатор на сесия и някои други фактори, за да се гарантира уникалността на стойността в цялата клиентска аудитория. След това сървърът може да генерира свой собствен автоматично увеличаващ се индекс, различен от 10292829
или друг.
За повече информация вижте PUT срещу POST в REST
Проследяване. . .
В случай на разрешаване на PUT до /users/XXXXXXX, за всички потребители, ще получите два различни уникални ключа, които се отнасят до един и същ ресурс. (10292829 и 1 може да се отнасят за един и същ потребител). Трябва да решите как да разрешите използването на всеки от тези различни ключове в URL адрес в стил REST. Поради необходимостта да съгласувам използването на тези два различни идентификатора, бих предпочел да използвам първата опция, POSTing до /users
и получаване на уникален REST url на създадения ресурс в отговора.
Току-що прочетох отново съответния раздел на RFC 2616 и видях код за връщане, специално създаден за това в REST приложения:
10.2.2 201 Създаден
Заявката беше изпълнена и доведе до създаването на нов ресурс. Новосъздаденият ресурс може да бъде посочен от URI адресите, върнати в обекта на отговора, с най-специфичния URI за ресурса, даден от полето за заглавка на местоположението. Отговорът ТРЯБВА да включва обект, съдържащ списък с характеристики на ресурси и местоположение(я), от които потребителят или потребителският агент може да избере най-подходящия. Форматът на обекта се определя от типа на носителя, даден в полето за заглавка Content-Type. Първоначалният сървър ТРЯБВА да създаде ресурса, преди да върне кода на състоянието 201. Ако действието не може да бъде извършено незабавно, сървърът ТРЯБВА да отговори с отговор 202 (Прието).
И така, RESTful начинът да отидете е да POST до /users
и да върнете 201 Created
, с Location:
хедър, указващ /users/1
.
person
Cheeso
schedule
26.03.2012