Коды состояния HTTP - PUT - 404 / NotFound против 400 / BadRequest - PullRequest
0 голосов
/ 04 мая 2020

У меня есть объекты виджетов, которые принадлежат объектам компании. Между компаниями и виджетами существует отношение один ко многим.

Вот мой первый проход по методу Put:

[Route("MyApi/Companies/{companyId}/WidgetAdministration/[controller]")]
[HttpPut("{widgetId}")]
public async Task<ActionResult> UpdateWidget([FromRoute]int companyId, [FromRoute]int widgetId, WidgetDTO widgetDto)
{
    widgetDto.CompanyId = companyId;
    widgetDto.WidgetId = widgetId;

    Widget widget = await _myContext.Widgets
        .FirstOrDefaultAsync(e => e.CompanyId == companyId && e.WidgetId == widgetId);

    if (widget == null)
    {
        return NotFound();
    }
    else
    {
        _mapper.Map(widgetDto, widget);
        await _myContext.SaveChangesAsync();
        return Ok();
    }
}

В сущности, есть две вещи, которые могут go ошибаться.

ПЕРВЫЙ - Виджет не принадлежит Компании.

Если это произойдет, я считаю, что мне нужно вернуть 404 / NotFound. Из предыдущего вопроса, который я задал, я был убежден, что если я хочу получить «Компанию 1», «Виджет 55», но «Виджет 55» не принадлежит «Компании 1», то 404 / NotFound является правильным ответом. 404 относится не к Widget / 55, а ко всему URI ресурса: Company / 1 / Widget / 55. Я предполагаю, что тот же лог c будет применяться как в PUT, так и в GET.

ВТОРОЕ - Компания не существует

Эта задача немного сложнее. Это может быть:

404 / NotFound - после логики c в сценарии ошибки FIRST.

400 / BadRequest - потому что пользователь сделал то, что не должен был делать, пытаясь обновить виджет, не принадлежащий этой компании. (плюс, я видел это в видео PluralSite)

Есть мысли?

Кроме того, если в качестве идентификатора параметра не совпадают идентификаторы в DTO, мы определили, что мы просто переопределит значения в DTO. Это не позволит пользователю переназначить один виджет из одной компании в другую. Я полагаю, что для этого сценария нет правильного или неправильного ответа, все будет зависеть от конкретной ситуации, основанной на сценариях использования и системных требованиях.

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