POST 是服务器生成但不存储的资源的正确 HTTP 动词吗?

Is POST the correct HTTP verb for resources that are produced by but not stored by the server?

可能是 的部分副本,尽管那是指文件下载。

在 CRUD 操作方面,POST 是推荐的用于创建资源的 HTTP 动词。这是否仍然适用于创建资源,即使这些资源没有保存在服务器上? (即存储在数据库或类似数据库中)例如,根据客户端发送的代码生成一些代码或转换文件并将其返回给客户端。

有了这些类型的功能,服务器确实“创建”了一些东西,尽管只是将它传递、返回或流式传输给客户端,而不是在传统的 CRUD 意义上存储它。我一直使用 POST 来实现此类功能,但现在我开始怀疑自己并认为这些可能一直都是 GET 端点。

似乎是一个奇怪的灰色区域,其中 HTTP 动词 GET 或 POST 都不完全匹配。

这里没有灰色地带。

如果服务器状态发生变化,请使用 POST 等不安全的方法。如果没有,您可以使用像 GET 这样的安全方法,只要您不超出 GET 的记录限制(无请求主体)。

如果您正在寻找一种确实接受请求正文的安全方法,您可能需要查看 https://datatracker.ietf.org/doc/draft-ietf-httpbis-safe-method-w-body/

Is POST the correct HTTP verb for resources that are produced by but not stored by the server?

是 - 或者,这是最不正确的选择。

POST serves many useful purposes in HTTP, including the general purpose of “this action isn’t worth standardizing.” -- Fielding, 2009

2020 年,HTTP-WG adopted a proposal to define a method token for "GET with a body", which would give as an alternative to POST when we want to indicate to general purpose components that the request has safe semantics, so there should eventually be some registered 方法更合适。