我正在编写一个RESTful应用程序接口,我正在考虑用户创建密钥的过程。我有以下几种可能性:
/new/<keyname>
的GET请求-尽管它非常简单,但我想我不会使用它,因为我听说GET用于检索和/或列出对/<keyname>
的请求-这对我来说似乎很简单,但不会在请求体中传递任何数据。我可以这样做吗?这是不是很奇怪?/keys
的POST请求传入了请求体"keyname=SomeKey"
-这是正确的方式吗?我研究了一下this API from joyent,在他们所有的PUT和POST请求中,他们都会在请求体中传递一些数据。这是意料之中的吗?在PUT和POST请求中不需要请求体真的是错误的吗?
发布于 2011-09-07 05:57:37
我在Http-WG上问了这个问题。这是我得到的最准确的答案,http://lists.w3.org/Archives/Public/ietf-http-wg/2010JulSep/0276.html
总之,POST不需要正文。我希望同样的理由也可以应用于PUT。
发布于 2019-07-09 10:59:23
这不是必需的。您可以发送不带body的POST/PUT请求,而使用查询字符串参数。但是要注意,如果参数包含无效的HTTP字符,则必须对其进行编码。
例如,如果你需要发布'hello world‘到and end point,你必须让它看起来像这样:http://api.com?param=hello%20world
发布于 2011-09-07 01:50:25
也许最好的方法是你的第三个选择:使用keyname=SomeKey
发布到/keys
。
原因如下:您可能希望向您的API添加另一个函数,例如create_new_user
。因此,很难区分试图发布名为create_new_user
的密钥的用户和试图使用create_new_user
函数的用户之间的区别。
您说得对,您不应该使用GET作为GET操作"SHOULD NOT have the significance of taking an action other than retrieval." (RFC 2616)来执行此操作。
https://stackoverflow.com/questions/7323958
复制相似问题