我与我的同事讨论了在202 Accepted响应中使用Location头的一个很好的概念.
故事从这里开始分析PHP header()函数的行为.有趣的摘录:
第二个特例是"Location:"标题.它不仅这个头发送回浏览器,但是除非201或3xx状态代码已经被设置也返回重定向(302)状态代码到浏览器.
它们未在此默认行为中包含202状态代码.看起来他们并不期望202响应有一个位置,事实上:
header("HTTP/1.1 202");
header("Location: http://example.com");
Run Code Online (Sandbox Code Playgroud)
将客户端重定向到位置URL.当然,也可以改变与header()函数的第三个参数,但一下就吸引了我的注意力被这种行为:为什么他们了解,默认202预计不会举行Location头?
然后我查看RFC,寻找202状态的官方含义.有趣的摘录:
返回此响应的实体应该包括请求的当前状态的指示,以及指向状态监视器的指针或用户可以期望满足请求的某些估计.
它没有明确地引用位置标头,就像之前(在相同的RFC文档中)201响应一样.这可能是PHP人员理解202响应不应该保持Location头的原因.指针会被解释为Location头还是PHP家伙做出了错误的假设?如果标准允许Location头有202响应:不应该像201响应定义更明确的官方文档?
最后,我回顾了最新的RFC版本,并发现编辑方面的一些变化:
与此响应发送表示应该描述请求的当前状态和(或嵌入)点状态监视器,一个当所述请求将被兑现的估计提供给用户.
同样,没有明确的假设指向 Location头.
简而言之,经过上述修订后:我是否使用带有202响应的Location标头符合RFC?
我正在使用Twilio PHP库但问题实际上与语言无关.我尝试做类似以下的事情:
$client = new Services_Twilio('MyAccountSID', 'My auth token');
$client->account->calls->create($from_number, $to_number, $url_or_AppSID, array(
'TwilioParam1' => 'value1',
'TwilioParam2' => 'value2',
'MyCustomParameter1' => 'CustomValue1',
'MyCustomParamete2' => 'CustomValue2'
));
Run Code Online (Sandbox Code Playgroud)
然后我希望在Twilio请求我的$ url_or_AppSID(我的TwiML应用程序)时收到这些参数,但它没有发生.我知道可能的方法是在查询字符串中添加这些参数并在$ url_or_AppSID参数中传递我的自定义URL,但这迫使我设置GET方法,我想通过POST请求传递我的自定义参数,而不是GET .也许我必须使用已经通过POST注册的请求URL的AppSID.
有没有办法使用POST方法传递自定义参数?
请参阅下面的代码.为了简单起见,我删除了很多代码,但剩下的代码仍然很长,对不起:(
IObserver = interface
['{1DD212F8-BD5E-47BF-9A3B-39EF7B9D99B5}']
procedure Update(Observable: IObservable);
end;
TObserver = class abstract (TSingletonImplementation, IObserver)
strict protected
//...
public
constructor Create;
destructor Destroy; virtual;
//IObserver
procedure Update(Observable: IObservable); virtual; abstract;
//...
end;
TShapeModification = class abstract (TObserver)
strict protected
//...
public
//Doesn't have a constructor
end;
TRangePointModification = class(TShapeModification)
strict private
//...
public
constructor Create(...);
//...
end;
constructor TRangePointModification.Create(...);
begin
inherited Create;
//...
end;
Run Code Online (Sandbox Code Playgroud)
然后在某个时候:
TClientClass = class
strict private
fList: TObjectList<TShapeModification>;
public
constructor Create();
destructor Destroy(); override;
procedure Add(ShapeModification: …Run Code Online (Sandbox Code Playgroud) 我在 MySQL 5.7 中有一个包含几十列的表。其中之一是生成列(存储的,而不是虚拟的),它使用一个大表达式来计算基于列 A、B 和 C 的值,所以我猜当插入新行时,MySQL 需要一点额外的时间来计算值或更新。
我的简单问题是:
当我更新一行上的其他列(F、G 等)时,是否也会触发计算?
您能给我发送一些参考资料(链接)来证明您的答案吗?
谢谢
编辑:
我已经阅读了@Barmar建议的MySQL官方文档:
存储:插入或更新行时计算并存储列值。
正如你所看到的,它说插入或更新,但我猜更新实际上意味着:如果相关列被更新,因为我认为MySQL足够聪明,如果这些列没有更新,则不会执行计算。这实际上是我想证实的假设。
我在MongoDB 3.4中显式创建了一个集合,以定义排序规则:
db.createCollection("mycoll", {collation: {
"locale": "en_US",
"strength": 1,
"caseLevel": false,
"numericOrdering": false,
"maxVariable": "punct",
"caseFirst": "off",
"alternate": "non-ignorable",
"normalization": false,
"backwards": false
}})
Run Code Online (Sandbox Code Playgroud)
现在,我想检查与该集合关联的排序规则,但是找不到用于显示该信息的命令。我测试了以下命令,但没有运气
db.mycoll.stats()
db.runCommand({collStats: "mycoll"})
Run Code Online (Sandbox Code Playgroud)
那么,要知道某个集合的归类的命令是什么?
编辑:分析上面我collator=在wiredTiger存储引擎下找到的命令的输出,所以我想知道它是否应该出现排序规则,但为什么它为空?
编辑:检查完所有输出后,db.runCommand({collStats: "mycoll"})我在_id index 内的indexDetails部分下找到了排序规则,但这是索引排序规则,而不是集合排序规则。考虑到如果使用autoIndexId = false创建了集合,那么将缺少indexDetails:在任何情况下如何知道某些集合的排序规则?
请查看以下代码摘录:
TCustomPoint = class
private
//many other fields
mPoint: TPoint;
public
//many other stuff: constructor, destructor, methods, etc.
function ToPoint(Axis: TAxis = nil);
end;
Run Code Online (Sandbox Code Playgroud)
在ToPoint实现中,我希望在传递Axis对象时执行某些操作,如果不是,则执行其他操作.所以明显的实现是:
function TCustomPoint.ToPoint(Axis: TAxis = nil): TPoint;
begin
if Assigned(Axis) then
Result:=Axis.Reallocate(Self.mPoint);
else
Result:=Self.mPoint;
end;
Run Code Online (Sandbox Code Playgroud)
但是这个方法将在成千上万的TCustomPoint对象中被调用,有时会传递Axis,所以我想知道我是否会使用异常机制而不是提高性能if.像这样的东西:
function TCustomPoint.ToPoint(Axis: TAxis = nil): TPoint;
begin
try
Result:=Axis.Reallocate(Self.mPoint);
except on
E: EAccessViolation do Result:=Self.mPoint;
end;
Run Code Online (Sandbox Code Playgroud)
看看我只是捕获一个EAccessViolation异常,所以如果有任何其他类型的异常,它将不会被我管理,所以它将按预期引发.在此示例中,EAccessViolation发生异常的唯一方法是访问空Axis对象.那是对的吗?第二个实现真的有所改进吗?有没有缺点?