REST: Как ресурс должен быть «обновлен»?

Вот почему динамически созданные элементы не реагируют на клики & nbsp;:

var body = $("body");
var btns = $("button");
var btnB = $("<button>B</button>");
// `<button>B</button>` is not yet in the document.
// Thus, `$("button")` gives `[<button>A</button>]`.
// Only `<button>A</button>` gets a click listener.
btns.on("click", function () {
  console.log(this);
});
// Too late for `<button>B</button>`...
body.append(btnB);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

В качестве обходного пути вы должны прослушивать все клики и проверять исходный элемент & nbsp;:

var body = $("body");
var btnB = $("<button>B</button>");
var btnC = $("<button>C</button>");
// Listen to all clicks and
// check if the source element
// is a `<button></button>`.
body.on("click", function (ev) {
  if ($(ev.target).is("button")) {
    console.log(ev.target);
  }
});
// Now you can add any number
// of `<button></button>`.
body.append(btnB);
body.append(btnC);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

Это называется «Event Delegation». Хорошие новости, это встроенная функция в jQuery: -)

var i = 11;
var body = $("body");
body.on("click", "button", function () {
  var letter = (i++).toString(36).toUpperCase();
  body.append($("<button>" + letter + "</button>"));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>A</button>

0
задан Benjy Wiener 28 March 2019 в 03:01
поделиться

3 ответа

Я бы использовал

PUT /api/entries/id/renew

с датой истечения в теле (или без истечения срока действия по умолчанию). Причина в том, что истечение срока действия не относится к самому объекту; это метаданные, связанные с тем, как объект управляется вашей системой.

0
ответ дан Hong Ooi 28 March 2019 в 03:01
поделиться

Лично я бы использовал простой POST запрос, чтобы сообщить серверу о его обновлении. Это не RESTful, но кажется, что это самый простой способ решить эту проблему.

Вот RESTful ответ.

REST - это отправка состояния назад и вперед между ресурсами. В этом конкретном случае немного сложно напрямую связать это с состоянием ресурса.

Лучшее, что я могу придумать с ограниченным описанием, это то, что, возможно, ресурс остается активным, пока кто-то его «видел».

Это можно перевести обратно в свойство lastSeen: "date-time".

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

edit

Если подумать, я бы использовал свойство lastRenewed и использовал значение даты-времени. Это отключает его от «истечения срока действия», связывает информацию с ресурсом и позволяет избежать проблемы, когда пользователю необходимо установить значение null только для его немедленной замены сервером.

0
ответ дан Evert 28 March 2019 в 03:01
поделиться

У меня такой вопрос, каким был бы RESTful способ раскрыть «обновленную» функциональность?

Как бы вы предоставили эту функцию на веб-сайте?

[116 ] Вы, вероятно, начнете с просмотра веб-страницы записи с помощью запроса GET, которая загрузит текущее представление страницы в ваш локальный кеш.

Когда сервер определил, что запись соответствует требованиям для обновления веб-страница будет включать в себя своего рода гипермедиа, позволяющую клиенту запускать протокол обновления. В этом случае вы, вероятно, не хотите, чтобы у этого обеспечения была безопасная семантика, поэтому это будет форма, использующая метод POST. Когда пользователь отправляет форму, браузер создает HTTP-запрос с правильными метаданными и данные формы, скопированные в тело запроса, как описано в правилах обработки HTML; запрос будет отправлен на URL-адрес, указанный в form.action сервером.

Имеет ли значение написание URL для пользователя? Не совсем, пользователь просто отправляет форму, URL - это просто непрозрачные данные. Косвенно это имеет значение из-за способа определения семантики аннулирования кэша - если мы намереваемся, что обновление должно выселить ранее кэшированные представления веб-страницы, тогда запрос на публикацию должен иметь URL-адрес самой страницы.

Аналогично, веб-форма не обязательно должна быть на странице - вы можете иметь ссылку на форму, управляемую в другом месте, используя другие правила кэширования.

Сделайте это машиночитаемым способом, и вы получите REST API.

PUT и PATCH работают одинаково, за исключением того, что тело запроса является описанием самой страницы. Загрузите HTML-код, внесите изменения, затем либо поместите новый документ целиком, либо вычислите патч-документ и отправьте его вместо этого.

PUT и PATCH действительно хорошо работают для анемичных доменов - таких как хранилища документов; труднее работать с представлениями напрямую, когда вам необходимо провести обратный инжиниринг изменений, чтобы выработать намерение.

0
ответ дан VoiceOfUnreason 28 March 2019 в 03:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: