Пользовательский метод для веб-API, который не является стандартным методом CRUD

Я замечаю, что в большинстве веб-приложений только упоминаются методы CRUD. Мой вопрос, а как насчет тех методов, которые не CRUD? Например, если у меня есть модель для сотрудника со следующими свойствами: идентификатор, имя, адрес электронной почты, имя пользователя и пароль. Для модуля администратора, для update employee function , нет проблем, потому что веб-API будет в CRUD. Например, ниже:

public class EmployeeController : ApiController
{
    private AppDbContext db = new AppDbContext();

// PUT api/Employee/5
    public IHttpActionResult PutEmployee(int id, Employee employee)
    {

        if (id != employee.EmployeeID)
        {
            return BadRequest();
        }

        db.Entry(employee).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!EmployeeExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }
}

Но для модуля сотрудника, как насчет функции change password ? Нужно ли создавать еще один контроллер с глаголом put только для каждой функции?

Я нашел статью, которая связана с моим вопросом. Как создать собственный метод, например, депозит (httppost) и witdrawal (httppost) для программы банкомата?

Всего 1 ответ


Это зависит от ситуации. Если вы чувствуете, что пароль является ресурсом сам по себе, то вы можете иметь следующее:

PUT api/customer/{id}/password

Что бы стало в твоем контроллере

public IHttpActionResult PutCustomerPassword(int id, Password password)

Если в Customer указан только строка, то обновите sendind нового пользователя в объекте Employee .

Конечно, вы можете использовать наследование, создав новый базовый контроллер, который имеет некоторые функции управления пользователями и разделяет их между сотрудником и заказчиком. Таким образом, вы можете использовать CustomerController и EmployeeController просто как точку входа и вызывать код BaseController для выполнения реальной работы.


Есть идеи?

10000