哪个浏览器完全支持REST?意味着Get,Post,PUT和DELETE方法?
我理解用于理解PUT和DELETE的rails方式是"_method"隐藏变量之类的
<form id="form_id" action="" method="PUT" >
-- form content --
</form>
Run Code Online (Sandbox Code Playgroud)
方法= "PUT"?
还是我错了?
所以我在这里磕磕绊绊,因为我已经发现PHP不会从PUT请求中读取HTTP请求体.当Content-Type请求中的标题设置为时application/json,似乎没有任何方法可以获取正文.
我正在使用Laravel,它在Symfony2的HttpFoundation lib之上构建了他们的请求层.
我用jQuery对此进行了一些调试,这些是一些示例请求:
做这样的请求,我可以通过找到内容 Input::getContent()
$.ajax({
url: 'http://api.host/profiles/12?access_token=abcdef',
type: 'PUT',
data: {"profiles":[{"name":"yolanda ellis","email":"yolanda.ellis12@example.com"}]}
});
Run Code Online (Sandbox Code Playgroud)
file_get_contents('php://input')虽然我无法获得内容.默认情况下,jQuery将数据发送为application/x-www-form-urlencoded.
当我在请求中传递另一个Content-Type时,它变得更加令人费解.就像Ember-Data一样:
$.ajax({
url: 'http://api.host/profiles/12?access_token=abcdef',
type: 'PUT',
data: {"profiles":[{"name":"yolanda ellis","email":"yolanda.ellis12@example.com"}]},
contentType: 'application/json'
});
Run Code Online (Sandbox Code Playgroud)
当这样做时,数据似乎无处可寻.这意味着我的Ember.js应用程序无法正常使用我的API.
这到底是怎么回事?
编辑
以下是Chrome DevTools中的完整请求示例:http://pastebin.com/ZEjDAsmJ
我发现这是一个特定的Laravel问题.
编辑2:找到答案
似乎我的项目中存在一个依赖项,它从标头与请求一起发送php://input时读取Content-Type: application/json.这会清除流 - 正如@ Mark_1提供的链接所指出的那样 - 当它到达Laravel时它会变空.
是否可以使用自定义HTTP VERB(如MERGE)和jQuery.ajax()?我正在与OData API进行交互,该API在向记录发布更新时需要MERGE动词.
我遇到的问题是,当我在ajax()请求中使用"MERGE"时,它不会将数据发送到服务器.它只发送一个没有数据的MERGE请求,因此OData服务拒绝它.
当我将请求更改为PUT时,OData服务发回500错误.
我的选择基本上是弄清楚如何获得"MERGE"调用以发送数据和请求,执行DELETE后跟POST(删除并在每次更新时重新创建记录),或者弄清楚如何修改OData服务接受PUT进行更新.
如果您对如何使jQuery.ajax()发送带有MERGE请求的数据有任何想法,请告诉我.
谢谢,
戴夫
我对RESTful PHP上的教程/示例感到困惑.他们中的大多数都在使用框架(例如Slim)并最终成为API,这使我更加困惑.在完全理解如何创建简单的RESTful PHP之前,我想首先避免所有框架和API材料.
我明白那个,
REST,它的核心,就是为工作使用正确的HTTP动词.GET,POST,PUT,DELETE都有意义,如果某些内容被描述为RESTful,那么它真正意味着所涉及的网站/应用程序都遵循这些含义.
而从PHP服务器端,我明白这是怎么我能察觉的REST请求类型,
$_SERVER['REQUEST_METHOD']
Run Code Online (Sandbox Code Playgroud)
但我的主要问题是如何通过URL将这些REST类型(GET,POST,PUT,DELETE)发送到服务器?
例如,从本教程中,
当您希望创建或更新URL标识的资源时,将使用PUT请求.例如,
然后,
DELETE应该与PUT相反; 当您要删除请求的URL标识的资源时,应该使用它.
http://restfulphp.com/clients/robin并且http://restfulphp.com/clients/anne是相同的干净URL模式.我怎么知道前者是用于PUT而后者是用于DELETE?或者,在那里我应该在表格/ HTML设置来区分它们?
当curl进来时它会变得复杂 - 它与REST网站有什么关系?
从上面的教程,
Once you have cURL installed, type:
curl -v google.com
Run Code Online (Sandbox Code Playgroud)
我应该在哪里打字?
curl如何帮助我删除或PUT?如何$_SERVER['REQUEST_METHOD']从curl中检测REST类型?
curl -v -X DELETE /clients/anne
Run Code Online (Sandbox Code Playgroud)
和
curl -v -X PUT -d "some text"
Run Code Online (Sandbox Code Playgroud)
我问的问题可能听起来很愚蠢,但如果有人能帮助我理解这些问题会很棒.
编辑:
Argg PHP cURL- 另一件让我更加困惑的事情!如果我要通过XMLHttpRequest对象发送REST请求类型,为什么还需要它?它似乎是为了与其他API提供程序进行通信,我希望在此阶段避免使用它们.
如果我可以PHP cURL …
是否可以通过覆盖该类HttpMethodAttribute并指定我们自己的方法来创建我们自己的 HTTP 方法supportedMethods?
事实上,根据情况,我们需要将View作为完整视图与_Layout一起返回,有时我们只需要返回该视图的PartialView。所以我的想法是放置一个自定义属性,例如,[HttpPartial]客户端会根据请求中使用的方法来判断它是否需要完整视图(GET 方法)或部分视图(PARTIAL 方法)。
在评估表单已提交时,我检查该方法是否发布,而不是获取.我被告知这是一个很好的方式,通过单击提交按钮知道表单已提交,并且它不仅仅是通过在URL中传递数据的脚本提交的.
怎么样的"放"方法.它看起来非常类似于"帖子".是否可以或多或少地使用而不是"邮寄"而不会损失"邮寄"所带来的好处?
我正在使用Play 2.0构建应用程序.
只要Play表单生成器不会生成本机http"删除"请求方法,它应该替换为"Get"或"Post".
@form(routes.Application.delete(id), 'class -> "topRight") {
<input type="submit" value="Delete this computer" class="btn danger">
}
Run Code Online (Sandbox Code Playgroud)
根据Play示例,"Post"应该用于"删除"目的.虽然使用"Get"非常舒服,因为表单可以用简单的链接替换(特别是在单个页面上有这些链接的列表)
那么有什么理由使用POST来模拟DELETE吗?
在Backbone中,有一个"DELETE".
this.model.url = '/js/products/123/destroy';
this.model.destroy();
Run Code Online (Sandbox Code Playgroud)
我怎样才能在JQuery中模拟这个?
在我的node.js应用程序中,我专门寻找app.delete.
. Request URL:http://mydomain.com/js/products/2/destroy
. Request Method:DELETE
. Status Code:?200 OK
. Request Headersview source
. Accept:application/json, text/javascript, */*; q=0.01
. Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
. Accept-Encoding:gzip,deflate,sdch
. Accept-Language:en-US,en;q=0.8
. Connection:keep-alive
. Cookie:connect.sid=s%3ALmcKt2dNgSzfQCyCAcVlPeg6.bFXUPlpuZctDpfN2Gu5mtslVC9nA3FOi908Qe8aExYY
. Host:mydomain.com
. Origin:http://mydomain.com
. Referer:http://mydomain.com/1
. User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.65 Safari/537.31 AlexaToolbar/alxg-3.1
. X-Requested-With:XMLHttpRequest
. Response Headersview source
. Connection:keep-alive
. Content-Length:27
. Content-Type:text/html; charset=utf-8
. Date:Sun, 14 Apr 2013 02:57:17 GMT
. X-Powered-By:Express
Run Code Online (Sandbox Code Playgroud) 我们使用Grails构建RESTful服务,我们将使用HTML表单从浏览器客户端调用,问题是表单只支持GET和POST,所以我们不确定如何处理PUT和DELETE.
我的应用中的表单包含以下内容:
<form action="/faculty/update/agxzdGFuZHJld3NqaHNyDQsSB0ZhY3VsdHkYBww" method="PUT" accept-charset="utf-8">
Run Code Online (Sandbox Code Playgroud)
但是,在提交时,请求被视为GET并由处理def get()而不是def put().任何帮助将不胜感激!
编辑:
感谢您的回复.如果我不能使用method="PUT"什么是最好的方法来指导put()我的处理程序类中的方法?我应该在main.py中添加另一个处理程序吗?
我正在尝试实现基本用户注册RESTful api.我有一个html表单registerform.html,deregisterform.html,users.php,register.php和deregister.php,它们都粘贴在下面.
当我在浏览器中访问registerform.html时,我可以填写详细信息,users.php脚本会收到一个POST请求,并回显一个json响应,显示刚刚添加的用户的id号.我的问题是,当我使用deregister表单时,users.php脚本应该重新发送DELETE请求,但实际上是获取GET请求.我一直在寻找这个问题的答案,但我找不到解决方案.
registerform.html
<form action="users.php" method="POST">
Username: <input type="text" name="uname" /><br />
FirstName: <input type="text" name="fname" /><br />
Last Name: <input type="text" name="lname" /><br />
Date of Birth: <input type="date" name="dob" /><br />
Telephone: <input type="mob" name="tel" /><br />
Email: <input type="email" name="email1" /><br />
Confirm Email: <input type="email" name="email2" /><br />
Password: <input type="password" name="pass1" /><br />
Confirm Password: <input type="password" name ="pass2" /><br />
<input type="submit" value="Register" name="sub" />
<br/><A HREF="login.php">Already Registered? Login Here</A><br/>
</form> Run Code Online (Sandbox Code Playgroud)
deregisterform.html
rest ×5
php ×4
forms ×2
html ×2
http ×2
jquery ×2
post ×2
ajax ×1
asp.net-core ×1
backbone.js ×1
curl ×1
grails ×1
http-delete ×1
http-method ×1
http-verbs ×1
javascript ×1
laravel ×1
laravel-4 ×1
odata ×1
scala ×1
security ×1
symfony ×1