uri
Interacts with HTTP and HTTPS web services.
Input parameters
parameter | required | default | choices | comment |
---|---|---|---|---|
url | YES | HTTP or HTTPS URL in the form (http | ||
headers | NO | E.g: Content-Type: 'application/json' | Add custom HTTP headers to a request in the format of a YAML hash | |
data | NO | E.g: "{\"title\": \"foo\"}" | JSON data to send to the server. You must escape quotes in the YAML file. | |
data_from_file | NO | E.g: /path/to/my/file.json | JSON data loaded from a file. | |
method | NO | GET | GET, POST, DELETE, PUT, HEAD, PATCH, OPTIONS | The HTTP method of the request or response. It MUST be uppercase. |
user | NO | username for the basic authentication. | ||
password | NO | passwordfor the basic authentication. | ||
timeout | NO | The socket level timeout in seconds. Must be an integer without quotes |
Returned values
Name | Description | Type | sample |
---|---|---|---|
status_code | Numeric, HTTP status code that signifies success of the request. | int | 200 |
content | The body content of the server answer. May be JSON serialized and usable in a template | string | {"title": "foo", "body": "bar", "userId": 1} |
response_header | Response header from the server. | dict | {'Date': 'Sat, 19 Nov 2016 11:17:56 GMT', 'Content-Length': '192', 'Content-Type': 'text/html'} |
Synapses example
Simple call to a server. The default method is GET
- name: "test-get-url"
signals:
- order: "test-get-url"
neurons:
- uri:
url: "http://host.domain/get/1"
A simple call with authentication
- name: "test-get-url-with-auth"
signals:
- order: "test-get-url-with-auth"
neurons:
- uri:
url: "http://host.domain/get/1"
user: "admin"
password: "secret"
A simple post with data inside the url
- name: "test-post-url-with-auth"
signals:
- order: "test-post-url-with-data"
neurons:
- uri:
url: "http://host.domain/login?email=user@host.domain&password=foobar123"
method: POST
A post with json data. Note that we need to escape quotes from the payload.
- name: "test-post-url"
signals:
- order: "test-post-url"
neurons:
- uri:
url: "http://host.domain/posts"
method: POST
headers:
Content-Type: 'application/json'
data: "{\"id\": 1,\"title\": \"foo\", \"body\": \"bar\", \"userId\": 1}"
A post with json data imported from a file and a custom header.
- name: "test-post-url"
signals:
- order: "test-post-url"
neurons:
- uri:
url: "http://host.domain/posts"
method: POST
headers:
Content-Type: 'application/json'
user-agent: 'my-app/0.0.1'
data_from_file: "/path/to/my/payload.json"
And the payload.json
would be (note that we don't need to escape any character):
{"title": "foo", "body": "bar", "userId": 1}
A simple call to a deletion. Here we also ask Kalliope to tell use if request was a success through a template, depending on the returned status code.
- name: "test-delete-url"
signals:
- order: "test-delete-url"
neurons:
- uri:
url: "http://host.domain/posts/1"
method: DELETE
say_template:
- "{% if status_code==201 %}delete complete{% else %}fail to delete{% endif %}"
Call to an URL to get a resource and make kalliope speaking out loud a value of returned content. Here, we ask the server to return us the user with ID number 42. We know that the server will return a dict like the following
{
"id": 42,
"name": "Leanne Graham",
"username": "Bret",
"email": "Sincere@april.biz",
"phone": "1-770-736-8031 x56442",
"website": "hildegard.org",
"company": {
"name": "Romaguera-Crona",
"catchPhrase": "Multi-layered client-server neural-net",
"bs": "harness real-time e-markets"
}
}
Here is the synapse we would use to make Kalliope speak out loud the name of the user and the name of his company
- name: "test-get-url-with-template"
signals:
- order: "test-get-url-with-template"
neurons:
- uri:
url: "http://host.domain/users/42"
say_template:
- "The user name is {{ content.name }} and his company's name is {{ content.company.name }}"
Templates example
The following template will make kalliope read the content of the received json variable "title" from the remote server.
The title is {{ content.title }}
The following template will make Kalliope say if the request has been made with success or not depending on the returned status code.
{% if status_code==200 %}request complete{% else %}request failled{% endif %}
Notes
When the parameter
data
is used, you need to escape character that could be interpreted by the YAML syntax.