Как вы организуете свои методы действий и контроллеры в коде - по URL или по возвращаемому объекту? - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть метод действия, который возвращает все книги библиотеки, указав libraryId. Должен ли метод действия быть помещен в LibraryController или в BookController?

Существует много методов действия в контроллерах, и контроллеры названы в соответствии с сущностями: BookController, LibraryController, OrderController, LoginController.

Для этого может быть два правила.

1. Конечные точки, организованные по URL-адресу (URL-адрес один и тот же, тип объекта отличается)

Конечная точка с URL-адресом /library/{libraryId}/books, возвращающим список книг, должна быть помещена в LibraryController, а конечная точка с URL-адресом /book/{bookId}, возвращающим одну книгу, должна быть помещена в BookController.

/library/{libraryId}/books => LibraryController
/book/{bookId} => BookController

Example:

[ApiController]
[Route("/library")]
public class LibraryController
{
   [HttpGet]
   [Route("{libraryId}/books")]
   public async Task<ActionResult<IList<Book>> GetBooks([FromRoute] Guid libraryId)
   {
      return await bookService.GetBooks(libraryId);
   }
}

[ApiController]
[Route("/book")]
public class BookController
{
   [HttpGet]
   [Route("{bookId}")]
   public async Task<ActionResult<Book>> GetBook([FromRoute] Guid bookId)
   {
      return await bookService.GetBook(bookId);
   }
}

2. Конечные точки, организованные возвращаемой сущностью (URL-адрес отличается, тип сущности одинаковый)

Конечная точка с URL /library/{libraryId}/books, возвращающая список книг, и конечная точка с URL /book/{bookId}, возвращающая одну книгу, должны быть помещены в BookController, поскольку они возвращают Book сущность и список Book сущностей.

/library/{libraryId}/books => BookController
/book/{bookId} => BookController

Example:

[ApiController]
public class BookController
{
   [HttpGet]
   [Route("/book/{bookId}")]
   public async Task<ActionResult<Book>> GetBook([FromRoute] Guid bookId)
   {
      return await bookService.GetBook(bookId);
   }

   [HttpGet]
   [Route("/library/{libraryId}/books")]
   public async Task<ActionResult<IList<Book>> GetBooks([FromRoute] Guid libraryId)
   {
      return await bookService.GetBooks(libraryId);
   }
}

Какое правило вы используете и почему?

Примечание: я добавил примеры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...