Wolkenkit REST API for sending commands returns “M

2019-07-24 19:28发布

问题:

I am trying to use the REST API of Wolkenkit to send a command. I did not find any information in the docs, so i tried to find what is necessary by going through the source code and unit tests.

I am using HTTPie to do requests from the cli:

> http --verbose post https://local.wolkenkit.io:3500/v1/command id=12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000 context:='{"name": "mycontext"}' aggregate:='{"name": "label", "id": "26c01e1f-abb8-42fa-82cf-60ca4a6bfbfa"}' name=create data:='{"label": "third"}' custom:='{}' metadata:='{"timestamp": "1504167240279", "correlationId": "12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000", "causationId": "12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000"}'

POST /v1/command HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 405
Content-Type: application/json
Host: local.wolkenkit.io:3500
User-Agent: HTTPie/0.9.9

{
    "aggregate": {
        "id": "26c01e1f-abb8-42fa-82cf-60ca4a6bfbfa",
        "name": "label"
    },
    "context": {
        "name": "mycontext"
    },
    "custom": {},
    "data": {
        "label": "third"
    },
    "id": "12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000",
    "metadata": {
        "causationId": "12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000",
        "correlationId": "12bf5b37-e0b8-42e0-8dcf-dc8c4aefc000",
        "timestamp": "1504167240279"
    },
    "name": "create"
}

HTTP/1.1 400 Bad Request
Access-Control-Allow-Origin: *
Cache-Control: no-store, no-cache, must-revalidate, proxy-revalidate
Connection: keep-alive
Content-Length: 18
Content-Type: text/html; charset=utf-8
Date: Wed, 30 Aug 2017 20:57:27 GMT
ETag: W/"12-2BIyYXjsDfNWq9+GqVAfSCeA8D4"
Expires: 0
Pragma: no-cache
Surrogate-Control: no-store
X-FRAME-OPTIONS: DENY
X-Powered-By: Express
X-XSS-Protection: 1; mode=block

Malformed command.

I used wolkenkit console to verify that the aggregate.id is correct. The command.id is just a random uuid().

What did i wrong to get Malformed command as response?

回答1:

Disclaimer: I am one of the developers of wolkenkit.

Internally, the commands are built using the commands-events module, which also is being used for verifying incoming commands.

The actual error comes from tailwind which wolkenkit uses under the hood as base for an application that uses commands and events. Internally, this code calls the isWellformed function of commands-events, which in turn checks the schema of the command.

From what I see everything seems to be fine, except that metadata.timestamp should be a number, not a string. I think that if you change this, then wolkenkit will accept your command happily.