Конечная точка поста ASP.NET: модель данных в теле и параметры запроса - PullRequest
0 голосов
/ 04 декабря 2018

Назначение API ответственным за хранение файлов.

Модель данных File выглядит примерно так

public class File
{
    public Guid Id { get; set; }
    public string Path { get; set; }
    public string Contents { get; set; }
}

Так что с запросом post я настраиваюсь в своем контроллере (чтобы создатьфайл), мне нужно id файла, path файл будет сохранен (относительно предварительно настроенного корневого пути) и contents файла.

Мне интересно, лучше ли будет требовать, чтобы модель данных File передавалась в теле запроса, или id и path как параметры запроса, так и contents в телезапрос.

1 Ответ

0 голосов
/ 04 декабря 2018

TL; DR - используйте PUT /files/{id} с содержимым в теле.

От чего это зависит - что является (уникальным для вашей системы) идентификатором File?Здесь я предполагаю, что это Id, переданный клиентом, и что Path - это просто метаданные.Если путь также является частью идентификатора, вам необходимо соответствующим образом изменить его.

Поскольку клиент предоставляет и определяет идентификатор, вы, вероятно, предпочтете PUT к POST и укажите личность на пути;например, PUT /files/{id} с путем и содержанием в теле.Последующее идентичное PUT оставляет систему в идентичном состоянии, поэтому оно удовлетворяет требованию, что PUT является идемпотентом для наблюдателей.Последующее неидентичное PUT обновляет существующее содержимое.

Спецификация HTTP обеспечивает некоторую гибкость, поэтому вы можете использовать POST. последний немного изменил определение POST (для более широкого применения), но в оригинал (выделение мое) ...

Метод POST используется для запроса, чтобы исходный сервер принял объект, заключенный в запросе, в качестве нового подчиненного ресурса, идентифицируемого Request-URI в строке запроса.

... было яснее, что POST /files имеет смысл создавать, например, файл в каталоге (их пример), но POST /files/{id} имеет меньше смысла.

Это обсуждение есть еще немного на PUT против POST.Там также утверждается, что:

Обратите внимание, что следующее является ошибкой:

POST /questions/<new_question> HTTP/1.1
Host: www.example.com/

Если URL еще не создан, вам не следует использовать POST для его создания, покауказав имя.Это должно привести к ошибке «ресурс не найден», потому что еще не существует.Сначала вы должны поместить ресурс на сервер.

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