This article introduces the minimum procedure of using Ultipa RESTful API proxy.
Prerequisites
- a command line terminal that is compatible with your operating system:
- Linux or MacOS: Bash, Zsh, TCSH
- Windows: PowerShell
 
- a version of Ultipa RESTful API compatible with your operating system
Start API Service
- Show help
./ultipa_restful_api.exe --help
- Show current version
./ultipa_restful_api.exe --version
- Start API service
./ultipa_restful_api.exe --hosts 192.168.1.85:61095,192.168.1.87:61095,192.168.1.88:61095 -u employee -p joaGsdf -w 3
Note: -hosts, -u and -p are equivalent to --hosts, --username and --password

Other Parameters:
| Parameter | Description | Default Value | 
|---|---|---|
| -l --listen | The network and initial port to listen | 0.0.0.0:7001 | 
| -w --workers | The number of backend workers (threads), e.g.: 5 works will be the default 7001-7005 | 0 | 
| -g --graph | The graphset name | 'default' | 
| -b --boost | Use SimpleCache | (Do not use cache) | 
| -c --consistency | Use leader to guarantee Consistency Read | (Do not use leader) | 
| -batch --batch | The batch size (number of records) of /insert/nodesand/insert/edges | 5000 | 
| -d --duration | The batch insert waiting time (milliseconds) | 1000 | 
| -hb --heartbeat | The heartbeat seconds for all instances | 5 | 
| -sd --schema_cache_duration | The heartbeat milliseconds when acquiring schema list during insert | 5000 | 
API Basic Info
- Request type: POST
- Request URL:
- Linux: the Ultipa server that the current API service connects, e.g. 'http://192.168.1.88'
- Windows/MacOS: the local address of the current API service, 'http://127.0.0.1'
 
- Request port: the valid ports set via -wand-lwhen starting the API service
- Body parameter type: JSON, FORM
Login Ultipa Service
- Request URL
.../login
- Request Example
{
    "username": "employee",
    "password": "joaGsdf"
}
- Response: the token value after login
The rest of API interfaces should all have this token value carried in Cookie in the Headers,
ultipa=<token_value>, with Content_Typeapplication/json.
Send UQL
- Request URL
.../uql
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| uql | string | yes | UQL statement | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
- Request Example
{
    "uql": "find().nodes({name == \"abc\"}) return count(nodes)",
    "graph": "test_text"
}
- Success Response
{
    "Data": [
        {
            "Name": "count(nodes)",
            "PropertyType": 4,
            "Rows": [
                2
            ]
        }
    ],
    "Graph": "test_text",
    "Statistic": {
        "NodeAffected": 0,
        "EdgeAffected": 0,
        "TotalCost": 0,
        "EngineCost": 0
    },
    "Status": {
        "Message": "",
        "Code": 0
    }
}
Send UQL and limit returns
- Request URL
.../uql/stream
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| uql | string | yes | UQL statement | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
| package_num | int | no | The number of packages to return (default value: 0, query but do not return) | 
- Request Example
{
    "uql": "find().nodes({name == \"abc\"}) return nodes",
    "graph": "test_text",
    "package_num": 1
}
- Success Response
Insert Nodes
- Request URL
.../insert/nodes
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| nodes | [{},{},...] (JSON), map (FORM) | yes | Node properties, must include all custom properties, do not support _uuid; in tools such as Postman, set multiplenodeswith type{}as FORM parameter | 
| schema | string | yes | Node schema | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
| sync | bool | no | If return the status of request (default value: false). A 'true' value will induce batch waiting time	( -d,--duration) when the data volume is less than batch size (-b,--batch), which	will affect the insert performance | 
- Request Example
{
    "nodes": [{"name":"Jason","_id":"USER001"},{"name":"Alice"}],
    "schema": "default",
    "graph": "test_text",
    "sync": true
}
- Success Response
{
    "Msg": "Insert Nodes Success: [{\"_id\":\"USER001\",\"name\":\"Jason\"},{\"name\":\"Alice\"}]"
}
Insert Edges
- Request URL
.../insert/edges
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| edges | [{},{},...] (JSON), map (FORM) | yes | Edge properties, must carry _from&_toand all custom properties, do not support_uuid,_from_uuidor_to_uuid; in tools such as Postman, set multipleedgeswith type{}as FORM parameter | 
| schema | string | yes | Edge schema | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
| sync | bool | no | If return the status of request (default value: false). A 'true' value will induce batch waiting time	( -d,--duration) when the data volume is less than batch size (-b,--batch), which	will affect the insert performance | 
- Request Example
{
    "edges": [{"year":"1998", "_from":"USER001", "_to":"USER002"}],
    "schema": "default",
    "graph": "test_text",
    "sync": true
}
- Success Response
{
    "Msg": "Insert Edges Success: [{\"_from\":\"USER001\",\"_to\":\"USER002\",\"year\":\"1998\"}]"
}
Update Nodes
Update nodes based on _id or _uuid.
- Request URL
.../update/nodes
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| nodes | [{},{},...] (JSON), map (FORM) | yes | Node properties, must include _idor_uuid, if both are included then ignore_uuid; in tools such as Postman, set multiplenodeswith type{}as FORM parameter | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
- Request Example
{
    "nodes": [{"age":"35", "_id":"USER001"}, {"name":"John", "_id": "USER002"}],
    "graph": "test_text"
}
- Success Response
{
    "Msg": "Update nodes on test_text",
    "SuccessCount": 2
}
Update Edges
Update edges based on _from&_to or _uuid.
- Request URL
.../update/edges
- Request Parameter
| Parameter | Type | Required | Description | 
|---|---|---|---|
| edges | [{},{},...] (JSON), map (FORM) | yes | Edge properties, must carry _from&_toor_uuid, if both are included then ignore_uuid; in tools such as Postman, set multipleedgeswith type{}as FORM parameter | 
| graph | string | no | The graphset name (default value: the graphset designated when starting the API service) | 
- Request Example
{
    "edges": [{"_uuid":"1","_from_uuid":"2", "age":"55"}],
    "graph": "test_text"
}
- Success Response
{
    "Msg": "Update edges on test_text",
    "SuccessCount": 1
}
 
        