Как управлять версиями веб-моделей и уровня обслуживания в API .net 6.0? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Как управлять версиями веб-моделей и уровня обслуживания в API .net 6.0? [закрыто]

Сообщение Anonymous »

Недавно мы начали писать 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, поскольку теперь оно огромно. Я также считаю, что уровень обслуживания можно разделить

Подробнее здесь: https://stackoverflow.com/questions/787 ... et-6-0-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»