根据6.2.1 Header一章中TS-0008: CoAP Protocol Binding有如下一个M2M操作与CoAP方法的映射:
Operation CoAP Method
CREATE POST
RETRIEVE GET
UPDATE PUT
DELETE DELETE
NOTIFY POST
然后在6.2.2.4 新选项的定义一章中介绍了一组新的 CoAP 选项,映射一个 M2M 标头参数。这里列出了主要的 HTTP 标头变量以及 CoAP 选项等效项:
Header HTTP variable CoAP Option
X-M2M-Origin 256
X-M2M-RI 257
oneM2M-TY 267
所以这里有一个最小的node.js脚本来做一个GET操作,即在路径/<cseBase>/<AE>/<Container>的容器资源中检索最新的contentInstance:
var coap = require('coap');
var options = {
host : '<hostname>',
port : 5683,
pathname : "/<cseBase>/<AE>/<Container>/la",
method : 'get',
confirmable : 'true',
options : {
'Accept' : 'application/json'
}
};
var bodyString = ''; // void string for GET operation
var responseBody = '';
var req = coap.request(options);
req.setOption("256", new Buffer("<origin>")); // X-M2M-Origin (mandatory)
req.setOption("257", new Buffer('123456')); // X-M2M-RI (mandatory)
req.on('response', function (res) {
res.on('data', function () {
responseBody += res.payload.toString();
});
res.on('end', function () {
if (res.code == '2.05') {
console.log('[coap] coap ready, request OK');
var obj = JSON.parse(responseBody);
console.log('[coap] responseBody', obj);
} else {
console.log('[coap] coap res.code='+res.code);
}
});
});
req.write(bodyString);
req.end();
这是一个最小的POST操作示例,即在路径/<cseBase>/<AE>/<Container>的容器资源中创建一个contentInstance:
var coap = require('coap');
var options = {
host : '<hostname>',
port : 5683,
pathname : "/<cseBase>/<AE>/<Container>",
method : 'post',
confirmable : 'true',
options : {
'Content-Format' : 'application/json'
}
};
var bodyString = new Buffer('{"m2m:cin":{ "con":{"temperature":33}}}');
var responseBody = '';
var req = coap.request(options);
req.setOption("256", new Buffer("<origin>")); // X-M2M-Origin (mandatory)
req.setOption("257", new Buffer('123456')); // X-M2M-RI (mandatory)
req.setOption("267", new Buffer([4])); // ty = 4, ContentInstance resource type
req.on('response', function (res) {
res.on('data', function () {
responseBody += res.payload.toString();
});
res.on('end', function () {
if (res.code == '2.05') {
console.log('[coap] coap ready, request OK');
var obj = JSON.parse(responseBody);
console.log('[coap] responseBody', obj);
} else {
console.log('[coap] coap res.code='+res.code);
}
});
});
req.write(bodyString);
req.end();