我有一组资源,其表示被懒惰地创建.构建这些表示的计算可能需要几毫秒到几个小时,具体取决于服务器负载,特定资源和月亮的相位.
收到的第一个GET请求开始在服务器上进行计算.如果计算在几秒钟内完成,则返回计算的表示.否则,返回202"已接受"状态代码,客户端必须轮询资源,直到最终表示可用.
出现这种情况的原因如下:如果结果在几秒钟内可用,则需要尽快检索; 否则,当它变得可用时并不重要.
由于内存有限和请求量很大,NIO和长轮询都不是一个选项(即我无法保持足够的连接打开,甚至我甚至无法将所有请求都放在内存中;一次"几秒钟"已经过去了,我坚持多余的要求).同样,客户端限制使得它们无法处理完成回调.最后,请注意我对创建一个POST的"工厂"资源不感兴趣,因为额外的往返意味着我们的分段实时约束超出了预期(此外,它是额外的复杂性;此外,这是一种资源,受益于缓存).
我想在返回202"接受"状态代码以响应GET请求方面存在一些争议,因为我在实践中从未见过它,并且它最直观的用法是回应不安全的方法,但我从来没有发现任何特别令人沮丧的事情.而且,我不保持安全和幂等性吗?
那么,人们对这种方法有何看法?
编辑:我应该提到这是一个所谓的商业网络API - 不适用于浏览器.
我可以用[AcceptVerbs(HttpVerbs.Post)]/[AcceptVerbs(HttpVerbs.Get)]装饰一个动作
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(string title)
{
// Do Something...
}
Run Code Online (Sandbox Code Playgroud)
或者使用[HttpPost]/[HttpGet]属性
[HttpPost]
public ActionResult Create(string title)
{
// Do Something...
}
Run Code Online (Sandbox Code Playgroud)
他们不一样吗?
更新
接受的答案对去年有好处,但今天我会使用其他人使用的包:https: //github.com/mikeal/request
原版的
我正试图抓住谷歌的徽标并使用node.js将其保存到我的服务器
这就是我现在所做的并且不起作用:
var options = {
host: 'google.com',
port: 80,
path: '/images/logos/ps_logo2.png'
};
var request = http.get(options);
request.on('response', function (res) {
res.on('data', function (chunk) {
fs.writeFile(dir+'image.png', chunk, function (err) {
if (err) throw err;
console.log('It\'s saved!');
});
});
});
Run Code Online (Sandbox Code Playgroud)
我怎样才能使这个工作?
我正在努力建立一个宁静的API,我正在努力如何将JSON数据序列化为HTTP query string.
需要在请求中传递许多强制和可选参数,例如(在下面表示为JSON对象):
{
"-columns" : [
"name",
"column"
],
"-where" : {
"-or" : {
"customer_id" : 1,
"services" : "schedule"
}
},
"-limit" : 5,
"return" : "table"
}
Run Code Online (Sandbox Code Playgroud)
我需要支持不同数量的不同客户端,所以我正在寻找一种标准化的方法将这个json对象转换为查询字符串.有一个,它看起来怎么样?
另一种方法是允许用户只是传递消息体中的json对象,但我读到我应该避免它(带请求体的HTTP GET).
有什么想法吗?
编辑以澄清:
列出一些不同的语言如何编码上面给定的json对象:
jQueryusing $.param:-columns [] = name&-columns [] = column&-where [-or] [customer_id] = 1&-where [-or] [services] = schedule&-limit = 5&return = columnPHPusing http_build_query:-columns [0] = name&-columns [1] = column&-where [-or] [customer_id] …我只是想知道是否有一种非常简单的方法(最好:$this->container->isGet()我可以调用一个简单的方法)来确定请求是a $_POST还是$_GET请求.
根据文件,
Request对象包含有关客户端请求的信息.可以通过几个公共属性访问此信息:
request:相当于$_POST;query:相当于$_GET($request->query->get('name'));
但是我将无法使用if($request->request)或if($request->query)检查,因为它们都是Request类中的现有属性.
所以我想知道Symfony提供类似的东西
$this->container->isGet();
// or isQuery() or isPost() or isRequest();
Run Code Online (Sandbox Code Playgroud)
上文提到的?
所以我们有[HttpPost],它是一个可选属性.据我所知,这会限制调用,因此只能通过HTTP POST请求进行调用.我的问题是为什么我要这样做?
在VB.net中发布http get的最佳方法是什么?我想得到一个请求的结果,如http://api.hostip.info/?ip=68.180.206.184
可能重复:
获取$ webclient.downloadstring以写入Powershell Powershell http 文本中的文本文件,
其中包含.cer for auth
我有一个SMS系统,使我能够从HTTP GET请求发送SMS:
http://smsserver/SNSManager/msgSend.jsp?uid&to=smartsms:*+001XXXXXX&msg="text of the message"&encoding=windows-1255
Run Code Online (Sandbox Code Playgroud)
我想在PowerShell中输入文本的详细信息,然后浏览此URL.我该怎么做?
基本上,我认为我不能,但很高兴被证明是错的.
我在PHP中动态生成HTML菜单,为每个当前用户添加一个项目,以便我得到类似的东西<a href="process_user.php?user=<user>>,但我喜欢POST而不是GET.
有没有办法将信息作为POST参数传递,而不是从可点击的HREF链接传递?
更新:对不起,我不允许使用JS - 我应该说,我的不好
更新到更新:看起来@Rob正在使用"您可以使用按钮而不是锚点,只需将按钮设置为看起来像链接.这样您就可以将隐藏字段中的值放在同一表单中通过POST发送"
我在JavaScript中有以下复杂对象,其中包含过滤器选项
var filter={caseIdentifiter:'GFT1',userID:'2'};
Run Code Online (Sandbox Code Playgroud)
我想传递给ASP.NET MVC4 WebApi控制器GET
[HttpGet]
public IEnumerable<JHS.Repository.ViewModels.CaseList> Get([FromBody]Repository.InputModels.CaseListFilter filter)
{
try
{
return Case.List(filter);
}
catch (Exception exc)
{
//Handle exception here...
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
使用jQuery ajax调用
var request = $.ajax({
url: http://mydomain.com/case,
type: 'GET',
data: JSON.stringify(filter),
contentType: 'application/json; charset=utf-8',
cache: false,
dataType: 'json'
});
Run Code Online (Sandbox Code Playgroud)
ASP.NET控制器方法中的"filter"对象为"null".如果我将其更改为POST,则正确传递过滤器对象.有没有办法将复杂的对象传递给GET?
我不想将参数分离到URL,因为会有一些参数会使它效率低下,很难有可选参数,这样即使添加了新参数,方法签名也保持不变.
http-get ×10
http-post ×4
asp.net-mvc ×2
http ×2
json ×2
php ×2
ajax ×1
attributes ×1
c# ×1
node.js ×1
powershell ×1
query-string ×1
request ×1
symfony ×1
vb.net ×1