【问题标题】:What other HTTP methods besides POST, PUT, DELETE, GET除了 POST、PUT、DELETE、GET 之外还有哪些 HTTP 方法
【发布时间】:2013-02-19 06:56:28
【问题描述】:

我正在使用 ASP.NET 的 WebAPI 创建一个 Web 服务。

好像是ApiController中的方法名映射到了Uri。

例如,PutProducts 添加产品

如果我想要一个方法来执行说.. 一个批处理文件.. 比如 ExecuteProcess1();

这不需要返回任何商业价值的任何价值。只是让客户随意开火,这适合我的网络服务吗?应该调用什么方法?

【问题讨论】:

    标签: asp.net web-services rest asp.net-web-api


    【解决方案1】:

    你可以使用任何你想让它工作的 HTTP 动词。但是遵循 REST Api 如何使用的最佳实践,简单的概念是:

    1. GET:从 REST 服务中提取资源而不更改服务器状态。
    2. POST:创建新资源。
    3. PUT:更新资源。
    4. DELETE:删除资源。

    因此:

    1. 如果您的方法:ExecuteProcess 运行在服务器上创建某些内容的进程,请使用 POST。
    2. 如果它更新了服务器上的某些内容,请使用 PUT。
    3. 如果它删除服务器上的某些内容,请使用 DELETE。

    【讨论】:

      【解决方案2】:

      如果该方法正在修改服务器上的某些状态(例如更新数据库中的记录,写入文件,...),您应该使用 POST HTTP 动词。根据此方法正在修改的 资源,您可以拥有相应的 API 控制器:

      public class SomeResourceController: Controller
      {
          public void Post()
          {
              ... do the processing here
          }
      }
      

      显然,您将用您正在操作的资源(产品、订单、人员等)替换此控制器名称中的 SomeResource

      【讨论】:

      • 所以它不会成为 ApiController 的一部分?
      • 当然,它将成为ApiController 的一部分。所有动作都需要成为某个控制器的一部分。您只需要为您的资源选择正确的名称。这取决于您在服务器上处理的信息类型。
      • 这在技术上是不正确的。 PUT 和 DELETE 也会修改服务器上的某些状态。
      • @Aliostad,是的,这是真的。通过修改我的意思是更新。当然,如果你要删除,你应该使用 DELETE 动词,如果你要插入,你应该使用 PUT 动词。我认为这很明显。
      • @DarinDimitrov 再次不正确。插入 -> 发布和更新 -> 放置。
      【解决方案3】:

      您可以使用 POST 或 GET,这取决于您要更新的内容。但在这种情况下,您应该使用普通的 mvc 控制器和操作。不管有没有 WebApi,它们仍然是 HTTP 请求。

      【讨论】:

        【解决方案4】:

        如果您将流程视为资源,那么理想情况下,您将执行 POST [假设您发布流程名称],否则将执行具有成功流程执行所需的适当查询参数的 GET。

        更好的方法是 POST 用于启动流程,GET 以查看流程的状态,例如完成、进行中等。

        【讨论】:

          猜你喜欢
          • 2013-08-26
          • 2014-11-03
          • 2018-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-01
          • 1970-01-01
          相关资源
          最近更新 更多