Этот ответ в первую очередь относится к последующему вопросу.
Один из шаблонов, который я видел (часто используется на крупных платформах электронного архива правительства), заключается в принятии основной / вспомогательной политики нумерации версий для схемы. Здесь второстепенные приращения версии указывают на непрерывное изменение схемы, а основные приращения версии зарезервированы для критических изменений. URI пространства имен содержит только основной номер версии.
Например, допустим, вы хотите предоставить сервис, структура входящего сообщения которого определяется как submitStuff-v1-0.xsd
. Первоначально он может иметь целевой URI пространства имен (скажем):
http://www.example.org/services/submitStuff/1
В какой-то момент после выпуска v1.0 мы вводим неразрывное изменение (например, добавление необязательного элемента). Это приведет к выпуску submitStuff-v1-1.xsd
, но URI пространства имен останется как:
http://www.example.org/services/submitStuff/1
Поскольку новый элемент, введенный в v1.1, является необязательным, этот подход означает, что пользователи службы не обязаны обновлять свои системы, если им не нужно предоставлять новую информацию (что им нужно будет сделать, если пространство имен URI также содержал младшую версию). Хотя это может показаться простым изменением для клиента, оно вводит дополнительную связь между отправляющей и принимающей системами, что может быть нежелательно.
Если позднее будет введено критическое изменение (например, введение нового обязательного элемента), у нас будет submitStuff-v2-0.xsd
с новым пространством имен:
http://www.example.org/services/submitStuff/2
Клиенты службы смогут затем явно указать во входящем сообщении, пытаются ли они отправить v1.x- или v2.x-совместимый запрос.
В течение переходного периода поставщик услуг может захотеть поддерживать сообщения как v1.x, так и v2.x, пока все клиенты не перейдут на новую структуру сообщений. Ввод основной версии в пространство имен позволяет различать следующие сценарии:
- Файлировщик попытался отправить сообщение v2.x, но пропустил обязательный элемент, и в этом случае должно быть возвращено сообщение об ошибке.
- Файлер действительно отправил сообщение v1.x, поскольку его система еще не была обновлена для создания сообщений v2.x, и в этом случае ошибка не должна возвращаться.
Можно также использовать информацию о версиях, встроенную в пространство имен, для маршрутизации на основе содержимого - например, для маршрутизации всех сообщений новой версии на новый набор серверов обработки.