Difference between revisions of "OM2M/one/REST API"
m |
|||
Line 326: | Line 326: | ||
* The Monitor receives a "Notify" resource including the new "ContentInstance". | * The Monitor receives a "Notify" resource including the new "ContentInstance". | ||
* Remember that the "Notify" resource has a generic structure to support notifications for other type of resources such as "AE", "Container", "Group", "AccessControlPolicy", etc. | * Remember that the "Notify" resource has a generic structure to support notifications for other type of resources such as "AE", "Container", "Group", "AccessControlPolicy", etc. | ||
+ | |||
+ | = Short Names = | ||
+ | * ae: Application Entity | ||
+ | * cnt: Container | ||
+ | * cin: Content Instance | ||
+ | * sub: Subscription | ||
+ | * sgn: Agregated Notification | ||
+ | * rn: Resource Name | ||
+ | * ty: Type | ||
+ | * ri: Resource ID | ||
+ | * pi: Parent Id | ||
+ | * Acpi: Access Control Policies IDs | ||
+ | * uril: URI List | ||
+ | * ct: Creation Time | ||
+ | * et: Expiration Time | ||
+ | * lt: Last Modified Time | ||
+ | * lbl: Label | ||
+ | * cnf: Content Format | ||
+ | * con: Content | ||
+ | * mni: Maximum Number of Instance | ||
+ | * st: State Tag | ||
+ | * cs: Content Size | ||
+ | * aei: Application Entity Id | ||
+ | * api: Application Id | ||
+ | * poa: Point of Access | ||
+ | * rr: Request Reachability | ||
+ | * nev: Notification Event | ||
+ | * nep: Representation | ||
+ | * sur: Subscription URI | ||
+ | * Enc: Event Notification Criteria |
Revision as of 17:03, 12 June 2018
Contents
- 1 Install a REST client
- 2 Retrieve a resource
- 3 Create a "MY_SENSOR" application
- 4 Discover resources based on their labels
- 5 Create a DESCRIPTOR container
- 6 Create a description contentInstance
- 7 Create a DATA container
- 8 Create a data contentInstance
- 9 Create a "MY_SENSOR" application using JSON
- 10 Subscribe to MY_SENSOR data
- 11 Short Names
Install a REST client
- For this section, you need a REST client to send HTTP request (GET, POST, UPDATE, DELETE) to the OM2M platform.
- Install Postman extension on google chrome browser: http://www.getpostman.com
- The tutorial postman collection is available here: https://www.getpostman.com/collections/41fad4dcdaca7a90325e
Retrieve a resource
- HTTP request:
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse |
Method | GET |
Header | X-M2M-Origin: admin:admin Accept: application/xml |
Body | (empty) |
- HTTP response:
Field | Value |
Status | 200 OK |
Body | <?xml version="1.0" encoding="UTF-8"?> <m2m:cb xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="in-name"> <ty>5</ty> <ri>/in-cse</ri> <ct>20151104T150228</ct> <lt>20151104T150228</lt> <acpi>/in-cse/acp-563660429</acpi> <cst>1</cst> <csi>in-cse</csi> <srt>1 2 3 4 5 9 14 15 16 17 23</srt> <poa>http://127.0.0.1:8080/</poa> </m2m:cb> |
You can set the Accept header to application/json if you want a response in JSON format instead of XML.
Create a "MY_SENSOR" application
- Send a HTTP request with the following parameters to create a MY_SENSOR application on the gateway.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=2 |
Body | <m2m:ae xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="MY_SENSOR" > <api>app-sensor</api> <lbl>Type/sensor Category/temperature Location/home</lbl> <rr>false</rr> </m2m:ae> |
- HTTP response:
Field | Value |
Status | 201 Created |
Headers | Content-Location: /in-cse/ae-CAE449907766 |
Body | <?xml version="1.0" encoding="UTF-8"?> <m2m:ae xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="MY_SENSOR"> <ty>2</ty> <ri>ae-CAE449907766</ri> <pi>/in-cse</pi> <ct>20151104T151858</ct> <lt>20151104T151858</lt> <lbl>Type/sensor Category/temperature Location/home</lbl> <acpi>/in-cse/acp-89704715</acpi> <api>app-sensor</api> <aei>CAE449907766</aei> <rr>false</rr> </m2m:ae> |
- You can check the created application on the web interface.
Discover resources based on their labels
- You can discover available resources based on their search strings using the discovery resource. The fu parameter (stands for "Filter Usage") indicate that it is a discovery request. The lbl ("Label") indicate the specific label you what to filter.
- HTTP request:
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse?fu=1&lbl=Type/sensor |
Method | GET |
Header | X-M2M-Origin: admin:admin Accept: application/xml |
Body | (empty) |
- HTTP response:
Field | Value |
Status | 200 OK |
Body | <?xml version="1.0" encoding="UTF-8"?> <m2m:disres xmlns:m2m="http://www.onem2m.org/xml/protocols"> <ref ty="2"> <uri-of-the-resource> </ref> </m2m:disres> |
Create a DESCRIPTOR container
- Send a HTTP request with the following parameters to create a DESCRIPTOR container resource under the MY_SENSOR application.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=3 |
Body | <m2m:cnt xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="DESCRIPTOR"> </m2m:cnt> |
- HTTP response
Field | Value |
Status | 201 Created |
Header | Content-Location: /in-cse/cnt-478855064 |
Body | <?xml version="1.0" encoding="UTF-8"?> <m2m:cnt xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="DESCRIPTOR"> <ty>3</ty> <ri>cnt-478855064</ri> <pi>/in-cse/ae-CAE449907766</pi> <ct>20151104T155844</ct> <lt>20151104T155844</lt> <acpi>/in-cse/acp-89704715</acpi> <cni>0</cni> <cbs>0</cbs> </m2m:cnt> |
- Check the created container on the web interface.
Create a description contentInstance
- Send a HTTP request with the following parameters to create a description content instance resource under the "DESCRIPTOR" container.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DESCRIPTOR |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=4 |
Body | <m2m:cin xmlns:m2m="http://www.onem2m.org/xml/protocols"> <cnf>application/xml</cnf> <con> <obj> <str name="type" val="Temperature_Sensor"/> <str name="location" val="Home"/> <str name="appId" val="MY_SENSOR"/> <op name="getValue" href="/in-cse/in-name/MY_SENSOR/DATA/la" in="obix:Nil" out="obix:Nil" is="retrieve"/> </obj> </con> </m2m:cin> |
- Check the created content instance on the web interface.
Create a DATA container
- Send a HTTP request with the following parameters to create a "DATA" container resource under the "MY_SENSOR" application.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=3 |
Body | <m2m:cnt xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="DATA"> </m2m:cnt> |
- Check the created container on the web interface.
Create a data contentInstance
- Send a HTTP request with the following parameters to create a data content instance resource under the "DATA" container.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DATA |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=4 |
Body | <m2m:cin xmlns:m2m="http://www.onem2m.org/xml/protocols"> <cnf>message</cnf> <con> <obj> <str name="appId" val="MY_SENSOR"/> <str name="category" val="temperature "/> <int name="data" val="27"/> <int name="unit" val="celsius"/> </obj> </con> </m2m:cin> |
- Check the created content instance on the web interface.
Create a "MY_SENSOR" application using JSON
- Since OM2M supports JSON, you can send an HTTP request with the following parameters to create a MY_SENSOR application on the gateway using JSON instead of XML.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/json;ty=2 |
Body | { "m2m:ae": { "api": "app-sensor", "rr": "false", "lbl": ["Type/sensor", "Category/temperature", "Location/home"], "rn": "MY_SENSOR" } } |
You can interact with the system in the same way using JSON instead of XML with an equivalent of the XML body. (Be careful for the Labels to use a JSON array for instance: "lbl":"["label-1", "label-2"].)
Subscribe to MY_SENSOR data
- Download the monitor server sample from this link: Monitor.
- Start the Monitor server using the following command:
> java -jar monitor.jar
- The monitor starts listening on port=1400 and context=/monitor.
- Send a HTTP request with the following parameters to create a "Subscription" resource for receive asynchronously events from "MY_SENSOR" application.
- The monitor listening URL (http://127.0.0.1:1400/monitor) should be added on the "nu" tag of the subscription representation.
Field | Value |
URL | http://127.0.0.1:8080/~/in-cse/in-name/MY_SENSOR/DATA |
Method | POST |
Header | X-M2M-Origin: admin:admin Content-Type: application/xml;ty=23 |
Body | <m2m:sub xmlns:m2m="http://www.onem2m.org/xml/protocols" rn="SUB_MY_SENSOR"> <nu>http://localhost:1400/monitor</nu> <nct>2</nct> </m2m:sub> |
- Check the created subscription on the web interface.
- Create a new event content instance resource under the "DATA" container.
- The new event is published to interested subscribers by the gateway.
- Here is an example of the "Notify" XML representation:
<?xml version="1.0" encoding="UTF-8"?> <m2m:sgn xmlns:m2m="http://www.onem2m.org/xml/protocols"> <nev> <rep rn="cin_name1"> <ty>4</ty> <ri>cin-46677406</ri> <pi>/in-cse/cnt-397256037</pi> <ct>20151104T162611</ct> <lt>20151104T162611</lt> <st>0</st> <cnf>message</cnf> <cs>11</cs> <con>hello world</con> </rep> <rss>1</rss> </nev> <sud>false</sud> <sur>/in-cse/in-name/MY_SENSOR/DATA/SUB_MY_SENSOR</sur> </m2m:sgn>
- The Monitor receives a "Notify" resource including the new "ContentInstance".
- Remember that the "Notify" resource has a generic structure to support notifications for other type of resources such as "AE", "Container", "Group", "AccessControlPolicy", etc.
Short Names
- ae: Application Entity
- cnt: Container
- cin: Content Instance
- sub: Subscription
- sgn: Agregated Notification
- rn: Resource Name
- ty: Type
- ri: Resource ID
- pi: Parent Id
- Acpi: Access Control Policies IDs
- uril: URI List
- ct: Creation Time
- et: Expiration Time
- lt: Last Modified Time
- lbl: Label
- cnf: Content Format
- con: Content
- mni: Maximum Number of Instance
- st: State Tag
- cs: Content Size
- aei: Application Entity Id
- api: Application Id
- poa: Point of Access
- rr: Request Reachability
- nev: Notification Event
- nep: Representation
- sur: Subscription URI
- Enc: Event Notification Criteria