Как соответствовать шаблонам URL REST вместо имен методов - PullRequest
0 голосов
/ 11 июня 2018

Скажем, у меня есть несколько бизнес-объектов, которые я хочу запросить у БД, и сделать это в веб-API.Скажем, клиенты и заказы.Каждый заказ может иметь ровно одного клиента.

Скажи, что я хотел получить- все заказы для данного клиента- для данного заказа верните объект, который содержит некоторые атрибуты клиентов, а также 5 последних заказов клиентов:

https://github.com/Microsoft/api-guidelines/blob/master/Guidelines.md#71-url-structure

Я обычно использую имена методов, подобные этим.

OrdersController:- GetOrders- GetordersforCustomer (int CustomerId)- GetOrderWithCustomerInfo (int CustomerId)

CustomerController- GetCustomer (int id)- GetCustomerWithinZipcode

Таким образом, использование методов контроллера API, подобных этому, не соответствует "рекомендациям" REST, которые я видел в других местах, верно?Если нет, то как я могу реструктурировать свои контроллеры, чтобы они соответствовали именам стандартных HTTP-методов, особенно когда есть связанные сущности?

Например, мне нужен вызов, который возвращает объект, который включает атрибуты не только из порядка, но и из5 лучших заказов от клиента по текущему заказу.Мне нужен метод, который получает результат заказа, но также нужен метод, который получает другой тип результата заказа - один с некоторыми атрибутами от клиента и / или, возможно, нескольких других объектов.

пример того, о чем я говорю - использование только http глаголов, но со связанными сущностямиhttps://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api#restful Но как вы относитесь к отношениям?Если отношение может существовать только в другом ресурсе, принципы RESTful предоставляют полезное руководство.Давайте посмотрим на это на примере.Билет в Enchant состоит из нескольких сообщений.Эти сообщения могут быть логически сопоставлены с конечной точкой / tickets следующим образом:

GET /tickets/12/messages - Retrieves list of messages for ticket #12
GET /tickets/12/messages/5 - Retrieves message #5 for ticket #12
POST /tickets/12/messages - Creates a new message in ticket #12
PUT /tickets/12/messages/5 - Updates message #5 for ticket #12
PATCH /tickets/12/messages/5 - Partially updates message #5 for ticket #12
DELETE /tickets/12/messages/5 - Deletes message #5 for ticket #12

1 Ответ

0 голосов
/ 11 июня 2018

Вопрос широкий, а также основанный на мнениях.

Тем не менее, нет необходимости реструктурировать контроллеры.

Исследования с использованием атрибутной маршрутизации.

Ссылка Маршрутизация к действиям контроллера в ASP.NET Core

Учитывая приведенные рекомендации, пример потенциальных маршрутов может выглядетькак ниже предложения.

[Route([controller])]
OrdersController:
    //Matches GET orders
    [HttpGet]
    GetOrders()

    //Matches GET customers/1234/orders
    [HttpGet(~/customers/{customerId:int}/orders)]
    GetOrdersForCustomer(int customerId)

    Matches GET orders/1324/customer/5678
    [HttpGet({orderId:int}/customer/{customerId:int})]
    GetOrderWithCustomerInfo(int orderId, int customerId)

[Route([controller])]
CustomersController
    //Matches GET customers
    [HttpGet]
    GetCustomers()

    //Matches GET customers/1234
    [HttpGet("{id:int}")]
    GetCustomer(int id)

    //Matches GET zipcodes/90210/customers
    [HttpGet("~/zipcodes/{zipCode:int}/customers")]
    GetCustomerWithinZipcode(int zipCode)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...