REST API
The REST API exposing HTTP based interface Space. It is leveraging the XAP API. It support the following methods:
- GET - can be used to perform an introduceType, readByID or a readMultiple action by a space query.
- POST - can be used to perform a write / writeMultiple or update / updateMultiple actions.
- DELETE - can be used to perform take / takeMultiple actions either by ID or by a space query.
Introduce Type
Description | Introduce the specific type to space. |
Request URL | PUT http://localhost:8080/{Type}/_introduce_type |
Request Schema:
{
"idProperty": { //required
"propertyName": "id",
"autoGenerated": true, // optional
"indexType": "BASIC" // optional, use with autoGenerate. SEE com.gigaspaces.metadata.index.SpaceIndexType
},
"routingProperty": {
"propertyName": "id",
"indexType": "BASIC" // optional. SEE com.gigaspaces.metadata.index.SpaceIndexType
},
"fixedProperties": [
{
"propertyName": "id",
"propertyType": "int32" // predefined types or full Java class path*
},
{
"propertyName": "prop1",
"propertyType": "string", // predefined types or full Java class path*
"documentSupport": "DEFAULT" // optional. SEE com.gigaspaces.metadata.SpaceDocumentSupport
},
{
"propertyName": "prop2",
"propertyType": "java.util.Map", // predefined types or full Java class path*
"documentSupport": "DEFAULT", // optional. SEE com.gigaspaces.metadata.SpaceDocumentSupport
"storageType": "DEFAULT" // optional, use with documentSupport. SEE com.gigaspaces.metadata.StorageType
},
{
"propertyName": "indexedProp",
"propertyType": "string", // predefined types or full Java class path*
"indexType": "BASIC", // optional. SEE com.gigaspaces.metadata.index.SpaceIndexType
"uniqueIndex": true // optional, must be used with indexType field only. Default to false.
}
],
"compoundIndex": {
"paths": [
"prop1",
"prop2"
],
"unique": true // optional
},
"fifoSupport": "DEFAULT", // SEE com.gigaspaces.annotation.pojo.FifoSupport
"blobStoreEnabled": true,
"storageType": "DEFAULT", // SEE com.gigaspaces.metadata.StorageType
"supportsOptimisticLocking": true,
"supportsDynamicProperties": false // optional, default to true
}
Response Schema:
{
"status":"success"
}
Predefined types and their conversion:
Type name | Java class |
---|---|
int32 | java.lang.Integer |
int64 | java.lang.Long |
double | java.lang.Double |
number | java.lang.Double |
float | java.lang.Float |
boolean | java.lang.Boolean |
string | java.lang.String |
datetime | java.util.Date |
array | java.util.List |
set | java.util.Set |
sortedset | java.util.SortedSet |
object | com.gigaspaces.document.SpaceDocument |
Examples:
curl -XPUT -H "Content-Type: application/json" -d '{"idProperty":{"propertyName":"id","autoGenerated":false},"routingProperty":{"propertyName":"id"},"fixedProperties":[{"propertyName":"id","propertyType":"int64"},{"propertyName":"name","propertyType":"string"},{"propertyName":"age","propertyType":"java.lang.Integer"}]}' http://localhost:8080/MyObject/_introduce_type
Write
Description | Write single entry to the space. |
Request URL | POST http://localhost:8080/{Type}/ |
Request Headers | Content-Type: application/json |
Request Body | JSON object representation of a SpaceDocument object. |
Response Schema:
{
"status":"success"
}
Examples:
curl -XPOST -H "Content-Type: application/json" -d '{"id":1, "name":"myName", "age":10}' http://localhost:8080/MyObject
Write Multiple
Description | Write multiple entries to the space. |
Request URL | POST http://localhost:8080/{Type}/ |
Request Headers | Content-Type: application/json |
Request Body | JSON array representation of a SpaceDocument objects. |
Response Schema:
{
"status":"success"
}
Examples:
curl -XPOST -H "Content-Type: application/json" -d '[{"id":2, "name":"John", "age":16},
{"id":3, "name":"Michael", "age":18}]' http://localhost:8080/MyObject
Count
Description | Returns the number of entries in space of the specified type |
Request URL | GET http://localhost:8080/{Type}/count |
Response Schema:
{
"status":"success",
"data":0
}
Examples:
curl -XGET http://localhost:8080/{Type}/count
Read Multiple
Description | Read multiple entries from space that matches the query. |
Request URL | GET http://localhost:8080/{Type}/ |
Request Query Parameters | query - a SQLQuery that is a SQL-like syntax max - the maximum amount of entries to read |
Response Schema:
{
"status":"success",
"data":[
{
"id":1,
"name":"First"
},
{
"id":2,
"name":"Second"
}
]
}
Examples:
curl -XGET http://localhost:8080/MyObject/?query=age='10'
curl -XGET http://localhost:8080/MyObject/?query=id=%271%27%20or%20id=%272%27%20or%20id=%273%27
*The url is encoded, the query is: id=‘1’ or id=‘2’ or id=‘3’
Read By Id
Description | Read entry from space with the provided id |
Request URL | GET http://localhost:8080/{Type}/{id} |
Response Schema:
{
"status":"success",
"data":{
"id":1,
"name":"First"
}
}
Examples:
curl -XGET http://localhost:8080/MyObject/1
curl -XGET http://localhost:8080/MyObject/2
curl -XGET http://localhost:8080/MyObject/3
Update Multiple
Description | Update entries in space |
Request URL | POST http://localhost:8080/{Type} |
Response Schema:
{
"status":"success"
}
Examples:
curl -XPOST -H "Content-Type: application/json" -d '[{"id":1,"name":"myName","age":11},{"id":2,"name":"John","age":17},{"id":3,"name":"Michael","age":19}]' http://localhost:8080/MyObject
See that data2 field is updated:
curl http://localhost:8080/MyObject/?query=age=11
Take Multiple
Description | Gets and deletes entries from space that matches the query. |
Request URL | DELETE http://localhost:8080/{Type}/ |
Request Query Parameters | query - a SQLQuery that is a SQL-like syntax |
Response Schema:
{
"status":"success",
"data":[
{
"id":1,
"name":"First"
},
{
"id":2,
"name":"Second"
}
]
}
Examples:
curl -XDELETE http://localhost:8080/MyObject/?query=id=%271%27%20or%20id=%272%27
*The url is encoded, the query is: id=1 or id=2
See that only Item3 remains:
curl -XGET http://localhost:8080/MyObject/?query=id=%271%27%20or%20id=%272%27%20or%20id=%273%27
Take By Id
Description | Gets and deletes the entry from space with the provided id |
Request URL | DELETE http://localhost:8080/{Type}/{id} |
Response Schema:
{
"status":"success",
"data":{
"id":1,
"name":"First"
}
}
Examples:
curl -XDELETE http://localhost:8080/MyObject/3
See that Item3 does not exists:
curl -XGET http://localhost:8080/MyObject/?query=id=%271%27%20or%20id=%272%27%20or%20id=%273%27