标签: put

流水线PUT和/或POST请求的缺点是什么?

我听说PUT和POST请求不应该是流水线的.为什么?

post http put request httprequest

9
推荐指数
1
解决办法
1291
查看次数

形成边界并写入php://输入到php中的文件

所以我希望用户能够上传大文件而不必担心发布最大大小值.另一种方法是使用PUT并将文件作为原始数据发送.使用jquery时我可以这样做:

var data = new FormData();
  jQuery.each($('#file_upload')[0].files, function(i, file) {
  data.append('file-'+i, file);
});
$.ajax({
  url: 'upload.php?filename=test.pdf',
  data: data,
  cache: false,
  contentType: false,
  processData: false,
  type: 'PUT',
});
Run Code Online (Sandbox Code Playgroud)

在PHP中我可以这样做:

$f = fopen($_GET['filename'], "w");
$s = fopen("php://input", "r");

while($kb = fread($s, 1024))
{ 
  fwrite($f, $kb, 1024); 
}
fclose($f);
fclose($s);
Header("HTTP/1.1 201 Created");
Run Code Online (Sandbox Code Playgroud)

我没做:

$client_data = file_get_contents("php://input");
Run Code Online (Sandbox Code Playgroud)

因为将整个文件放入变量肯定会在上传大文件时填满所有内存.

我无法弄清楚的是如何在没有表格边界的情况下编写文件数据.现在它在文件的顶部写这样的东西:

------WebKitFormBoundaryVz0ZGHLGxBOCUVQG
Content-Disposition: form-data; name="file-0"; filename="somename.pdf"
Content-Type: application/pdf
Run Code Online (Sandbox Code Playgroud)

在底部是这样的:

------WebKitFormBoundaryVz0ZGHLGxBOCUVQG--    
Run Code Online (Sandbox Code Playgroud)

所以我需要解析数据.但为此,我需要将整个数据流读入内存,并且使用大型视频文件我不想这样做.我确实读过一些关于创建一个php://临时流的内容.但是没有运气.如何在没有边界标题的情况下将内容写入文件?没有先将所有数据泵入变量?

php put stream boundary

9
推荐指数
1
解决办法
941
查看次数

Restangular - 获取对象w/id,编辑对象,更新对象

我似乎无法弄明白这一点 -

我想做的事情如下:

content = Restangular.one('contents', 2).get()
content.name = "Chunky Bacon"
content.put()
Run Code Online (Sandbox Code Playgroud)

但这不起作用 - content没有put功能,有趣的是,它没有一个name(是因为它是一个"承诺"?)

现在,Restangular文档确实描述了更新对象,但是您将该对象作为集合的一部分:

content_id2 = Restangular.all("contents").getList()[2]
content_id2.name = "Chunky Bacon"
content_id2.put()
Run Code Online (Sandbox Code Playgroud)

这很有效.但!我不仅获取了整个列表,我还无法弄清楚如何通过它的ID轻松获取我的内容; 就像是Restangular.all("contents").getList().find(2)

customPUT(..) 似乎是下一个最好的选择:

Restangular.one("contents", 2).customPUT("", {"content" : {"name" : "Chunky Bacon"} } )
Run Code Online (Sandbox Code Playgroud)

只有当Rails服务器收到它时,params["content"] == {id: 2}- 似乎客户端的东西正在踩那个值.(再次注意,没有name字段).现在,我可以通过以下方式解决这个问题:

Restangular.one("contents", 2).customPUT("", {"content_data" : {"name" : "Chunky Bacon"} )
Run Code Online (Sandbox Code Playgroud)

但看起来我真的错过了你应该如何做到这一点.

put angularjs ruby-on-rails-4 restangular

9
推荐指数
1
解决办法
8607
查看次数

如何在rails中设置form_tag中的方法?

如何在form中设置方法以将form_tag放入rails?中,我有这样的form_tag:

<%= form_tag(url, :method => :put, :multipart => true, :class =>"form-horizontal") do %>
 ......
<% end %>
Run Code Online (Sandbox Code Playgroud)

但如果我检查元素,形式没有方法"放"但仍然"发布"?

<form accept-charset="UTF-8" action="/admin/stores/1/information/social_update" class="form-horizontal" enctype="multipart/form-data" method="post">
 ....
</form>
Run Code Online (Sandbox Code Playgroud)

为什么???

forms ruby-on-rails put

9
推荐指数
1
解决办法
1万
查看次数

REST - PUT请求如何处理自动递增的资源标识符

根据HTTP 1.1.规格:

如果Request-URI未指向现有资源,并且该URI能够被请求用户代理定义为新资源,则源服务器可以使用该URI创建资源.

换句话说,PUT可用于创建和更新.更具体地说,如果我做一个PUT请求,例如

PUT /users/1
Run Code Online (Sandbox Code Playgroud)

并且该用户不存在,我希望此请求的结果是创建具有此ID的用户.但是,如果您的后端使用自动增量键,这将如何工作?如果它不可行(例如自动增量为6并且我请求10)并且如果可能(例如请求7)创建,那么它是否会简单地忽略它?

从我上面提到的片段看来它似乎给你这种灵活性,只是寻找一些澄清.

rest put auto-increment

8
推荐指数
1
解决办法
2412
查看次数

POST/PUT Json RESTful请求Grails的问题

嗨,我有一个grails restful代码.我完善了Json get和delete请求.我的问题是:我想用json做一个Put或post请求,但是如果我用一个程序来做那个它有一个错误,我不能这样做!这是我的代码:一类:

package catalogo.json
class Catalogo {
   String nombre
   String descripcion
   String url
   Set <Parametros>parametros =[]
   static hasMany = [parametros:Parametros]
   int numeroParametros = parametros.size()
}
Run Code Online (Sandbox Code Playgroud)

和其他班级:

package catalogo.json

class Parametros {
   String tipoParametro
   String json
   static constraints = {
     tipoParametro(nullable:true)
     json(nullable:true)
   }
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何把我的json放在请求中.当我说出来时,这是错误的.

示例:
I PUT POST请求.身体application/json(或text/json同样的错误)Charset-utf-8

{"descripcion": "bla", "nombre" : "lalala", "numeroParametros":3, "parametros":[{                 
"tipoParametro":"string", "json":"bla"}],"url":"http://www.google.com"}
Run Code Online (Sandbox Code Playgroud)

这里的错误:

Could not create new Catalogo due to errors:
 grails.validation.ValidationErrors: 3 errors
Field error in object 'catalogo.json.Catalogo' on …
Run Code Online (Sandbox Code Playgroud)

grails post json put request

8
推荐指数
1
解决办法
1万
查看次数

PUT的跨域jQuery $ .ajax请求失败(Access-Control-Allow-Methods不允许使用Method PUT.)

我正在通过jQuery进行跨域请求$.ajax来访问RESTful PHP API.
为此,我在PHP中设置了以下标头:

header("HTTP/1.1 $code $status");
header('Content-type: application/json');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT');
Run Code Online (Sandbox Code Playgroud)

使用类型GETPOST工作没有问题.但是,当我执行PUTajax调用时,Firefox完全失败并显示OPTIONS api.php在Firebug的网络选项卡中.
在Chrome中,首先发生同样的事情(OPTION请求失败并显示消息Method PUT is not allowed by Access-Control-Allow-Methods.),但Chrome会跟进实际可用的实际PUT请求.

这种行为的原因是什么?

ajax jquery put cross-domain

8
推荐指数
1
解决办法
8452
查看次数

PUT POST是幂等的(REST)

我不太明白HTTP谓词是如何被定义为幂等的.我读过的只是GET和PUT是幂等的.POST不是幂等的.但是您可以使用POST创建一个REST API,它不会更改任何内容(例如在数据库中),或者为PUT创建一个每次调用时都会更改的REST API.

当然,这可能是错误的做事方式,但如果可以做到,为什么PUT在实施时被标记为幂等(或POST为非)?我不是在挑战这个想法,我可能会错过一些东西而且我要求清除我的理解.

编辑:

我想提出一个问题的方法是:如果我使用PUT进行非幂等调用而POST这样做会有什么问题?

rest post http put idempotent

8
推荐指数
1
解决办法
4755
查看次数

AWS API网关:错误429请求太多

我正在尝试使用AWS API GatewayLambda创建后端系统. 在过去的几天里,我为新的API资源创建了一个PUT方法,其中API Key是一个简单的第一个安全步骤.PUT方法在AWS上调用Lambda函数. 然后我将这个API部署到"prod"阶段进行一些测试.

在最初几天,一切都按预期运行良好:我用postman创建了一个API调用,我收到了我期待的所有数据.但前两天,我开始收到始终429 "太多的请求"的响应.我也创建了一个新阶段,但没有任何改变:同样版本或更新版本的新阶段也总是会出现同样的错误.
该API不能达到任何限制,因为它们被称为每4或5次,而不是每个第二(上CloudWatch的选中).没有循环,它只是一次调用.我认为lambda方面没有错误,因为如果我在AWS API网关控制台中测试API,我就不会收到任何错误(并且lambda过去运行良好,没有来自该版本的新更改).该错误仅显示当我使用外部客户端测试我的api时(在我的情况下它是Postman).

任何人都可以帮助解决这个问题吗?

更新:我刚刚在同一资源上创建了一个POST方法,具有相同的参数和相同的lambda.这是工作.我想知道问题是否与PUT方法有关,或者如果在2天内我的POST方法也会受到同样问题的影响.

api put amazon-web-services aws-lambda

8
推荐指数
1
解决办法
6641
查看次数

在正文或 URI 中指定 REST API PUT 请求的 DTO ID?

对于 REST 和 ASP.NET Web API,即使 DTO 负载(例如 JSON)本身指定了标识符,是否也需要将标识符添加到 PUT 操作方法的路由中?

例如:

public void Put(int id, [FromBody]SomeDto someDto) // someDto has an 'Id' property
Run Code Online (Sandbox Code Playgroud)

ASP.NET Web API 模板包含该id参数,我见过很多这样的例子。

相比之下,是否可以省略该id参数并仍然遵守 REST 准则?例如:

public void Put([FromBody]SomeDto someDto)
Run Code Online (Sandbox Code Playgroud)

rest put http-verbs asp.net-web-api

8
推荐指数
1
解决办法
2179
查看次数