2016-08-30 3 views
0

С моей точки зрения, PUT может использоваться для вставки или изменения существующей записи.Вставка и идентификация HTTP PUT

PUT URL-адрес создает/заменяет ресурс целиком на указанном URL-адресе .

PUT: www.domain.com/accounts/1 
{ 
    Name: "Some Name" 
} 

После запроса будет создать учетную запись с ID 1, но в следующем запросе было бы просто обновить/заменить учетную запись с ID 1, что делает его идемпотентным.

Как это работает с столбцами идентификации в реляционных базах данных или с любой другой базой данных, которая поддерживает автогенерируемые идентификаторы?

Если у моих учетных записей есть автогенерированный столбец идентификации SQL, следует ли использовать свойство, отличное от первичного ключа, для идентификации этого ресурса в базе данных, или это прекрасно, чтобы вернуть ресурс, не найденный при ошибке по запросу для не существующего ресурса?

ответ

1

Во-первых, я бы использовал POST вместо PUT для создания нового ресурса.

Во-вторых, использование DB PK в качестве уникального идентификатора ресурса в порядке, хотя в некоторых сценариях вы можете захотеть вернуть этот столбец с ориентиром (скажем, если вы применяете систему ваучеров и не хотите, чтобы пользователи пытались и взломать его, увеличив идентификатор ваучера - вы выставите только ваучер-гид).

Что касается фактического идентификатора, я думаю, что вы были бы в порядке, если бы его не удаляли из первоначальной полезной нагрузки POST - это всего лишь деталь реализации, БД является единственной, которая должна ее генерировать, и она будет возвращена в ответ что (и далее) запрос (ы).

+0

да, думал так. Таким образом, реализация PUT как строгое обновление в порядке, если я делаю это idempotent? – Robert

+0

вы описали только сценарий создания, связанный с POST; в зависимости от потребностей для редактирования, вы также можете посмотреть в PATCH (vs PUT); но да, PUT должен быть идемпотентным –