根据HTTP/1.1规范:
该
POST方法用来请求原始服务器接受被附在请求由标识的资源的新下属实体Request-URI的Request-Line
换句话说,POST用于创建.
该
PUT方法请求将所包含的实体存储在提供的实体下Request-URI.如果Request-URI引用已经存在的资源,则封闭的实体应该被视为驻留在源服务器上的实体的修改版本.如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.
也就是说,PUT用于创建或更新.
那么,应该使用哪一个来创建资源?或者需要支持两者?
在HTTP GET请求中,参数作为查询字符串发送:
http://example.com/page?parameter=value&also=another
在HTTP POST请求中,参数不会与URI一起发送.
价值在哪里?在请求标题中?在请求机构?它是什么样子的?
应用程序发送电子邮件以验证用户帐户或重置密码.我相信以下是应该的方式,我要求参考和实现.
如果应用程序必须在电子邮件中发送链接以验证用户的地址,根据我的观点,链接和应用程序对链接的处理应具有以下特征:
http://host/path?nonce.根据安全和幂等方法的HTTP RFC,这应该是正确的.
问题是这个过程涉及一个额外的页面或用户操作(第3项),这被很多人认为是多余的(如果不是无用的).我在向同行和客户介绍这种方法时遇到了问题,因此我要求更广泛的技术小组提供相关信息.我跳过POST步骤的唯一论点是可能从浏览器预加载链接.
谢谢你,
Kariem
细节幸免
我保持主要部分简短,但为了减少关于我故意遗漏的细节的太多讨论,我将添加一些假设:
笔记
使用OpenID等,普通的Web应用程序可以免于实施标准的用户帐户管理(密码,电子邮件......),但仍有一些客户需要" 他们自己的用户 "
奇怪的是,我还没有找到令人满意的问题,也没有回答.到目前为止我发现了什么:
假设以下路由访问xml文件以使用给定的xpath(?key =)替换特定标记的文本:
@app.route('/resource', methods = ['POST'])
def update_text():
# CODE
Run Code Online (Sandbox Code Playgroud)
然后,我会像这样使用cURL:
curl -X POST http://ip:5000/resource?key=listOfUsers/user1 -d "John"
Run Code Online (Sandbox Code Playgroud)
xpath expreesion listOfUsers/user1应该访问标记<user1>以将其当前文本更改为"John".
我不知道如何实现这一点,因为我刚刚开始学习Flask和REST,我找不到任何关于这个具体案例的好例子.此外,我想使用lxml来操作xml文件,因为我已经知道了.
有人可以帮助并提供一个指导我的例子吗?
如果我在HTML中执行类似这样的操作,是否有一个受到良好支持的常见行为:
<form method="get" action="/somePage.html?param1=foo¶m2=foo">
<input name="param2"></input>
<input name="param3"></input>
</form>
Run Code Online (Sandbox Code Playgroud)
似乎这种事情本质上是荒谬的,但我已经看到它在这里和那里使用,我想知道地球上预期的行为应该是什么.浏览器是否足够聪明,可以在操作中使用"¶m2 = whatever¶m3 = whatever",还是仅仅提出第二个问号?或者是什么?有没有这种情况实际上是正确的做事方式?
混合GET和POST是不好的做法?(注意这是PHP)
例如
<form action="delete.php?l=en&r=homepage" method="post">
<!-- post fields here -->
</form>
Run Code Online (Sandbox Code Playgroud) 当我通过Web表单执行http POST请求时,URL中指定的参数与服务器端传递的参数之间是否存在任何差异(实际上或理论上)?
我可以使用url参数进行整个POST,并期望与表单输入相同的结果吗?
喜欢:
<form action="/?id=2" method="post">
<input type="text" name="name" value="John"/>
<input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
要么:
<form action="/?id=2&name=John" method="post">
<input type="submit" value="submit"/>
</form>
Run Code Online (Sandbox Code Playgroud)
谢谢.
我在Rails功能测试中发送POST请求,如下所示:
post :create, collection: { name: 'New Collection' }
Run Code Online (Sandbox Code Playgroud)
collection 按预期,以JSON编码的表单数据发送.
我无法弄清楚的是如何向URL添加查询.文档说我可以访问请求对象并在发送之前对其进行修改.所以我尝试了这个:
@request.GET[:api_key] = 'my key'
post :create, collection: { name: 'New Collection' }
Run Code Online (Sandbox Code Playgroud)
但是,:api_key永远不会出现在request.GET服务器上的哈希值中.(但是,当我通过另一个HTTP客户端发送它时,它会这样做.)
在使用POST方法时,是否允许通过URL(问号后)将参数传递到网页?我知道它有效(大多数时候,无论如何),因为我公司的webapp经常这样做,但我不知道它是否真的支持标准,或者我是否可以依赖这种行为.我正在考虑实现一个SOAP请求处理程序,该处理程序在问号后面使用一个参数来表示它是一个SOAP请求,而不是一个普通的HTTP请求.这样做的原因是webapp是一个IIS扩展,因此所有内容都通过相同的URL访问(例如:example.com/myisapi.dll?command),因此为了处理SOAP请求,我需要指定"命令"参数.SOAP会有一个通用命令,
基本上,我正在尝试通过让webapp处理HTTP请求将Apache Axis2/C库集成到我的webapp中,然后将传入的SOAP XML传递给Axis2,以便在它是SOAP请求时进行处理.直觉上,我看不出有什么理由不起作用,因为你发布的URL只是一个任意的URL,就所有各种组件而言......它是赋予特殊含义的服务器问号后面的部分.
感谢您提供的任何帮助/见解.
好了,我已经知道所有的原因在纸上,为什么我应该不是做一个REST调用来更新服务器上的东西的状态时使用HTTP GET.因此每次可能返回不同的数据.而且我知道以下"纸上"原因是错误的:
我相信还有更多理由.但是我需要一个具体的简单示例来证明"嗯,这违反了HTTP规范!".......或者至少我希望有一个.我还已经阅读了以下列表中的以下内容:当我在GET调用中向服务器写入内容时,它是否违反了RESTful?& HTTP POST与URL查询参数 - 好主意与否?
例如,有人可以证明以上内容以及为什么使用HTTP GET说错误/不良做法/不正确,请使用以下RESTful调用
"MyRESTService/GetCurrentRecords?UpdateRecordID=5&AddToTotalAmount=10"
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,但希望它有助于提供一个例子来回答我原来的问题.因此,上面将使用AddToTotalAmount = 10更新recordID = 5,然后返回更新的记录.我知道应该使用POST ,但是假设我确实使用了GET.
如何确切地回答我的问题是否会导致实际问题?除了上述项目符号列表中的所有违规行为外,如何使用HTTP GET执行上述操作会导致一些实际问题?太多次,我进入一个场景,我可以用"因为医生这么说"来证明事情,但我需要理由并更好地理解这一点.
谢谢!