Последовательность сортировки настроек API RESTful - PullRequest
1 голос
/ 08 ноября 2019

У нас есть RESTful API с кнопками / devices и /, тогда как у одного устройства может быть от 0 до ca. 1000 кнопок. Поэтому запрос GET / devices / {deviceId} / buttons реализует разбиение на страницы (с startIndex и limit). Каждая кнопка имеет свойство sortSequence, которое является числом. Кнопки должны быть отсортированы на основе этого свойства (нет никакого отношения к буквенному имени или чему-либо еще, кнопки упорядочены на основе пожеланий конечного пользователя с помощью перетаскивания в списке).

Вопрос в том,как вы справляетесь с модификацией sortSequence? Теперь у нас это есть в PUT / devices / {deviceId} / buttons / {buttonId} Payload: [... и новая последовательность]. Но как насчет других кнопок? Например, если у нас есть четыре кнопки с последовательностями 1, 2, 3, 4 и пользователь перетаскивает последнюю кнопку на первую позицию, происходит не одно изменение, а несколько: 4-> 1, 1-> 2, 2-> 3, 3-> 4.

Кто несет ответственность за последующие изменения, клиент или сервер?

Если клиент, то:

  • Через одно перетаскивание, клиент должен отправить, возможно, сотни REST-вызовов, чтобы изменить последовательность всех кнопок между
  • Поскольку существует пейджинг, клиент не может создать новую кнопку без запроса всехиз них, поскольку ему необходимо знать наивысшую последовательность

Если сервер, то:

  • PUT для одного ресурса (кнопки) обновляет группу других кнопок, которыеЯ считаю нарушением принципов REST. Кроме того, он запускает несколько событий обновления веб-сокетов для каждой кнопки, что замедляет работу пользовательского интерфейса.
  • Если запросы кнопок создания / изменения / удаления приходят быстро, а последовательности где-то посередине изменяются, сервер долженвстречаются исключения параллелизма, когда несколько потоков параллельных запросов будут пытаться обновить одни и те же объекты, возможно, до разных значений

И, конечно, кто бы это ни делал, если кнопка создается почти одновременно из двухклиенты, последовательность может дублировать себя.

Оба подхода кажутся довольно плохими и проблемными. Итак, есть ли общепринятая лучшая практика обработки таких изменений?

Инфраструктура: главный сервер .net, signalR, клиенты web / iOS / Android, ms sql db

...