Недавно мы начали писать REST API в нашем проекте API и реализовали управление версиями API с помощью пакета asp.versioning. В настоящее время мы занимаемся управлением версиями только контроллеров и сервисного уровня. Проблема связана с генерацией SDK. Во время сборки мы генерируем файл swagger.json, который передается в генератор Open-API SDK для создания SDK для C#, машинописного текста и т. д. Я хотел бы знать, как лучше всего подходить к управлению версиями? Основные опасения, которые меня беспокоят:
Когда в моделях происходят критические изменения? Например, предположим, что есть свойства, которые должны быть отмечены обязательным атрибутом или свойство было переименовано, для них необходимо указать версии. Итак, добавим ли мы номер версии к имени класса, например «Student2407», или определим пространство имен как ApiModel.2407 и оставим имя класса как «Студент». Последнее имеет смысл, так что в остальной структуре имя объекта кажется подходящим.
При управлении версиями уровня обслуживания мы копируем весь класс обслуживания, если существующая функция обслуживания имеет изменения, которые могут привести к поломке старой функции. контроллер, или мы добавим условие if else, чтобы решить, какой код выполнять. Например, если Add(int a, int b) в 2407 также выполняет деление a/b, но этого не следует делать в 2406, можем ли мы сказать if(v==2407){var c=a/b или мы клонируем весь код и просто добавляем a/b там, где нам нужно.
Файл swagger.json преобразуется в SDK. Будет ли лучше, если эти разные модели будут иметь разное пространство имен или имя класса? т. е. может ли проект С# иметь одни и те же классы в разных версиях? Это будет отправлено в nuget, чтобы потребители нашего API могли его использовать. Я думал, что, поскольку мы получаем преимущества от классов типов, единственный способ различать — это использовать пространства имен, указывающие версию.
Я спрашиваю, потому что прямо сейчас мы создаем swagger.json для каждой версии. поэтому будут созданы json 2406 и 2407, что означает два пакета nuget. Таким образом, SDK 2407 может не иметь API 2406, если у контроллера нет атрибута, определяющего обе версии.
Версии работают нормально, однако правильным долгосрочным подходом является вопрос. Я считаю, что модель должна иметь версию с дифференцирующим ее пространством имен. Таким образом, это также входит в SDK. Нужно выяснить, как уменьшить имя пространства имен клиентского генератора SDK, поскольку теперь оно огромно. Я также считаю, что уровень обслуживания можно разделить
Недавно мы начали писать REST API в нашем проекте API и реализовали управление версиями API с помощью пакета asp.versioning. В настоящее время мы занимаемся управлением версиями только контроллеров и сервисного уровня. Проблема связана с генерацией SDK. Во время сборки мы генерируем файл swagger.json, который передается в генератор Open-API SDK для создания SDK для C#, машинописного текста и т. д. Я хотел бы знать, как лучше всего подходить к управлению версиями? Основные опасения, которые меня беспокоят: [list] [*]Когда в моделях происходят критические изменения? Например, предположим, что есть свойства, которые должны быть отмечены обязательным атрибутом или свойство было переименовано, для них необходимо указать версии. Итак, добавим ли мы номер версии к имени класса, например «Student2407», или определим пространство имен как ApiModel.2407 и оставим имя класса как «Студент». Последнее имеет смысл, так что в остальной структуре имя объекта кажется подходящим. [*]При управлении версиями уровня обслуживания мы копируем весь класс обслуживания, если существующая функция обслуживания имеет изменения, которые могут привести к поломке старой функции. контроллер, или мы добавим условие if else, чтобы решить, какой код выполнять. Например, если Add(int a, int b) в 2407 также выполняет деление a/b, но этого не следует делать в 2406, можем ли мы сказать if(v==2407){var c=a/b или мы клонируем весь код и просто добавляем a/b там, где нам нужно. [*]Файл swagger.json преобразуется в SDK. Будет ли лучше, если эти разные модели будут иметь разное пространство имен или имя класса? т. е. может ли проект С# иметь одни и те же классы в разных версиях? Это будет отправлено в nuget, чтобы потребители нашего API могли его использовать. Я думал, что, поскольку мы получаем преимущества от классов типов, единственный способ различать — это использовать пространства имен, указывающие версию. [*]Я спрашиваю, потому что прямо сейчас мы создаем swagger.json для каждой версии. поэтому будут созданы json 2406 и 2407, что означает два пакета nuget. Таким образом, SDK 2407 может не иметь API 2406, если у контроллера нет атрибута, определяющего обе версии. [/list] Версии работают нормально, однако правильным долгосрочным подходом является вопрос. Я считаю, что модель должна иметь версию с дифференцирующим ее пространством имен. Таким образом, это также входит в SDK. Нужно выяснить, как уменьшить имя пространства имен клиентского генератора SDK, поскольку теперь оно огромно. Я также считаю, что уровень обслуживания можно разделить