2015-11-20 2 views
2

Я создал веб-API (REST) ​​называется фильтр, который имеет несколько методов получения таких какASP.NET Web Api дублирующие глаголы

GetCompany GetCustomers GetOrders

Является ли это правильная практика, или я должен иметь разные web api для разных объектов? Должен ли я иметь один и тот же http-глагол (GET), дублированный в том же WEB API.

Как насчет других глаголов (POST или PUT)?

В другом сервисе у нас есть один случай, когда мы хотим обновить конкретное поле и другой случай, когда мы можем обновлять все, кроме определенного поля в записи. Должен ли использоваться один метод (POST или PUT) для обоих случаев или у меня есть два отдельных метода?

Я вызываю эти методы из angularjs $ http service.

+2

У вас нет разных контроллеров, таких как CompanyController, CustomerController и OrderController? Или я чего-то не хватает? – Win

+0

У меня есть один контроллер под названием FilterController. Причина, по которой я создал, заключалась в том, что я знаю, что мне когда-либо понадобится метод get и создание нескольких контроллеров, которые содержат только один метод, кажутся слишком большими для слишком маленьких. – tangokhi

ответ

4

Вы должны иметь другой контроллер для каждого ресурса (объекта)

Тогда метод Get на вашем CustomersController, например

Ваш URLs затем будет

/Компания
/Клиенты
/Заказы

и т.д.

Ваши HTTP-глаголы затем направляются к соответствующим методам в этих контроллерах. Таким образом, GET запрос /Customers будет направлен в ваш метод Get() на этом контроллере

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

Что-то вроде

public class FilterController : ApiController 
{ 
    [HttpGet] 
    [Route("orders")] 
    public IHttpActionResult GetOrders() 
    { } 


    [HttpGet] 
    [Route("customers")] 
    public IHttpActionResult GetCustomers() 
    { } 


    [HttpPut] 
    [Route("customers")] 
    public IHttpActionResult UpdateOrders() 
    { } 
} 

Но это будет довольно большим, довольно быстрым, и я обычно не предлагаю это делать так.

Один контроллер на ресурс намного чище.

+0

См. Мои комментарии выше. Для моей другой проблемы, связанной с обновлением ресурса, у меня есть один контроллер. В соответствии с тем, что вы предлагаете, у меня должен быть только один метод для PUT, и в этом методе у меня должна быть некоторая логика, где мне нужно определить, следует ли запускать один логический путь или другой? Я вижу вашу точку зрения, что выполнение чего-то подобного будет чистым, но не будет ли этот метод слишком много работать, как если бы у меня было два метода для представления различных сценариев обновления, это будет более кратким. Каковы недостатки двух методов put, а не одного на одном контроллере. – tangokhi

+0

@tangokhi ответить обновлено – Alex

+0

минус читаемость. Если у вас есть один контроллер на ресурс, гораздо проще выполнить навигацию по вашему коду.Если вы хотите что-то изменить с обновлением клиентов, вы знаете, чтобы перейти к CustomerController ... делает его гораздо более удобочитаемым. – Alex