-
Notifications
You must be signed in to change notification settings - Fork 3
Service Calls
Service methods available for API calls are listed in a configuration file. The name of the file is defined by the cuba.restServicesConfig property.
A sample JPA Web API services configuration file:
<services xmlns="http://schemas.haulmont.com/cuba/restapi-service-v2.xsd">
<service name="refapp_PortalTestService">
<method name="findAllCars"/>
<method name="updateCarVin"/>
</service>
</services>Service method call can be performed both by GET and POST requests. Additionally, POST requests allow passing entities or entity collections to the invoked method.
Request format:
{host:port}/app-portal/api/service.<format>?service=<serviceName>&method=<methodName>&view=<view>¶m0=<value 0>¶mN=<value N>¶m0_type=<type 0>¶mN_type=<type N>&s=<sessionId>
- format - defines the output format. Two values are accepted: xml or json.
- service - the name of the service called.
- method - the name of the method invoked.
- param0 .. paramN - parameter values of the method.
- param0_type .. paramN_type - parameter types of the method.
- s - the current session identifier.
If a service has a single method with the specified name and number of parameters, explicit parameter type definition is not required. In other cases, parameter type must be specified.
Request format:
{host:port}/app-portal/api/service?s=<sessionId>
Where s - the current session identifier.
JSON or XML with the description of the method call is passed in the request body.
The Content-Type header value is application/json.
{
"service": "refapp_PortalTestService",
"method": "updateCarVin",
"view": "carEdit",
"params": {
"param0": {
"id": "ref$Car-32261b09-b7f7-4b8c-88cc-6dee6fa8e6ab",
"vin": "WV00001",
"colour" : {
"id": "ref$Colour-b32a6412-d4d9-11e2-a20b-87b22b1460c7",
"name": "Red"
},
"driverAllocations": [
{
"id": "ref$DriverAllocation-b32e43e8-d4d9-11e2-8c8b-2b2939d67fff"
},
{
"id": "NEW-ref$DriverAllocation"
}
]
},
"param1": "WV00001",
"param0_type": "com.haulmont.refapp.core.entity.Car",
"param1_type": "java.lang.String"
}
}Properties of the passed object:
- service - the name of the service called.
- method - the name of the method invoked.
- param0 - paramN - method parameter values.
- param0_type - paramN_type - method parameter types.
The Content-Type header value is text/xml.
<?xml version="1.0" encoding="UTF-8"?>
<ServiceRequest xmlns="http://schemas.haulmont.com/cuba/restapi-service-v2.xsd">
<service>refapp_PortalTestService</service>
<method>updateCarVin</method>
<view>carEdit</view>
<params>
<param name="param0">
<instance id="ref$Car-32261b09-b7f7-4b8c-88cc-6dee6fa8e6ab">
<field name="vin">WV00000</field>
<reference name="colour">
<instance id="ref$Colour-b32a6412-d4d9-11e2-a20b-87b22b1460c7">
<field name="name">Red</field>
</instance>
</reference>
<collection name="driverAllocations">
<instance id="ref$DriverAllocation-b32e43e8-d4d9-11e2-8c8b-2b2939d67fff" />
<instance id="NEW-ref$DriverAllocation" />
</collection>
</instance>
</param>
<param name="param1">WV00001</param>
<param name="param0_type">com.haulmont.refapp.core.entity.Car</param>
<param name="param1_type">java.lang.String</param>
</params>
</ServiceRequest>The main elements of the passed document are:
-
service- the name of the service called. -
method- the name of the method invoked. -
param- the value of the parameter method or the parameter type. The name of the parameter (name attribute) must have the format param0 .. paramN or param0_type .. paramN_type.
If a service has a single method with the specified name and number of parameters, explicit parameter type definition is not required. In other cases, parameter types must be specified.
<param> element may contain both plain text (for setting primitive type values) and nested <instance> elements for entities or <instances> for entity collections.
The XSD of the request is available at http://schemas.haulmont.com/cuba/6.10/restapi-service-v2.xsd.
- primitive Java types. long, int, boolean, etc. should be specified as the type name.
- primitive Java type wrappers. The full class name should be specified as the type name: java.lang.Boolean, java.lang.Integer, etc.
- string (java.lang.String).
- date (java.util.Date).
- UUID (java.util.UUID).
- BigDecimal (java.math.BigDecimal)
- entity (for POST requests only). The full class name should be specified as the type name, e.g. com.haulmont.cuba.security.entity.User.
- entity collections (for POST requests only). The full class or collection interface name should be specified as the type name, e.g. java.util.List.
The result may be in JSON or XML, depending on the method call declaration. Currently, methods can return primitive data types, entities and entity collections.
Primitive data type:
{
"result": "10"
}Entity:
{
"result": {
"id" : "ref$Colour-b32e43e8-d4d9-11e2-8c8b-2b2939d67fff",
"name": "Red"
}
}Primitive data type:
<result>
10
</result>Entity:
<result>
<instance id="ref$Colour-b32a6412-d4d9-11e2-a20b-87b22b1460c7">
<field name="name">Red</field>
</instance>
</result>The XSD of the result is available at http://schemas.haulmont.com/cuba/6.10/restapi-service-v2.xsd.