我正在玩Googles官方js客户端访问Google API,在这种情况下是Google Glass Mirror API。
我需要一些指导,了解如何使用update
或更好的patch
方法(请参阅https://developers.google.com/glass/v1/reference/timeline)更新我之前插入时间轴的时间轴卡。
插入和列出相当容易并且成功运行。我已经使用本教程开始了:https://github.com/emil10001/glass-mirror-nodejs-auth-demo/blob/master/app.js
我试过以下:
card = {
"kind": "mirror#timelineItem",
"id": "74b88eb3-a6d7-4c13-8b0e-bfdecf71c913",
"created": "2014-05-22T20:26:56.253Z",
"updated": "2014-05-22T20:27:18.961Z",
"etag": "1400790438961",
"text": "This item3 auto-resizes according to the text length",
"notification": {
"level": "DEFAULT"
}
}
client
.mirror.timeline.update({"id": card.id, resource: card})
.withAuthClient(oauth2Client)
.execute(function (err, data) {
if (!!err)
errorCallback(err);
else
successCallback(data);
});
我得到了以下有效负载的成功回复:
{
kind: 'mirror#timelineItem',
id: '74b88eb3-a6d7-4c13-8b0e-bfdecf71c913',
selfLink: 'https://www.googleapis.com/mirror/v1/timeline/74b88eb3-a6d7-4c13-8b0e-bfdecf71c913',
created: '2014-05-22T20:26:56.253Z',
updated: '2014-05-22T20:32:11.862Z',
etag: '1400790731862'
}
我最终得到的是内容空白的卡片。我怀疑我没有正确使用更新方法,第二个参数resource
没有正确命名?
答案 0 :(得分:0)
Google API通常使用两种不同的方式来指定事物的值:
对于timeline.insert,您只需处理资源,因为您只是添加资源。使用timeline.patch和timeline.update,您将同时处理参数(您正在编辑的资源的ID)和资源更改。因此,您需要为函数调用指定两个参数。
使用上面的示例,调用可能如下所示:
client
.mirror.timeline.update(card.id, card)
.withAuthClient(oauth2Client)
.execute(function (err, data) {
if (!!err)
errorCallback(err);
else
successCallback(data);
});
您还询问了timeline.patch和timeline.update之间的区别。
更新用于将您在卡中提供的所有内容(可写)替换为时间轴项目。因此,使用上面的示例, text 和 notification 字段可能会更改之前的内容。其他字段将被忽略 - 它们不可写,Glass将根据需要设置/更改它们。
正如你所推测的那样,timeline.update在你有一张卡时非常有用(因为你在发送给你时存储了它,或者是因为你是从timeline.list或其他东西那里得到的)并且你需要更改一些其中的字段。
当您可能没有整张卡时使用补丁,但是当您可能仍希望更新其中的某些字段时使用。在这种情况下,资源仅指定要更改的字段 - 其他字段保持不变。
所以以下两个是等价的:
var update = {
text: "new text",
notification: {
level: "DEFAULT"
}
};
client.mirror.timeline.update( card.id, update )
.withAuthClient(oauth2Client)
.execute(function(err,data){
console.log(err,data);
});
var patch = {
text: "new text",
};
client.mirror.timeline.patch( card.id, patch )
.withAuthClient(oauth2Client)
.execute(function(err,data){
console.log(err,data);
});
请注意,如果您想要使用补丁删除字段(例如上面的通知),则需要将字段显式设置为null。