Hi Ramindu Deshapriya,

Thank you for your comments.

In previous connectors they are using a single proxy configuration but
using different methods for different operations. I am trying to write all
GET operations in a single method and also using a single proxy
configuration.

Thank you

On Thu, Nov 27, 2014 at 2:56 PM, Malaka Silva <[email protected]> wrote:

> Hi Shakila,
>
> Since we are looking at quite a lot of parameters, you can use script
> mediator for this purpose.
>
> Jusy have a single variable inside the script mediator for this
>
> Similar sample can be found in [1]
>
> [1]
> https://github.com/wso2-dev/esb-connectors/blob/master/freshbook/freshbooks-connector/freshbooks-connector-1.0.0/org.wso2.carbon.connector/src/main/resources/freshbooks-client/listClients.xml
>
> Best Regards,
> Malaka
>
> On Thu, Nov 27, 2014 at 2:44 PM, Shakila Sivagnanarajah <[email protected]>
> wrote:
>
>> Hi All,
>>
>> I am developing connector for Nest API. Nest Thermostat API is organized
>> in a single data object and every data element is addressable by a URL
>> called data location.
>>
>> *Data model:*
>>
>> {
>> "devices": {
>>
>> "thermostats": {
>> "peyiJNo0IldT2YlIVtYaGQ": {
>> "device_id": "peyiJNo0IldT2YlIVtYaGQ" ,
>> "locale": "en-US" ,
>> "software_version": "4.0" ,
>> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
>> "name": "Hallway (upstairs)" ,
>> "name_long": "Hallway Thermostat (upstairs)" ,
>> "last_connection": "2014-10-31T23:59:59.000Z" ,
>> "is_online": true ,
>> "can_cool": true ,
>> "can_heat": true ,
>> "is_using_emergency_heat": true ,
>> "has_fan": true ,
>> "fan_timer_active": true ,
>> "fan_timer_timeout": "2014-10-31T23:59:59.000Z" ,
>> "has_leaf": true ,
>> "temperature_scale": "C" ,
>> "target_temperature_f": 72 ,
>> "target_temperature_c": 21.5 ,
>> "target_temperature_high_f": 72 ,
>> "target_temperature_high_c": 21.5 ,
>> "target_temperature_low_f": 64 ,
>> "target_temperature_low_c": 17.5 ,
>> "away_temperature_high_f": 72 ,
>> "away_temperature_high_c": 21.5 ,
>> "away_temperature_low_f": 64 ,
>> "away_temperature_low_c": 17.5 ,
>> "hvac_mode": "heat" ,
>> "ambient_temperature_f": 72 ,
>> "ambient_temperature_c": 21.5 ,
>> "humidity": 40
>> }
>> }
>> ,
>> "smoke_co_alarms": {
>> "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs": {
>> "device_id": "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs" ,
>> "locale": "en-US" ,
>> "software_version": "1.01" ,
>> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
>> "name": "Hallway (upstairs)" ,
>> "name_long": "Hallway Protect (upstairs)" ,
>> "last_connection": "2014-10-31T23:59:59.000Z" ,
>> "is_online": true ,
>> "battery_health": "ok" ,
>> "co_alarm_state": "ok" ,
>> "smoke_alarm_state": "ok" ,
>> "is_manual_test_active": true ,
>> "last_manual_test_time": "2014-10-31T23:59:59.000Z" ,
>> "ui_color_state": "gray"
>> }
>> }
>>
>> } ,
>> "structures": {
>> "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw": {
>> "structure_id": "VqFabWH21nwVyd4RWgJgNb292wa7hG_dUwo2i2SG7j3-BOLY0BA4sw" ,
>> "thermostats": [ "peyiJNo0IldT2YlIVtYaGQ", ... ] ,
>> "smoke_co_alarms": [ "RTMTKxsQTCxzVcsySOHPxKoF4OyCifrs", ... ] ,
>> "away": "home" ,
>> "name": "Home" ,
>> "country_code": "US" ,
>> "postal_code": "94304" ,
>> "peak_period_start_time": "2014-10-31T23:59:59.000Z" ,
>> "peak_period_end_time": "2014-10-31T23:59:59.000Z" ,
>> "time_zone": "America/Los_Angeles" ,
>> "eta": {
>> "trip_id": "myTripHome1024" ,
>> "estimated_arrival_window_begin": "2014-10-31T22:42:59.000Z" ,
>> "estimated_arrival_window_end": "2014-10-31T23:59:59.000Z"
>> }
>> }
>> }
>> }
>>
>> *Endpoints:*
>> To get whole object: https://developer-api.nest.com?auth=<token>
>> To get all device objects: https://developer-api.nest.com/devices?auth=
>> <token>
>> To get all thermostat device objects:
>> https://developer-api.nest.com/devices/thermostats?auth=<token>
>> To get a particular thermostat device object:
>> https://developer-api.nest.com/devices/thermostats/<device
>> id>?auth=<token>
>> To get target temperature value of a particular thermostat device:
>> https://developer-api.nest.com/devices/thermostats/<device
>> id>/target_temperature_f?auth=<token>
>>
>>
>> To view whole structure object (all devices in home, away status etc):
>> https://developer-api.nest.com/structures?auth=<token>
>> To view a list of thermostat devices in home:
>> https://developer-api.nest.com/structures/<structure
>> id>/thermostats?auth=<token>
>>
>> So I am planning to do this using switch mediator in a single
>> configuration as written below. In the proxy service, I have to define all
>> parameters. Is this a correct way or do I want to write each methods
>> separately?
>>
>>
>> <?xml version="1.0" encoding="UTF-8"?>
>> <template name="getServices" xmlns="http://ws.apache.org/ns/synapse";>
>>
>>     <parameter name="category" description="Category" />
>>
>>
>>     <!-- For devices -->
>>     <parameter name="device" description="Type of device" />
>>     <parameter name="deviceId" description="Id of device" />
>>
>>     <!-- For structures -->
>>     <parameter name="structureId" description="Id of structure" />
>>
>>     <!-- For both devices and structures -->
>>     <parameter name="field" description="Field of a thermostat" />  <!--
>> It can be last_connection, is_online, can_cool, can_heat etc for devices
>> and thermostats, smoke_co_alarms, away, country_code for structures -->
>>
>>     <sequence>
>>         <property name="uri.var.category" expression="$func:category" />
>>         <property name="uri.var.device" expression="$func:device" />
>>         <property name="uri.var.deviceId" expression="$func:deviceId" />
>>         <property name="uri.var.structureId"
>> expression="$func:structureId" />
>>         <property name="uri.var.field" expression="$func:field" />
>>
>>         <switch source="get-property('uri.var.category')">
>>             <case regex="devices">
>>                 <property name="uri.var.param" value="devices"/>
>>
>>                 <filter xpath="(not(get-property('uri.var.deviceId') = ''
>> or (not(string(get-property('uri.var.deviceId'))))))">
>>                     <then>
>>                         <property name="uri.var.param"
>>
>> expression="fn:concat(get-property('uri.var.param'),'/thermostats/',get-property('uri.var.deviceId'))"/>
>>
>>                         <filter xpath="(not(get-property('uri.var.field')
>> = '' or (not(string(get-property('uri.var.field'))))))">
>>                             <then>
>>
>>                                 <switch
>> source="get-property('uri.var.field')">
>>                                     <case
>> regex="humidity|last_connection|is_online|can_cool|can_heat">
>>                                     <property name="uri.var.param"
>>
>> expression="fn:concat(get-property('uri.var.param'),'/',get-property('uri.var.field'))"/>
>>                                     </case>
>>                                     <default/>
>>                                 </switch>
>>
>>                             </then>
>>                         </filter>
>>
>>                     </then>
>>                 </filter>
>>
>>             </case>
>>             <case regex="structures">
>>                 <property name="uri.var.param" value="structures"/>
>>             </case>
>>             <default/>
>>         </switch>
>>
>>         <property name="Content-Type" value="application/json"/>
>>
>>          <call>
>>             <endpoint>
>>                 <http method="get"
>>
>> uri-template="{uri.var.apiUrl}/{uri.var.param}?auth={uri.var.token}" />
>>             </endpoint>
>>         </call>
>>     </sequence>
>> </template>
>>
>> I appreciate the thoughts on performance implications.
>>
>> Thank you.
>> --
>> Shakila Sivagnanarajah
>> Associate Software Engineer
>> Mobile :+94 (0) 770 760240
>> [email protected]
>>
>> _______________________________________________
>> Dev mailing list
>> [email protected]
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
>
> --
>
> Best Regards,
>
> Malaka Silva
> Senior Tech Lead
> M: +94 777 219 791
> Tel : 94 11 214 5345
> Fax :94 11 2145300
> Skype : malaka.sampath.silva
> LinkedIn : http://www.linkedin.com/pub/malaka-silva/6/33/77
> Blog : http://mrmalakasilva.blogspot.com/
>
> WSO2, Inc.
> lean . enterprise . middleware
> http://www.wso2.com/
> http://www.wso2.com/about/team/malaka-silva/
> <http://wso2.com/about/team/malaka-silva/>
>
> Save a tree -Conserve nature & Save the world for your future. Print this
> email only if it is absolutely necessary.
>



-- 
Shakila Sivagnanarajah
Associate Software Engineer
Mobile :+94 (0) 770 760240
[email protected]
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to