Дизайн маршрута ServiceStack
-
13-12-2019 - |
Вопрос
Эти 3 маршрута то же самое?Какой из них обычно предпочитают?
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
Большое спасибо ...
Решение
Предпочтительный маршрут на самом деле включает в себя Id
в PathInfo, поскольку
[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
для прагматических причин, по которым вы можете позволить
[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
Вы можете имитировать запрос
POST /todo/1
X-Http-Method-Override=DELETE
.
или встроен в html formdata, как:
<form action="/todo/1" method="POST">
<input type="hidden" name="X-Http-Method-Override" value="DELETE"/>
</form>
.
Несмотря на то, что важно не разрешать удаление через Get, как по контракту, не должны иметь побочных эффектов, поэтому безопасны для кэширования и воспроизведения HTTP Side-Ware, такими как Proxies, и т. Д.
Другие советы
Если вы хотите следовать рекомендациям для отдыха, вы не должны использовать Get или Post, чтобы удалить ресурс.
Получить глагол используется для чтения ресурса. Важное правило это то, что операция получить безопасную. То есть это можно сделать неоднократно без изменений заметно состояние ресурса. Это свойство Очень важно по разным причинам. Во-первых, индексационные двигатели используют получить Чтобы индексировать содержимое ресурса. Так было бы плохо, если индексирование Ресурс также изменил его. Во-вторых, посредников, таких как прокси, может кэшировать результаты операции получения, чтобы ускорить последующие доступ к тому же ресурсу.
Удаленные и удаление глаголов позволяют запрос на изменение состояния ресурс атомично.
Пост глагол может нести различные значения. Это швейцарская армия Нож HTTP глаголов. Для некоторых ресурсов он может быть использован для изменения внутреннее состояние. Для других его поведение может быть удаленным Процедура вызова.
Посмотрите на то, что Страница для полного описания.