HTTP: Шаблон для частичного обновления ресурса (который принимает пустые строки)? - PullRequest
2 голосов
/ 02 ноября 2010

Если в местоположении есть ресурс типа Foo с уникальным идентификатором 36:

http://example.com/foo/36

и Foo содержит несколько частей переменных данных (var1, var2 и т. Д.), Некоторые из которых являются строками;

Какой предпочтительный шаблон для обновления частичного набора переменных ресурса через HTTP (учитывая, что мы можем захотеть установить некоторые из них как пустые строки)?

(Проблема в том, что значение формы пустой строки не считается "успешным" по стандарту W3C и не требуется отправлять браузером. Если пустое значение не отправлено, сервер не знает, что мы хотели установить эту переменную в пустую строку.)

Я думал о следующих опциях:

  1. POST до http://example.com/foo/36 со списком пар имя / значение для переменных, имеющих «успешное» значение, и дополнительным параметром, значением которого является разделенный запятыми список значений, которые мы хотите установить в качестве пустой строки.

  2. PUT до http://example.com/foo/36/var1;var2;var3, указывая полный набор значений, которые мы хотим обновить как часть URI. Любое указанное имя, не полученное в качестве аргумента PUT, будет установлено в пустую строку.

  3. Отправка отдельных PUT запросов к каждой переменной в http://example.com/foo/36/var1, http://example.com/foo/36/var2 и т. Д. Представьте каждую переменную как отдельный ресурс (очень явный, но включает много запросов).

Но ни один из них не кажется мне интуитивно понятным, элегантным или стандартным.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2010

Ваш упомянутый подход - хорошая идея, чтобы обойти ограничение параметров, которое вы упомянули, но они не настолько стандартны.Считая, что ваш API должен быть дружественным к клиенту, я бы использовал более распространенный подход к использованию форматов ресурсов, таких как JSON или XML:

  • Это более "явное" представление данных вашего домена
  • Вы можете лучше представлять нулевые значения (например, пустой или несуществующий XML-тег).

Браузер может отправлять данные с помощью AJAX в формате JSON.

для создания вы бы отправили полные данные:


POST /foo
...
{"var1":"x","var2":2,"var3":"hello"}

для (частичного) обновления:


PUT /foo/123
...
{"var1":"y","var2":null}

При частичном обновлении "var3" будет сохранено.

ДляОбновления Я предпочитаю всегда отправлять полные данные (не частичные, как указано выше), потому что это облегчает отображение + реализацию.Но есть случаи, когда необходимо частичное обновление.

0 голосов
/ 02 ноября 2010

Что бы я сделал, это немного изменил семантику PUT, чтобы в ресурсе обновлялись только отправленные значения / пары: если ресурс не существует, создайте его с информацией в запросе PUT;если ресурс существует, обновите только переданные пары имя / значение.

Я даже думаю, что частичные обновления были бы хорошим дополнением к остальной архитектуре.Просто используйте заголовок HTTP, чтобы указать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...