【问题标题】:Why use HTTP verbs?为什么使用 HTTP 动词?
【发布时间】:2014-11-05 21:08:12
【问题描述】:

因为动词的目标是一个 URL,如 server.domain/getallrecords 或 server.domain/delete1record 或类似的东西。而getallrecords、delete1record是专门为特定目的而设计的,为什么我们这里需要动词?

get 调用有什么区别

server.domain/getallrecords or 
server.domain/delete1record 

或对上述任何 URL 的 put(或 post 或 delete)调用?

【问题讨论】:

    标签: asp.net .net http


    【解决方案1】:

    如果你采用 RPC 方式,HTTP 动词似乎没用。

    HTTP 动词是 REST 样式 HTTP 服务的良好伴侣,因为面向资源的 URI 不包含操作标识符,而是包含资源。

    例如,server.domain/getallrecords 将是 server.domain/records,如果您使用 HTTP/GET 对该资源执行请求,如果您使用 HTTP 执行相同的请求,资源将被映射到将返回所有记录的服务器方法/POST,它会创建一个新记录,等等。

    您需要决定:RPCREST,根据这一点,您会发现 HTTP 动词有用与否。我建议您使用 HTTP 动词是使用带有预定义动词的众所周知的协议(HTTP)的好方法,而不是发明自己的动词。但同样,这取决于您自己的想法、偏好和要求。

    【讨论】:

    • 请允许我在此答案中添加,默认情况下您的默认跨域引用保护将阻止诸如 DELETEPOSTPUT 之类的动词可访问。如果您对所有内容都使用GET,恶意网站可能会使用<img src="http://server.domain/delete1record" /> 等代码来触发所有访问用户的删除尝试。如果您的授权用户之一访问此站点,那么您可能会遇到麻烦。
    • @tom.dietrich 顺便说一句,使用GET 动词删除记录的场景只是一个设计缺陷,不是吗?
    • 我不认为 ASP.NET 默认阻止跨域GET 请求,但我可能弄错了。我肯定会建议将GET 用于不只是检索数据的任何事情是一个坏主意。
    • @Matias:这很有意义。谢谢。
    • @tom.dietrich 我已经放弃了我所有的 cmets。现在我知道他们是无用讨论的一部分,这对我的回答和 OP 的问题没有任何价值。现在由您来决定,因为您的 cmets 不会帮助未来的访客。添加您自己的答案来解释您自己的经历,这就是 SO 的工作原理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2011-01-15
    相关资源
    最近更新 更多