Обработка нескольких версий в управлении версиями APIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обработка нескольких версий в управлении версиями API

Сообщение Anonymous »

Используя C# и .net 6
Я реализовал управление версиями API в нашем приложении, но у меня мало вопросов относительно реализации, и мне нужны предложения по правильному сопровождению кода.
Нет всему нашему контроллеру требуется управление версиями, поэтому мы реализовали управление версиями на уровне метода, как показано ниже:

Код: Выделить всё

[HttpGet]
[Route("getProfileData")]
[MapToApiVersion("1.0")]
[MapToApiVersion("2.0")]
public async Task GetProfileData(string? userName,ApiVersion apiAppVersion)
{
try
{
var apiVersion = apiAppVersion.MajorVersion ?? 1;
var profileData = await profileService.GetProfileData(userName, apiVersion);
//more code
}
catch (Exception ex)
{
}
}
На нашем уровне обслуживания мы делаем следующее (пожалуйста, не обращайте внимания на точный синтаксис):

Код: Выделить всё

public async Task GetProfileData(string userName, int apiAppVersion)
{
switch (apiVersion)
{
case 1:
var userList = await myService.Query(query, CommandType.Text);
var result = new
{
data = userList.where(x => x.UserName).Select(x => new UserDetailsVersion1
{
UserName = x.FirstOrDefault().UserName
})
};
return result;
case 2:
var userList = await myService.Query(query, CommandType.Text);
var result = new
{
data = userList.where(x => x.UserName).Select(x => new UserDetailsVersion2
{
UserName = x.FirstOrDefault().UserName
})
};
return result;
}
}
Теперь, если вы видите описанный выше метод, у меня есть 2 вопроса относительно вышеуказанной реализации:
  • Я использую оператор переключения для переключения между двумя версиями. В будущем у нас будут новые версии
    , в то время как некоторые из старых версий станут устаревшими. Это правильный способ сделать или есть элегантное решение для этой проблемы.
  • Case1 использует UserDetailsVersion1 в то время как Case2 использует UserDetailsVersion2. Поскольку мы не хотим, чтобы дополнительные поля добавлялись в UserDetailsVersion2 как часть ответа для UserDetailsVersion1, поэтому мне пришлось создать отдельный объект для обработки такого сценария. Опять же, если можно предоставить какую-либо информацию о том, как справиться с таким сценарием, поскольку это приведет к проблемам с удобством обслуживания.
Спасибо< /п>

Подробнее здесь: https://stackoverflow.com/questions/792 ... versioning
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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