Контроллеры веб-API asp.net принимают POCO или общие данные

Я новичок в веб-API ASP.NET и уже некоторое время изучаю это. По общему признанию, у меня паралич принятия решений. Я хочу создать REST-подобный API для системы с примерно 250 таблицами в базе данных. По сути, это двухуровневая система с пользовательским интерфейсом и уровнем доступа к данным, без использования бизнес-объектов или ORM.

Я не могу решить, должны ли мои контроллеры веб-API принимать / возвращать:

a) IDictionary пар имя / значение, которые я бы упаковал в параметры sql и передал на уровень доступа к данным и вернул сериализованную таблицу данных ado.net

б) строго типизированный сложный объект (объекты POCO). Например: класс учетной записи со всеми свойствами, соответствующими полям в базе данных.

Если бы мне пришлось создать классы POCO для каждой таблицы в системе, было бы более 250 классов, которые по сути ничего не делают, кроме упаковки данных и передачи их на наш уровень доступа к данным.

Кроме того, кажется, что мне нужно создать ApiController практически для каждой таблицы в базе данных, которую я хочу открыть через Web Api, потому что у вас есть только GET, POST, PUT, DELETE для каждого маршрута? Пожалуйста, помогите, бьется головой об стол.


person Peter Albanese    schedule 02.05.2014    source источник


Ответы (1)


См. Ответы ниже:

1. ** Использование ** «IDictionary пар имя / значение» допустимо, если ваш ресурс поддерживает только методы GET. Если вы хотите, чтобы пользователи публиковали или обновляли данные, как вы будете проверять данные? Кроме того, если вы хотите добавить HATEOAS, как бы вы это сделали? С точки зрения расширения, как бы вы поддержали иерархию вложенных объектов, подобную приведенной ниже:

public class Product 
{
    public int Id { get; set; }
    public string Name { get; set; }

    public string Category { get; set; }

    public decimal Price { get; set; }

    public IList<PurchaseDetail> PurchaseHistory { get; set; }
}

public class PurchaseDetail
{
    public int Id { get; set; }

    public DateTime PurchaseDate { get; set; }

    public decimal Cost { get; set; }
}

2. Вы можете иметь более одного GET, POST и т. д. для каждого ресурса, определяя разные маршруты. Больше по этой ссылке http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

person Toan Nguyen    schedule 05.05.2014