Я реализую OData v4 Service с WebAPI и я также реализована поддержкой OData ревизий с помощью кода из https://damienbod.wordpress.com/2014/08/14/web-api-odata-v4-batching-part-10/OData v4 поведение
В основном это работает, но теперь я зря о правильном поведении, когда изменение одного и того же объекта из нескольких запросов в одном наборе изменений. Рассмотрите этот пример:
Контент-идентификатор: 1 - POST ~/Предприятие
-> Создать новую сущность.
ContentID: 2 - PUT ~/Entity ($ Entity-ContentID1)/Компания/$ исх $ ID = URI
-> Создать ссылку от нового объекта к существующей компании, используя ContentID?.
Content-ID: 3 - POST ~/Entity ($ Entity-ContentID1)/ChangeState
-> Выполнение действия для изменения состояния вновь созданного объекта.
ChangetState может быть выполнен только в том случае, если компания связана. Если клиент отправляет все запросы в этом порядке, и если я выполняю запросы в порядке, все в порядке.
Но в соответствии с OData Spec запросы в наборах: неупорядоченный.
Каков ожидаемый результат, если клиент отправляет запрос 3 перед запросом 2? С моей текущей реализацией этот набор изменений не удастся, но разве это нормально? Мне очень сложно понять правильную семантику наборов изменений ...
Мой собственный клиент отправляет запрос в ожидаемом порядке. Но Spec не требует этого. Запрос на отправку 1 и 2 в обратном порядке, например, нет проблем (теоретически): зависимость запроса 2 от 1 очевидна, и служба может их переупорядочить. Но для запросов 2 и 3 это невозможно. Я просто не уверен, почему спецификация не требует заказных запросов. Я знаю ответ из [stackoverflow] (http://stackoverflow.com/a/21939972/2075207), но я все еще не уверен. Ребята из SAP, например. похоже, поддерживают [неупорядоченные изменения] (http://tinyurl.com/p67s2k9). – krombi
В настоящее время вы можете настроить пакетный обработчик для отката или остановки, когда возникает ошибка при обработке этого запроса. –
Я уже откатываю набор изменений, как только возникает ошибка. Моя проблема: последовательность 1,2,3 правильная, но 1,3,2 приводит к ошибке. Я думаю, что в соответствии с Spec это поведение неверно, потому что порядок запроса не должен иметь значения. – krombi