Skip to content

Configuring Service Descriptor

Siminov Framework edited this page Dec 25, 2015 · 18 revisions

Service Descrptor is one which define the structure of your RESTful Web Service API

                  <!-- Design Of ServiceDescriptor.xml -->
    <service-descriptor>
    
        <!-- General Service Properties -->
            <!-- Mandatory Field -->
        <property name="name">name_of_service</property>
    
             <!-- Optional Field -->
        <property name="description">description_of_service</property>
    
             <!-- Optional Field (DEFAULT: HTTP) -->
        <property name="protocol">HTTP|HTTPS</property>
    
             <!-- Mandatory Field -->
        <property name="instance">address_of_instance</property>
    
             <!-- Optional Field -->
        <property name="port">port_number</property>

             <!-- Optional Field -->
        <property name="context">context_of_service</property>
         
        <!-- Requests -->
            <!-- Request -->
        <request>
            
            <request>

                <!-- General Request Properties -->
                    <!-- Mandatory Field -->
                <property name="name">name_of_request</property>
         
                    <!-- Mandatory Field -->
                <property name="type">GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH</property>

                    <!-- Mandatory Field -->
                <property name="api">full_request_path</property>

                    <!-- Mandatory Field -->
                <property name="handler">handler_of_request</property>
         	
                    <!-- Optional Field (DEFAULT: SYNC)-->
                <property name="mode">SYNC|ASYNC</property>

      					
                <!-- Query Parameters -->
                    <!-- Query Parameter -->
                <query-parameters>
          
                    <query-parameter>
      			    
                            <!-- Mandatory Field -->
                        <property name="name">name_of_query_parameter</property>
      			    
                            <!-- Mandatory Field -->
                        <property name="value">value_of_query_parameter</property>
      			    
                    </query-parameter>
      		
                </query-parameters>
      
      
                <!-- Header Parameters -->
                    <!-- Header Parameter -->
                <header-parameters>
          
                    <header-parameter>
      			    
                            <!-- Mandatory Field -->
                        <property name="name">name_of_header_parameter</property>
      			    
                            <!-- Mandatory Field -->
                        <property name="value">value_of_header_parameter</property>
      			    
                    </header-parameter>
      		
                </header-parameters>

      		
                <!-- Stream of Data Under Request Body -->
                    <!-- It is Optional Property -->
                <data-stream>stream_of_data</data-stream>	
     	
            </request>
        </requests>
     
    </service-descriptor>

                    <!-- Android Sample: Service Descriptor -->

    <service-descriptor>
    
        <property name="name">SIMINOV-CONNECT-BOOKS-SERVICE</property>
        <property name="description">Siminov Connect Books Service</property>
        <property name="protocol">HTTP</property>
        <property name="instance">10.0.2.2</property>
        <property name="port">8080</property>
        <property name="context">CONNECT-ENTERPRISE</property>    

        <requests>
            <request>

                <property name="name">GET-BOOKS</property>
                <property name="type">GET</property>
                <property name="api">get-books</property>
                <property name="handler">siminov.connect.sample.services.GetBooks</property>
                <property name="mode">SYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">ADD-BOOK</property>
                <property name="type">POST</property>
                <property name="api">add-book</property>
                <property name="handler">siminov.connect.sample.services.AddBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">MODIFY-BOOK</property>
                <property name="type">PUT</property>
                <property name="api">modify-book</property>
                <property name="handler">siminov.connect.sample.services.ModifyBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">DELETE-BOOK</property>
                <property name="type">DELETE</property>
                <property name="api">delete-book</property>
                <property name="handler">siminov.connect.sample.services.DeleteBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                    <header-parameter name="name">{@resource BOOK_TITLE}</header-parameter>
                </header-parameters>
     	
            </request>
        </requests>
    
    </service-descriptor>
                   <!-- iOS Sample: Service Descriptor -->
    <service-descriptor>
    
        <property name="name">SIMINOV-CONNECT-BOOKS-SERVICE</property>
        <property name="description">Siminov Connect Books Service</property>
        <property name="protocol">HTTP</property>
        <property name="instance">10.0.2.2</property>
        <property name="port">8080</property>
        <property name="context">CONNECT-ENTERPRISE</property>    

        <requests>
            <request>

                <property name="name">GET-BOOKS</property>
                <property name="type">GET</property>
                <property name="api">get-books</property>
                <property name="handler">GetBooks</property>
                <property name="mode">SYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">ADD-BOOK</property>
                <property name="type">POST</property>
                <property name="api">add-book</property>
                <property name="handler">AddBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">MODIFY-BOOK</property>
                <property name="type">PUT</property>
                <property name="api">modify-book</property>
                <property name="handler">ModifyBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">DELETE-BOOK</property>
                <property name="type">DELETE</property>
                <property name="api">delete-book</property>
                <property name="handler">DeleteBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                    <header-parameter name="name">{@resource BOOK_TITLE}</header-parameter>
                </header-parameters>
     	
            </request>
        </requests>
    
    </service-descriptor>
                 <!-- Windows Sample: Service Descriptor -->
    <service-descriptor>
    
        <property name="name">SIMINOV-CONNECT-BOOKS-SERVICE</property>
        <property name="description">Siminov Connect Books Service</property>
        <property name="protocol">HTTP</property>
        <property name="instance">10.0.2.2</property>
        <property name="port">8080</property>
        <property name="context">CONNECT-ENTERPRISE</property>    

        <requests>
            <request>

                <property name="name">GET-BOOKS</property>
                <property name="type">GET</property>
                <property name="api">get-books</property>
                <property name="handler">Siminov.Connect.Sample.Services.GetBooks</property>
                <property name="mode">SYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">ADD-BOOK</property>
                <property name="type">POST</property>
                <property name="api">add-book</property>
         	<property name="handler">Siminov.Connect.Sample.Services.AddBook</property>
	     	<property name="mode">ASYNC</property>

	      	<header-parameters>
	        	<header-parameter name="Accept">application/xml</header-parameter>
	          	<header-parameter name="Content-Type">application/xml</header-parameter>
	      	</header-parameters>
     	
            </request>
            <request>

                <property name="name">MODIFY-BOOK</property>
                <property name="type">PUT</property>
                <property name="api">modify-book</property>
                <property name="handler">Siminov.Connect.Sample.Services.ModifyBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                </header-parameters>
     	
            </request>
            <request>

                <property name="name">DELETE-BOOK</property>
                <property name="type">DELETE</property>
                <property name="api">delete-book</property>
                <property name="handler">Siminov.Connect.Sample.Services.DeleteBook</property>
                <property name="mode">ASYNC</property>

                <header-parameters>
                    <header-parameter name="Accept">application/xml</header-parameter>
                    <header-parameter name="Content-Type">application/xml</header-parameter>
                    <header-parameter name="name">{@resource BOOK_TITLE}</header-parameter>
                </header-parameters>
     	
            </request>
        </requests>
    
    </service-descriptor>

Note: Application Developer can provide their own properties also, and by using following API's they can use properties.

  • Get Properties - [Android:getProperties | iOS:getProperties | Windows:GetProperties | JavaScript:getProperties]: It will return all properties associated with Application Descriptor.

  • Get Property - [Android:getProperty(Name-of-Property) | iOS:getProperty:Name-of-Property | Windows:GetProperty(Name-of-Property) | JavaScript:getProperty(Name-of-Property)]: It will return property value associated with property name provided.

  • Contains Property - [Android:containsProperty(Name-of-Property) | iOS:containsProperty:Name-of-Property | Windows:ContainsProperty(Name-of-Property) | JavaScript:containScript(Name-of-Property)]: It will return TRUE/FALSE whether property exists or not.

  • Add Property - [Android:addProperty(Name-of-Property, Value-of-Property) | iOS:addProperty:Name-of-Property value:Value-of-Property) | Windows:AddProperty(Name-of-Property, Value-of-Property) | JavaScript:addProperty(Name-of-Property, Value-of-Property)]: It will add new property to the collection of Application Descriptor properties.

  • Remove Property - [Android:removeProperty(Name-of-Property) | iOS:removeProperty(Name-of-Property) | Windows:RemoveProperty(Name-of-Property) | JavaScript:removeProperty(Name-of-Property)]: It will remove property from Application Descriptor properties based on name provided.

Service Descriptor Elements

1. General properties about service: It contain common properties to a service.
  • name*: Name of the service. It is Mandatory property.

  • descriptor: Description of the service. It is optional property.

  • protocol: HTTP/HTTPS. Protocol used by the service. It is optional property. Default value is HTTP

  • instance*: Instance (IP Address) of the service. It is mandatory property.

  • name*: Name of the service. It is Mandatory property.

  • port: Port number used by the service. It is optional property.

  • context: Context used by the service. It is optional property.

2. Request: It defines the structure Web Service API

Properties: Properties about the Request

  • name*: Name of the Request. It is mandatory property.

  • type*: GET|HEAD|POST|PUT|DELETE|TRACE|OPTIONS|CONNECT|PATCH. Type of API. It is mandatory property.

  • api*: Path of API. It is mandatory field.

  • handler: Handler of the API. It is mandatory property.

  • mode: SYNC|ASYNC. Mode of API. Is is optional property. Default is SYNC.

Query Parameters Properties: It is key|value pair property which define the query parameter, if any associated to the API.

  • name*: Name of Query Parameter. It is mandatory property.

  • value*: Value of Query Parameter. It is mandatory property.

Header Parameters Properties: It is key|value pair property which define the header parameter, if any associated to the API.

  • name*: Name of Header Parameter. It is mandatory property.

  • value*: Value of Header Parameter. It is mandatory property.

Data Stream: Data part under request. Is is optional property.

Note

You can specify any name for ServiceDescriptor.xml file.

Android Sample: Service Descriptor

![Application Data Folder Based On Name Defined] (https://raw.githubusercontent.com/Siminov/connect/docs/github/v2.0/service_descriptor_path.android.png "ApplicationDescriptor.xml file path")


iOS Sample: Service Descriptor

![Application Data Folder Based On Name Defined] (https://raw.githubusercontent.com/Siminov/connect/docs/github/v2.0/service_descriptor_path.ios.png "ApplicationDescriptor.xml file path")


Windows Sample: Service Descriptor

![Application Data Folder Based On Name Defined] (https://raw.githubusercontent.com/Siminov/connect/docs/github/v2.0/service_descriptor_path.windows.png "ApplicationDescriptor.xml file path")