Один контроллер Web API на ресурс или меньше контроллеров с более настраиваемыми действиями?

Я хочу подвергнуть большинство моих бизнес-уровней методам веб-API, чтобы обеспечить более широкое потребление.

Одна идея состоит в том, чтобы иметь один контроллер веб-API на ресурс.

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

Мне нравится второй подход, который приводит к меньшему количеству контроллеров.

Каковы недостатки НЕ наличия одного контроллера на ресурс?

Дополнительная информация:

Этот API будет жить в интрасети и будет обслуживать приложения поддержки, которые нуждаются в данных из наших 2-3 основных приложений (ERP, Payroll, Barcode e.t.c)

Ресурсом для этого APi будут бизнес-объекты, которые определены в нашей сборке бизнес-уровня. Они будут простыми объектами и сложными. Примеры:

  • Элементы инвентаря
  • Клиенты
  • Элементы на клиента
  • Текущая загрузка pickslips
  • Существующие производственные данные

e.t.c

Пример:

Я хочу выставить такие методы, как GetCustomerListByArea или GetItemsListPerCategory.

Что тогда? Должен ли я создать другой контроллер или использовать пользовательские действия контроллера и маршрутизацию атрибутов и поместить его в существующие контроллеры?

Ссылка с дополнительной информацией:

REST против RPC в веб-интерфейсе ASP.NET? Какая разница; он делает оба.

Очень красивая, довольно старая статья, объясняющая мой вопрос. Но это не глубже в том, чтобы сказать, как управлять контроллерами. В районах? Или просто папки?

1 ответ

Это сводится к простому принципу проектирования - разделению проблем (SoC), вам следует подумать о том, какие функциональные возможности вашего бизнес-уровня вы хотите разоблачить и создать на их основе контроллеры.

В приведенном выше примере вы можете создать ProductController и CustomerController, которые могут отображать следующие конечные точки:

GET /api/customer/1234 # gets customer by id
POST /api/customer/create # creates a new customer
GET /api/customer/1234/items # gets all items for a customer
GET /api/product/9876 # gets a product by id
POST /api/product/create # creates a new product

Надеюсь, что это поможет...

licensed under cc by-sa 3.0 with attribution.