blob: 4cc8927e14aca57d52a5add4ef6e71c44bb6d402 [file] [log] [blame]
---
title: POST /geode/v1/functions/{functionId}
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
Execute <%=vars.product_name%> function on an entire cluster or on a specified region, members, and member groups.
## Resource URL
``` pre
/geode/v1/functions/{functionId}?[&onRegion=regionname|&onMembers=member1,member2,...,memberN|&onGroups=group1,group2,...,groupN]
```
## Parameters
- **{functionId}** This required parameter is the name of the function to execute. Place it in the resource URL, as in the example request: `AddFreeItemToOrders`.
- **onRegion** This optional parameter specifies the target region for the function. You can only invoke a function on a single region. Substitute the region's name for `regionname` within the sample syntax `onRegion=regionname`.
- **onMembers** This optional parameter specifies the target members of the function. For multiple members, specify a comma-delimited list of member names, as in the sample `onMembers=member1,member2`.
- **onGroups** This optional parameter specifies the target groups of the function. For multiple groups, specify a comma-delimited list of group names, as in the sample `onGroups=membergroup1,membergroup2`.
- **filter** This optional parameter can only be used with the **onRegion** parameter, where the region has a `data-policy` of `PARTITION`. The parameter specifies a list of applicable keys that the function needs to filter on. There are three keys in the example resource URL:
``` pre
http://serverURL/functions/SampleFunction?onRegion=TestPartitionRegion&filter=key1,key2,key3
```
- Any *function arguments* are passed in the request body in JSON format. The content of the arguments depends on how the function is defined. Each function argument must be written as a JSON object (enclosed in braces `{ }`) and using `@type` to declare its type. `@value` can be used to specify a scalar value. Nested JSON objects (`{ }`) or JSON collections (`[ ]`) are not accepted.
Collections of Java objects cannot be specified as parameters in JSON format, so if a function expects a collection of objects as one of its arguments (for example, `function(List<Item> list)`), it cannot be called using the <%=vars.product_name%> REST API. Following are some examples of functions and their arguments in JSON format:
<table>
<colgroup>
<col width="50%" />
<col width="50%" />
<col width="50%" />
</colgroup>
<thead>
<tr class="header">
<th>Function signature</th>
<th>Function arguments in JSON format</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<pre>myFunction1(int n)</pre>
</td>
<td>
<pre>
[
{
"@type": "integer",
"@value": 10
}
]
</pre>
</td></tr>
<tr>
<td>
<pre>myFunction2(double d, Item i)</pre>
</td>
<td>
<pre>
[
{
"@type": "double",
"@value": 210
},
{
"@type": "org.apache.geode.web.rest.domain.Item",
"itemNo": "599",
"description": "Part X Free on Bumper Offer",
"quantity": "2",
"unitprice": "5",
"totalprice": "10.00"
}
]
</pre>
Notice how `item` fields are written in JSON format due to the restrictions against nested objects. The following approach would be wrong:
<pre>
[
{
"@type": "double",
"@value": 210
},
{
"@type": "org.apache.geode.web.rest.domain.Item",
"itemNo" : {
"@type":"double",
"@value": 599
},
"description": "Part X Free on Bumper Offer",
"quantity": "2",
"unitprice": "5",
"totalprice": "10.00"
}
]
</pre>
</td></tr></table>
## Example Requests
``` pre
Request Payload: application/json
POST /geode/v1/functions/AddFreeItemToOrders
Accept: application/json
Content-Type: application/json
[
{
"@type": "double",
"@value": 210
},
{
"@type": "org.apache.geode.web.rest.domain.Item",
"itemNo": "599",
"description": "Part X Free on Bumper Offer",
"quantity": "2",
"unitprice": "5",
"totalprice": "10.00"
}
]
```
Another example:
``` pre
Request Payload: null
POST /geode/v1/functions/getDeliveredOrders
Accept: application/json
```
## Example Success Responses
``` pre
Response Payload: null
200 OK
Location:http: //localhost:8080/geode/v1/functions/AddFreeItemToOrders
```
Another example response:
``` pre
Response Payload: application/json
200 OK
Content-Length: 316
Content-Type: application/json
Location: http://localhost:8080/geode/v1/functions/getDeliveredOrders
[
{
"purchaseOrderNo": "1121",
"deliveryDate": "Thu Oct 10 00:00:00 IST 2019"
},
{
"purchaseOrderNo": "777",
"deliveryDate": "Thu Oct 10 00:00:00 IST 2019"
},
{
...
}
]
```
## Error Codes
Status code 500 INTERNAL SERVER ERROR is an error encountered in a server. Check the HTTP response body for a stack trace of the exception.