Как поставить перехватчик или прокси на интерфейс OpenAPI?

Я работаю с веб-приложениями .Net Core 3.1 и .Net Framework 4.6.2, чтобы создать лучшую структуру для вызова служб RESTful, которым требуется инфраструктура для установки двух параметров.

Я почти уверен, что решение моего вопроса будет включать динамический прокси Castle Windsor или что-то очень похожее (возможно, Dora), но после прочтения всех документов я могу понять, как делать то, что я пытаюсь достичь.

Ситуация заключается в том, что у компании есть политика, согласно которой ВСЕ службы RESTful являются производными от базового класса, который имеет два значения: userId и appName. OpenAPI используется для генерации клиентского кода, поэтому ниже

      public interface BaseRequest 
{
    [DataMember]
    int UserId { get; set; }

    [DataMember]
    string AppName { get; set; }
}

public interface UpdateItemRequest : BaseRequest
{
    [DataMember]
    string Name {get;set;}
}

public interface ItemApi : IApiAccessor
{
    GetItemResponse GetItem (string itemNumber = default(int), int? userId = default(int?), string appName = default(string));
    UpdateItemResponse UpdateItem (UpdateItemRequest body = default(UpdateItemRequest));
}

Вызов API завершится ошибкой, если не заданы userId и AppName. Цель состоит в том, чтобы избавить разработчика от необходимости постоянно устанавливать эти значения и устанавливать их в классе перехватчика или прокси, я ищу что-то вроде этого:

      public class ItemService: IApiAccessor
{
    private ItemApi _itemApi;
    
    public ItemService( ICustomInterceptorOrProxy<ItemApi> itemApi)
    {
        _itemApi = itemApi
    }
    
    public GetItemResponse GetItem(string itemNumber)
    {
        return _itemApi.GetItem(itemNumber);
    }
    
    public UpdateItemResponse UpdateItem(string itemNumber, string name)
    {
        return _itemApi.UpdateItem(new UpdateItemRequest { 
            ItemNumber = itemNumber,
            Name = name}
        );
    }
}

И реализация ICustomInterceptorOrProxy заполнит userId и AppName. У меня есть следующие основные проблемы:

Как создать перехватчик / прокси, который будет работать с интерфейсом OpenAPI. Поскольку интерфейс автоматически создается OpenAPI, у меня нет возможности добавлять к нему атрибуты. Все они являются производными от общего интерфейса: IApiAccessor.

Существует также вопрос о введении значений в такие методы, как GetItem, где отправляются отдельные параметры, а не соответствующий объект GetItemRequest (который все еще присутствует, но цель состоит в том, чтобы максимально облегчить жизнь разработчика, используя его. Я на 99,9% уверен, что размышление об исходном методе может быть выполнено, чтобы обнаружить, что метод действительно нуждается в этих значениях, и для их добавления, но мне интересно, есть ли лучший способ, чем использование отражения каждый раз, он немного медленный.

0 ответов

Другие вопросы по тегам