We are currently developing a new REST based interface that is more REST-like.
First approaches can be seen in the development branch (and the development downloads).
Remark: If you are using the development client and server you need to use http://<host> in the connection information. The default port is 8888 (can be changed)
In future, this interface will replace the websocket and the old REST interface.
See
for an overview about the state of the new REST interface.
Examples
The following is an example, step-by-step, of how to install a query via REST.
Example login request:
POST /services/login HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 45
Content-Type: application/json
Host: 192.168.110.31:8888
User-Agent: HTTPie/1.0.2
{
"password": "manager",
"username": "System"
}
Example response:
HTTP/1.1 200 OK
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Host: 192.168.110.31:8888
Set-Cookie: JSESSIONID=A3B9A93D65CF9812D696F1E612262CA5
User-Agent: HTTPie/1.0.2
content-encoding: gzip
content-length: 64
content-type: application/json
date: Tue, 13 Aug 2019 12:06:20 +0200
server: wso2-http-transport
{
"token": "jtds2ph0fkhkq8d4dv1fj2qhe3"
}
You need to send that token with every folowing request.
Now let's install a new query via the Rest API.
POST request to /queries. These are the fields you can use:
{
"name": "Give your new query a name",
"parser": "The name of the parser you want to use. Like PQL or OdysseusScript",
"state": "Running if you want to immediately start a query when not using OdysseusScript as your parser",
"queryText": "your query source code goes here"
}
Example request installing the first query from the nexmark example (notice the 'Authorization' header):
POST /queries HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Authorization: Bearer jtds2ph0fkhkq8d4dv1fj2qhe3
Connection: keep-alive
Content-Length: 600
Content-Type: application/json
Host: 192.168.110.31:8888
User-Agent: HTTPie/1.0.2
{
"parser": "OdysseusScript",
"queryText": "#PARSER PQL\n#RUNQUERY\nnexmark:person := ACCESS(\n\t{\n\t\tsource='nexmark:person',\n\t\twrapper='GenericPush',\n\t\ttransport='TCPClient',\n\t\tprotocol='SizeByteBuffer',\n\t\tdataHandler='Tuple',\n\t\toptions=[\n\t\t\t['host', 'localhost'],\n\t\t\t['port', '65440'],\n\t\t\t['ByteOrder', 'LittleEndian']\n\t\t],\n\t\tschema=[\n\t\t\t['timestamp', 'STARTTIMESTAMP'],\n\t\t\t['id', 'INTEGER'],\n\t\t\t['name', 'STRING'],\n\t\t\t['email', 'STRING'],\n\t\t\t['creditcard', 'STRING'],\n\t\t\t['city', 'STRING'],\n\t\t\t['state', 'STRING']\n\t\t]\n\t}\n)\n\n"
}
Example response:
HTTP/1.1 200 OK
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Authorization: Bearer jtds2ph0fkhkq8d4dv1fj2qhe3
Host: 192.168.110.31:8888
Set-Cookie: JSESSIONID=BF6F8590C617FD6CE25DD30CA2670CB2
User-Agent: HTTPie/1.0.2
content-encoding: gzip
content-length: 28
content-type: application/json
date: Tue, 13 Aug 2019 12:53:31 +0200
server: wso2-http-transport
[]
Now check if the nexmark source has been added, by GET requesting /datastreams:
GET /datastreams HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: Bearer jtds2ph0fkhkq8d4dv1fj2qhe3
Connection: keep-alive
Host: 192.168.110.31:8888
User-Agent: HTTPie/1.0.2
Example response:
HTTP/1.1 200 OK
Accept: */*
Accept-Encoding: gzip, deflate
Authorization: Bearer jtds2ph0fkhkq8d4dv1fj2qhe3
Host: 192.168.110.31:8888
Set-Cookie: JSESSIONID=DF701C0AEAC5470508C823579A6C7BD8
User-Agent: HTTPie/1.0.2
content-encoding: gzip
content-length: 321
content-type: application/json
date: Tue, 13 Aug 2019 13:03:04 +0200
server: wso2-http-transport
[
{
"name": "nexmark:person",
"owner": "System",
"schema": {
"attributes": [
{
"attributename": "timestamp",
"datatype": {
"type": "BASE",
"uri": "StartTimestamp"
},
"sourcename": "nexmark:person"
},
{
"attributename": "id",
"datatype": {
"type": "BASE",
"uri": "Integer"
},
"sourcename": "nexmark:person"
},
{
"attributename": "name",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "email",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "creditcard",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "city",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "state",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
}
],
"metaschema": [
{
"attributes": [
{
"attributename": "start",
"datatype": {
"type": "BASE",
"uri": "Timestamp"
},
"sourcename": "TimeInterval"
},
{
"attributename": "end",
"datatype": {
"type": "BASE",
"uri": "Timestamp"
},
"sourcename": "TimeInterval"
}
],
"metaattributeClass": "de.uniol.inf.is.odysseus.core.metadata.ITimeInterval",
"typeClass": "de.uniol.inf.is.odysseus.core.collection.Tuple",
"uri": "TimeInterval"
}
],
"typeClass": "de.uniol.inf.is.odysseus.core.collection.Tuple",
"uri": "nexmark:person"
},
"type": "source"
},
{
"name": "nexmark:person",
"owner": "System",
"schema": {
"attributes": [
{
"attributename": "timestamp",
"datatype": {
"type": "BASE",
"uri": "StartTimestamp"
},
"sourcename": "nexmark:person"
},
{
"attributename": "id",
"datatype": {
"type": "BASE",
"uri": "Integer"
},
"sourcename": "nexmark:person"
},
{
"attributename": "name",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "email",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "creditcard",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "city",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
},
{
"attributename": "state",
"datatype": {
"type": "BASE",
"uri": "String"
},
"sourcename": "nexmark:person"
}
],
"metaschema": [
{
"attributes": [
{
"attributename": "start",
"datatype": {
"type": "BASE",
"uri": "Timestamp"
},
"sourcename": "TimeInterval"
},
{
"attributename": "end",
"datatype": {
"type": "BASE",
"uri": "Timestamp"
},
"sourcename": "TimeInterval"
}
],
"metaattributeClass": "de.uniol.inf.is.odysseus.core.metadata.ITimeInterval",
"typeClass": "de.uniol.inf.is.odysseus.core.collection.Tuple",
"uri": "TimeInterval"
}
],
"typeClass": "de.uniol.inf.is.odysseus.core.collection.Tuple",
"uri": "nexmark:person"
},
"type": "access"
}
]