C # REST API - украшает объекты, возвращаемые GET, с помощью поля идентификатора - PullRequest
1 голос
/ 14 марта 2019

Фон

Когда потребитель взаимодействует с моим REST API с помощью глаголов POST / PATCH / PUT, я не хочу показывать объект, содержащий поле идентификатора.Причина в том, что это поле вообще не должно изменяться пользователем API.

Но когда потребитель получает объект, используя GET, я хочу, чтобы был раскрыт идентификатор объекта.

Пример:

Этот POST принимает сущность типа Product в качестве аргумента.Этот продукт не имеет поля идентификатора, поскольку он будет автоматически сгенерирован API.В объекте ответа возвращается продукт, включая его автоматически сгенерированный идентификатор.

enter image description here

Вопрос: Как мне добиться этого вхороший способ сопровождения?

Возможные решения

Я определил два способа сделать это, не включая магию и хорошо сочетающиеся с автоматически сгенерированной документацией чванства.

Первое решение: Создайте базовый класс без идентификатора, а затем подкласс, который наследуется от него и добавляет поле идентификатора.

Базовый класс:

public class Product
{       
    public string Name { get; set; }       
    public string Category { get; set; }     
    public double Price { get; set; }       
    public DateTimeOffset DateAdded { get; set; }
}

Подкласс:

public class IdentifiedProduct : Product
{             
    public Guid Id { get; set; }
}

Результат по чванству: enter image description here

Недостаток: По сути, я удваиваю количество сущностей в каждом слое моего API.


Второе решение: Добавить общий класс декоратора

Универсальный декоратор:

public class IdentifiedEntity<EntityType> where EntityType : class
{      
    public Guid Id { get; set; }       
    public EntityType Entity { get; set; }
}

Результат в чванстве:

enter image description here

Недостаток: Уродливый объект json


Любой лучшерешения?

...