Правильный HTTP-глагол для использования в качестве конечной точки проверки бизнес-правил в Web API - PullRequest
0 голосов
/ 26 октября 2018

У меня ниже контроллер Web API. Его единственная обязанность состоит в том, чтобы проверить входящий документ в соответствии с набором бизнес-правил и вернуть результат. Какой правильный HTTP-глагол использовать для этого действия контроллера?

//[Http<???>]
public IActionResult ValidateBusinessRules([FromBody BusinessDocument document)
{
  var result = ValidateBusinessRules(document);
  return Ok(result);
}

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

[FromBody] явно указывает связующему модели проверять тело запроса на привязку данных.И поскольку только определенный запрос разрешает тело, это означает, что он работает с POST или PUT.

POST будет глаголом по умолчанию для использования в этом сценарии.Принимая во внимание состояние модели, действие может выглядеть следующим образом:

[HttpPost]
public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document) {
    if(ModelState.IsValid) {
        var result = ValidateBusinessRules(document);            
        if(result.IsValid) { //assuming result has a flag
            return Ok(result);
        }
        return BadRequest(result);//assuming result provides relevant details.
    }
    return BadRequest(ModelState);
}

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

0 голосов
/ 26 октября 2018

Если вы используете эту конечную точку для проверки данных из формы, а затем хотите сохранить их через другую конечную точку, я думаю, что лучшим решением будет что-то вроде этого:

    [HttpPost]
    [Route("documents")]
    public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document)
    {

        var result = ValidateBusinessRules(document);
        if (!result.IsValid)
        {
            return BadRequest(result);
        }

        var document = _documentService.Save(document);
        return Ok(document);
    }

Для меня этостранно использовать POST, если вы не хотите создавать новый ресурс.

0 голосов
/ 26 октября 2018

Можно утверждать, что POST должен использоваться только для создания нового объекта, но GET не предназначен для отправки данных через тело запроса и другие глаголы (PUT = обновить сущность, УДАЛИТЬ = удалить сущность) не дает вам лучшего варианта, я бы сказал, что можно использовать POST для сценариев, в которых вам нужно получить некоторые данныес сервера и необходимо отправить данные в теле запроса.

Поэтому я бы порекомендовал вам использовать POST здесь

[HttpPost]
public IActionResult ValidateBusinessRules([FromBody] BusinessDocument document)
{
  var result = ValidateBusinessRules(document);
  return Ok(result);
}
...