2015-08-04 3 views
0
набора изменения

Я реализую 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? С моей текущей реализацией этот набор изменений не удастся, но разве это нормально? Мне очень сложно понять правильную семантику наборов изменений ...

ответ

0

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

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

+0

Мой собственный клиент отправляет запрос в ожидаемом порядке. Но Spec не требует этого. Запрос на отправку 1 и 2 в обратном порядке, например, нет проблем (теоретически): зависимость запроса 2 от 1 очевидна, и служба может их переупорядочить. Но для запросов 2 и 3 это невозможно. Я просто не уверен, почему спецификация не требует заказных запросов. Я знаю ответ из [stackoverflow] (http://stackoverflow.com/a/21939972/2075207), но я все еще не уверен. Ребята из SAP, например. похоже, поддерживают [неупорядоченные изменения] (http://tinyurl.com/p67s2k9). – krombi

+0

В настоящее время вы можете настроить пакетный обработчик для отката или остановки, когда возникает ошибка при обработке этого запроса. –

+0

Я уже откатываю набор изменений, как только возникает ошибка. Моя проблема: последовательность 1,2,3 правильная, но 1,3,2 приводит к ошибке. Я думаю, что в соответствии с Spec это поведение неверно, потому что порядок запроса не должен иметь значения. – krombi

Смежные вопросы