Фон
Когда потребитель взаимодействует с моим REST API с помощью глаголов POST / PATCH / PUT, я не хочу показывать объект, содержащий поле идентификатора.Причина в том, что это поле вообще не должно изменяться пользователем API.
Но когда потребитель получает объект, используя GET, я хочу, чтобы был раскрыт идентификатор объекта.
Пример:
Этот POST принимает сущность типа Product в качестве аргумента.Этот продукт не имеет поля идентификатора, поскольку он будет автоматически сгенерирован API.В объекте ответа возвращается продукт, включая его автоматически сгенерированный идентификатор.
Вопрос: Как мне добиться этого вхороший способ сопровождения?
Возможные решения
Я определил два способа сделать это, не включая магию и хорошо сочетающиеся с автоматически сгенерированной документацией чванства.
Первое решение: Создайте базовый класс без идентификатора, а затем подкласс, который наследуется от него и добавляет поле идентификатора.
Базовый класс:
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; }
}
Результат по чванству:
Недостаток: По сути, я удваиваю количество сущностей в каждом слое моего API.
Второе решение: Добавить общий класс декоратора
Универсальный декоратор:
public class IdentifiedEntity<EntityType> where EntityType : class
{
public Guid Id { get; set; }
public EntityType Entity { get; set; }
}
Результат в чванстве:
Недостаток: Уродливый объект json
Любой лучшерешения?