其他动词对我来说都很有意义,但我没有太多关于“post”作为动词的上下文。是像在邮局里发帖(这有点道理,虽然看起来有点牵强)还是像在布告栏上发帖(对我来说意义不大)?有谁知道谁决定“POST”以及为什么选择它?
3 回答
嗯,我猜,“在公告板上发帖”很接近答案。最后,这正是该方法设计的功能之一。POST
总是意味着将东西发布到某种“工厂”以由它处理 - 否则你可以只使用PUT
. 让我们看一下RFC2616,第 9.5 节:
POST 方法用于请求源服务器接受请求中包含的实体,作为 Request-Line 中 Request-URI 标识的资源的新下级。POST 旨在允许统一的方法涵盖以下功能:
- Annotation of existing resources; - Posting a message to a bulletin board, newsgroup, mailing list, or similar group of articles; - Providing a block of data, such as the result of submitting a form, to a data-handling process; - Extending a database through an append operation.
当然,这不是它为什么被称为的确切定义POST
,但我认为这可能会提供一些关于它背后的想法的线索。
也许我们也可以看看“post”这个词的一些含义(http://www.thefreedictionary.com/Post,第三个定义)——据此,post 作为动词可以表示
- 邮寄(信件或包裹)
- 通知最新消息
- 将(项目)转移到簿记中的分类帐
- 在(分类帐)中进行必要的分录
这正是POST
(隐喻地)所做的。如果您想发送电子邮件,请让您的电子邮件提供商处理它,然后通知您有关状态。这也是PUT
and之间的区别POST
:如果客户端负责处理资源,则您使用PUT
(因为您知道该放什么以及放哪里)。
因此,理论上,如果您知道要向其发送电子邮件的人的 IP 地址,您就不需要您的提供商为您找到这些东西。但是现在,您知道该放什么,但不知道放哪里。因此,在这种情况下,您使用POST
. 你“通知服务器最新消息”,服务器决定把它放在哪里。因此,您可以将其视为“将项目转移”到已经存在的资源(例如论坛中的线程或其他东西)-您只是想附加一些东西。
我希望这有任何意义......
POST 方法用于请求源服务器接受请求中包含的实体,作为 Request-Line 中 Request-URI 标识的资源的新下级。POST 旨在允许统一的方法涵盖以下功能:
- 现有资源的注释;
- 将消息发布到公告板、新闻组、邮件列表或类似的文章组;
- 向数据处理过程提供数据块,例如提交表单的结果;
- 通过追加操作扩展数据库。
REST 要求开发人员以与协议定义一致的方式显式使用 HTTP 方法。这种基本的 REST 设计原则在创建、读取、更新和删除 (CRUD) 操作与 HTTP 方法之间建立了一对一的映射。根据这个映射:
- 要在服务器上创建资源,请使用 POST。
- 要检索资源,请使用 GET。
- 要更改资源的状态或更新它,请使用 PUT。
- 要移除或删除资源,请使用 DELETE。
当我们发布时,我们实际上是在发送新数据(创建资源),但不会获取它或调用更新或要求粉碎我们的旧文档。
我不认为像“寄信”这样的帖子太牵强了。毕竟,POST 请求是包含数据的消息。至于 who,动词来自 HTTP,因此起源于 Tim Berners-Lee 在 1995 年编写的 Html 规范。