Ответ 1
OData 1.0/2.0/3.0
В соответствии с MS-ODATA 1.7 Версии и возможности:
Протокол OData, определенный в этом документе, позволяет ограничить согласование возможностей с помощью заголовков ответов DataServiceVersion (раздел 2.2.5.3) и MaxDataServiceVersion (раздел 2.2.5.7) и заголовка ответа DataServiceVersion (раздел 2.2.5.3).
Когда он говорит "ограниченный", это означает ограниченный:
В ответ от сервера клиенту указан заголовок DataServiceVersion (раздел 2.2.5.3). Значение указывает версию протокола, которую сервер использовал в запросе для генерации ответа и который используется клиентом, чтобы определить, может ли он правильно интерпретировать ответ (то есть значение не является больше, чем значение заголовка MaxDataServiceVersion (раздел 2.2.5.7), отправленного в связанном запросе). Значение заголовка - это самая низкая версия протокола, который сервер может использовать для выполнения запроса.
Итак, в основном, совместимая служба, способная обрабатывать версии OData с 1.0 по 3.0, вернет "1.0" для функций, определенных OData 1.0, "2.0" для функций, определенных OData 2.0 и не присутствующих в OData 1.0 и т.д.
OData 4.0
В соответствии с Версия OData 4.0 Часть 1: Протокол, раздел 8.1.5 OData-версия заголовка
Службы OData ДОЛЖНЫ включать заголовок OData-Version в ответе , чтобы указать версию протокола, используемого для генерации ответа. Клиент ДОЛЖЕН интерпретировать ответ в соответствии с правилами, определенными в указанной версии протокола.
В соответствии с Что нового в OData версии 4.0, раздел 2.1.1 Улучшено: версия протокола
Теперь службы отвечают с помощью протокола максимум, поддерживаемого сервером, и указываются приемлемыми для клиента.
Также "понижение" до версий до 4.0 не распространяется, а издателям служб рекомендуется использовать новые корневые URL-адреса службы для служб 4.0.
Итак, для будущих версий OData, начиная с 4.0, кажется, что я могу надежно получить максимальную версию, которую я искал.
Заключение
Нет очевидного способа получить максимальную версию OData, поддерживаемую службой до 4.0. Заголовок ответа DataServiceVersion
будет содержать наименьший возможный номер версии на основе имеющихся функций URL-адреса, версию OData, поддерживаемой службой, и запрошенную клиентом версию.
Однако, начиная с OData 4.0, заголовок ответа OData-Version
всегда будет содержать максимальную версию на основе того, что поддерживает служба, и того, что запросил клиент.
К сожалению, в каждом экземпляре, который я пробовал до сих пор, передача заголовка "DataServiceVersion" в службу OData 4.0 приводит к ответу "Внутренняя ошибка сервера 500" (без заголовка OData-Version
). Таким образом, кажется, что отправка заголовков OData-Version
и DataServiceVersion
не гарантируется.
Лучшая ставка, кажется, отправляет OData-Version
, а затем ищет заголовок ответа DataServiceVersion
(который, вероятно, будет "1.0" даже для службы, поддерживающей 3.0). Если этот заголовок присутствует в ответе, отправьте второй запрос с заголовком DataServiceVersion
"3.0". Если вы получите ответ 4xx, попробуйте "2.0" и т.д.