如果出现问题,我们正在使用HTTP状态代码作为响应代码开发标准REST服务.(例如,无效的用户输入会向客户端返回"400 Bad Request")
但是,我们认为更详细的错误消息对客户端有用.(例如,无效输入错误是由于X是无法识别的参数名称)
我们希望尽可能忠实于HTTP规范,因此在研究了RFC2616中的规范之后,我们考虑将详细的错误消息放在HTTP标头中,特别是在HTTP标头警告字段中.它在RFC上说:
Warning general-header字段用于携带有关消息的状态或转换的其他信息,这些信息可能未反映在消息中.此信息通常用于警告可能缺少来自缓存操作或应用于消息实体主体的转换的语义透明性.
对于其他警告(例如REST错误消息)使用此标头似乎没有任何限制,即使是根据此标头的初始意图与缓存警告无关的警告也是如此.我们喜欢语义,我们计划使用299警告代码,这似乎非常适合该法案:
299其他持久警告警告文本可能包含要呈现给人类用户或记录的任意信息.接收此警告的系统不得采取任何自动操作.
因此,鉴于此问题顶部显示的无效输入错误情况,我们正在考虑将REST错误消息添加如下示例:
HTTP/1.1 400 Bad Request
Warning: 299 ServiceName "Invalid input error: X is unrecognized parameter name."
Run Code Online (Sandbox Code Playgroud)
这是一个好主意/实践吗?我们还发现一些服务在X-Warning标题中详述了此消息,但这似乎不是标准的.我们想知道stackoverflow REST人群的蜂巢智慧会对此有何看法.在REST响应中传递详细的错误消息传递是否还有更好/标准化的做法?
我有一个C++应用程序,它由非托管C++,托管C++和c#组成.在非托管部分,我正在尝试使用std :: mutex创建一个线程安全集合.
但是,当我使用互斥锁时,我收到以下错误;
错误C1189:使用/ clr或/ clr:pure进行编译时不支持#error:<mutex>.
知道为什么我不能使用互斥锁吗?有人可以推荐替换它,以便我可以创建一个线程安全的非托管集合吗?
在与另一家同时使用App Engine的公司的同事讨论后,他告诉我,他设法使用以下步骤将他的应用程序预热时间从约15秒减少到约5秒:
- 配置Eclipse以将编译期间生成的类捆绑到单个JAR文件中.
- 配置Eclipse以在App Engine部署期间上载此单个JAR文件,而不是上载数百(或数千)个单独的Java类.
他认为,在实例预热期间,由于实例只需要加载一个捆绑的JAR文件而不是数千个单独的类,因此预热会明显加快.对此有何想法或意见?
我肯定想亲自尝试一下,但我没有足够的Eclipse-mojo知道如何配置这些步骤.有谁知道如何配置Eclipse或Eclipse的Google插件来执行上述步骤?(当然,已部署的应用程序在App Engine中成功运行)
谢谢,
我们的应用程序的一部分需要加载大量数据(> 2000个实体)并在此集合上执行计算.每个实体的大小约为5 KB.
在我们最初的,天真的实现中,瓶颈似乎是加载所有实体所需的时间(2000个实体约为40秒),而执行计算所需的时间本身非常小(<1秒).
我们尝试了几种策略来加速实体检索:
- 将检索请求拆分为多个并行实例,然后合并结果:2000个实体约20秒.
- 将实体存储在驻留后端的内存缓存中:2000个实体约5秒.
计算需要动态计算,因此在写入时进行预计算并存储结果在我们的情况下不起作用.
我们希望能够在不到一秒的时间内检索出~2000个实体.这是否在GAE/J的能力范围内?我们可以为这种检索实现的任何其他策略?
更新:提供有关我们的用例和并行化结果的其他信息:
- 我们在数据存储区中有超过200,000个相同类型的实体,并且操作仅检索.
- 我们尝试了10个并行工作器实例,我们获得的典型结果可以在这个pastebin中看到.似乎将实体传回主实例时所需的序列化和反序列化会妨碍性能.
更新2:举一个我们想要做的事情的例子:
- 假设我们有一个StockDerivative实体需要进行分析才能知道它是否是一项好的投资.
- 所执行的分析需要基于外部(例如,用户的偏好,市场条件)和内部(即来自实体的属性)的许多因素的复杂计算,并且将输出单个"投资得分"值.
- 用户可以根据其投资分数请求衍生品进行分类,并要求获得N个最高得分的衍生品.
java performance google-app-engine google-bigquery google-cloud-datastore
App Engine中的推送队列通常是FIFO队列,但是从链接的文档中可以看出,在队列有大量积压任务的情况下,调度程序可能会将新任务跳转到队列的头部以尝试减少潜伏.
这种跳跃式队列对于负载很重的应用程序是有意义的,但这意味着FIFO行为不能保证一致.
现在问题是,拉队列怎么样?上述行为在推送队列中是有意义的,但在拉队列中则较少,因为从拉取队列租用任务的责任以及扩大工作人员数量的责任落到了应用程序本身.如果拉队列中不存在跳跃队列行为,是否意味着拉队列始终表现出FIFO行为?
我在重定向通配符子域和处理内部URL缩短时遇到问题.
假设我的应用程序中有一个内部URL缩短器
example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)
那会翻译
example.com/book/12345678-the-book-name
Run Code Online (Sandbox Code Playgroud)
引用的脚本/b/(我使用可以处理URL规则的PHP框架)将短ID ABCDE转换为书籍真实ID 12345678(和标题"书名"),然后将书籍的永久URL重定向example.com/book/12345678-the-book-name
所以,每当我在公告板,微博客网站或海报或名片等物理媒体上传播有关图书的链接时,我都会使用短链接(example.com/b/ABCDE而不是永久链接example.com/book/12345678-the-book-name).
接下来,我需要将所有通配符子域重定向到主域(www.example.com),同时保持请求URI,例如
http://random.example.com/book/11111111-some-book -> http://www.example.com/book/11111111-some-book
http://123456.example.com/book/22222222-another-book -> http://www.example.com/book/22222222-another-book
http://abcdefg.example.com/book/33333333-another-book-again -> http://www.example.com/book/33333333-another-book-again
Run Code Online (Sandbox Code Playgroud)
在我使用的所有规则之后添加以下规则
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.example.com [NC]
RewriteRule ^/(.*)$ http://www.example.com/$1 [R=301]
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
因此,具有example.com域的URL并且没有如下所示的前缀
http://example.com/book/11111111-some-book
Run Code Online (Sandbox Code Playgroud)
将转化为
http://www.example.com/book/11111111-some-book
Run Code Online (Sandbox Code Playgroud)
另一个结果是,如果内部URL缩短器使用没有前缀的普通域,则需要两次重定向才能解析.例如,
http://example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)
将首先被重定向到
http://www.example.com/b/ABCDE
Run Code Online (Sandbox Code Playgroud)
然后被重定向到
http://www.example.com/book/12345678-the-book-name
Run Code Online (Sandbox Code Playgroud)
实际上,我不介意两次重定向.但我的SEO顾问说,两次重定向对我网站的搜索引擎优化不利.(我还是不知道为什么)
所以我尝试将最后一条规则改为下面
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteCond %{REQUEST_URI} ^/b/(.*)$
RewriteRule . index.php [L]
RewriteCond …Run Code Online (Sandbox Code Playgroud) java ×2
apache ×1
c++ ×1
c++-cli ×1
deployment ×1
eclipse ×1
http-headers ×1
jar ×1
mod-rewrite ×1
mutex ×1
performance ×1
redirect ×1
response ×1
rest ×1
seo ×1