Архитектура C# .NET API, когда основным источником данных является служба, подключенная к другому API, а не БД. ⇐ C#
-
Anonymous
Архитектура C# .NET API, когда основным источником данных является служба, подключенная к другому API, а не БД.
Обычно мои программы работают так: интерфейс angular -> серверная часть .NET API. Архитектура API обычно соответствует чему-то вроде.
Проект App.Business – содержит сервисы, бизнес-логику и т. д.
Проект App.Core – содержит интерфейсы для служб, позволяющие внедрить зависимости на уровне контроллера и ослабить зависимости.
Проект App.Domain – содержит модели для передачи в пользовательский интерфейс
App.Infrastructure – когда в нашем приложении есть база данных, это обычно конфигурации EF/EF Core для формирования базы данных
App.WebApi – содержит контроллеры для пользовательского интерфейса (обычно попробуйте оставить это как внедрение службы и вызвать ее, никакой бизнес-логики/манипулирования данными вообще)
В моем последнем случае приложение не имеет базы данных, которую оно вызывает в качестве источника данных, а вместо этого вызывает своего рода API-интерфейс слоя оболочки/промежуточного программного обеспечения, который находится между моим WebApi и сторонним API. Сторонний API написан очень грубо и требует большого количества манипуляций с данными, поэтому он необходим. API-оболочка также имеет множество потребителей, поэтому имеет смысл хранить там прямые вызовы стороннего API.
Обычно я использую инструмент под названием Nswag OpenApi, который по сути создает подключенную службу для генерации всех конечных точек API-интерфейса API-оболочки в моем WebApi, а также всех возвращаемых моделей (экономит огромное количество времени).< /п> Проблема заключается в том, что эта подключенная служба должна находиться в проекте App.WebApi, поскольку API-интерфейс оболочки использует токен от имени пользователя (пользователь IPrincipal), который должен поступать от контроллера. Это создает проблему циклической зависимости при попытке переместить дополнительную бизнес-логику, необходимую в отдельный проект, поскольку все модели/заранее написанные вызовы API находятся в проекте App.WebApi.
Возможно, вы не объяснили это как можно лучше, но если у вас есть опыт использования другого API в качестве основного источника данных, что вы сделали? Лучше всего сохранить вызовы API-оболочки в проекте WebApi, сопоставить результат с локальной моделью, а затем передать его на бизнес-уровень для дополнительной логики. Это потребует от меня переписать каждую модель возврата локально, но я думаю, что это выполнимо, если не найти лучшего варианта.
Обычно мои программы работают так: интерфейс angular -> серверная часть .NET API. Архитектура API обычно соответствует чему-то вроде.
Проект App.Business – содержит сервисы, бизнес-логику и т. д.
Проект App.Core – содержит интерфейсы для служб, позволяющие внедрить зависимости на уровне контроллера и ослабить зависимости.
Проект App.Domain – содержит модели для передачи в пользовательский интерфейс
App.Infrastructure – когда в нашем приложении есть база данных, это обычно конфигурации EF/EF Core для формирования базы данных
App.WebApi – содержит контроллеры для пользовательского интерфейса (обычно попробуйте оставить это как внедрение службы и вызвать ее, никакой бизнес-логики/манипулирования данными вообще)
В моем последнем случае приложение не имеет базы данных, которую оно вызывает в качестве источника данных, а вместо этого вызывает своего рода API-интерфейс слоя оболочки/промежуточного программного обеспечения, который находится между моим WebApi и сторонним API. Сторонний API написан очень грубо и требует большого количества манипуляций с данными, поэтому он необходим. API-оболочка также имеет множество потребителей, поэтому имеет смысл хранить там прямые вызовы стороннего API.
Обычно я использую инструмент под названием Nswag OpenApi, который по сути создает подключенную службу для генерации всех конечных точек API-интерфейса API-оболочки в моем WebApi, а также всех возвращаемых моделей (экономит огромное количество времени).< /п> Проблема заключается в том, что эта подключенная служба должна находиться в проекте App.WebApi, поскольку API-интерфейс оболочки использует токен от имени пользователя (пользователь IPrincipal), который должен поступать от контроллера. Это создает проблему циклической зависимости при попытке переместить дополнительную бизнес-логику, необходимую в отдельный проект, поскольку все модели/заранее написанные вызовы API находятся в проекте App.WebApi.
Возможно, вы не объяснили это как можно лучше, но если у вас есть опыт использования другого API в качестве основного источника данных, что вы сделали? Лучше всего сохранить вызовы API-оболочки в проекте WebApi, сопоставить результат с локальной моделью, а затем передать его на бизнес-уровень для дополнительной логики. Это потребует от меня переписать каждую модель возврата локально, но я думаю, что это выполнимо, если не найти лучшего варианта.
Мобильная версия