HTTP-запит
Заморожений вузол, який викликає HTTPS-адресу зі списку дозволених хостів сервісу й розгалужується за відповіддю, — у версіях, опублікованих із ним.
5 хв читання
HTTP-запит робить один HTTPS-виклик до API поза Slen і кладе відповідь у виконання. Вузол заморожено, якщо сервіс не налаштовано інакше: палітра його не пропонує, а нова версія не може його містити. Версія, опублікована з ним, і далі працює, і ця сторінка каже, що вузол у ній робить.
- Вузол
- HTTP-запит Заморожений
- Тип
http_request- Категорія
- Вихід
- Порти
- Типовий
defaultпідключення обовʼязкове - Помилка
errorпідключення необовʼязкове
- Типовий
- Завершує шлях
- Ні
- Заморожений
- Більше не пропонується в палітрі. Флоу, які його вже використовують, працюють далі.
Що робить вузол
Вузол збирає один запит зі своїх налаштувань і значень виконання, робить виклик і читає відповідь. Відповідь зі статусом 2xx виходить через Типовий. Усе інше виходить через Помилка: інший статус, зокрема перенаправлення, — вузол за ним не переходить; запит, який вузол не зміг зібрати; адреса, яку сервіс відхиляє; хост, до якого вузол не достукався; відповідь, довша, ніж вузлу можна прочитати.
Адреса завжди
httpsна порту 443, а її хост — ім’я зі списку дозволених хостів сервісу: сам цей хост або його піддомен. Список один на весь сервіс, і задає його той, хто запускає сервіс. З порожнім списком вузол нічого не викликає.Перед кожним викликом вузол знову звіряє хост зі списком і відхиляє хост, ім’я якого веде до непублічної адреси. Виклик не йде через проксі.
Вузол витрачає час, а не гроші: він нічого не резервує й нічого не списує.
Коли використовувати
Нова версія не може містити цей вузол, тому ви зустрічаєте його у версії, опублікованій до того, як вузол заморозили. Чернетка, у якій він лишився, не публікується, доки вузол не прибрано, — як читати цю перевірку, каже стаття Публікація, версії та відкат.
Щоб передати в запит дані іншого API, викличте цей API зі свого застосунку й надішліть його відповідь у вході або в контексті запиту — Надіслати запит.
Налаштування
| Налаштування | Для чого воно |
|---|---|
method | Метод запиту — GET, POST, PUT, PATCH або DELETE. GET, якщо не задано. |
url | Адреса, яку викликає вузол, — https, порт 443, хост зі списку дозволених хостів сервісу. У її шляху й рядку запиту можуть стояти підстановки — шляхи в подвійних фігурних дужках, які заповнюються значеннями виконання; у хості — ні. |
headers | Заголовки, які надсилаються із запитом, — ім’я й текстове значення, не більше за 10. Заголовок з обліковими даними відхиляється. |
body_from | Шлях до значення, яке повністю надсилається тілом, як JSON. Використовується лише з POST, PUT і PATCH; без нього в запиту немає тіла. |
timeout_seconds | Скільки вузол чекає на відповідь, у секундах. Без цього ключа діє значення сервісу за замовчуванням; більше за стелю сервісу задати не можна. |
max_response_bytes | Скільки байтів відповіді читає вузол. Довша відповідь не читається. Без цього ключа діє значення сервісу за замовчуванням; більше за стелю сервісу задати не можна. |
Підстановка — це шлях у подвійних фігурних дужках, наприклад
{{input.customer_id}}: підстановки можуть стояти в шляху адреси та в її рядку запиту, але не в хості. Вузол заповнює кожну значенням за шляхом, закодованим для адреси. Число пишеться як є, аtrueіfalse— словами. Підстановка не заповнюється, якщо шлях нічого не знайшов або знайшовnull, список чи об’єкт: тоді вузол не робить виклику й виходить через Помилка.Шлях у
nodesназиває вузол, який виконується раніше за цей.Вузол просить JSON. З тілом він надсилає
Content-Type: application/json.Заголовок з обліковими даними — авторизацією, cookie, API-ключем — відхиляється: флоу зберігається як звичайний JSON, і такий заголовок тримав би секрет відкритим текстом.
Якщо сервіс не налаштовано інакше, вузол чекає на відповідь 5 секунд, але не довше за 15, і читає з неї 65 536 байтів, але не більше за 262 144. Саме з’єднання має встановитися за 3 секунди.
Порти
У вузла два порти. Типовий обов’язковий: флоу, у якому він нікуди не веде, не публікується. Помилка необов’язковий. Якщо він нікуди не веде, а виклик не вдався, виконання завершується статусом failed з кодом http_request_failed.
Вихід
Вихід — це відповідь: її статус, її тіло, якщо тіло — об’єкт або список JSON, і її текст в інших випадках.
{ "status": 200, "body": { "tier": "pro" }, "text": null, "error_code": null }Виклик, який не отримав відповіді, лишає status порожнім і каже причину в error_code:
{ "status": null, "body": null, "text": null, "error_code": "host_not_allowed" }Наступний вузол читає відповідь як nodes.<key>.output.body — тут nodes.call.output.body.tier, якщо ключ вузла — call. Повернути відповідь із джерелом Вихід вузла відповідає всім виходом.
Помилки
На кожен виклик вузол пише в трасування одну подію http_called. Подія називає метод, хост, шлях у тому вигляді, як його написав автор, — з незаповненими підстановками, — статус, час і розмір відповіді. Чим було заповнено підстановку, рядок запиту й заголовки не пишуться. Виклик, який не дав відповіді, несе reason.
[
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/customers/{{input.customer_id}}", "status": 404, "duration_ms": 182, "bytes": 61, "reason": null } },
{ "type": "http_called", "node_key": "call", "payload": { "method": null, "reason": "url_placeholder_unresolved" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": null, "reason": "body_unresolved" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": null, "reason": "url_unparseable" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": null, "duration_ms": 0, "bytes": 0, "reason": "egress_not_configured" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": null, "duration_ms": 0, "bytes": 0, "reason": "host_not_allowed" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "203.0.113.7", "path": "/v1/plans", "status": null, "duration_ms": 0, "bytes": 0, "reason": "host_is_address_literal" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": null, "duration_ms": 12, "bytes": 0, "reason": "host_unresolvable" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": null, "duration_ms": 9, "bytes": 0, "reason": "address_not_public" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": null, "duration_ms": 5004, "bytes": 0, "reason": "unreachable" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": 200, "duration_ms": 1310, "bytes": 2048, "reason": "request_failed" } },
{ "type": "http_called", "node_key": "call", "payload": { "method": "GET", "host": "api.example.com", "path": "/v1/plans", "status": 200, "duration_ms": 240, "bytes": 65537, "reason": "response_too_large" } }
]reason | Що сталося |
|---|---|
url_placeholder_unresolved | Підстановку адреси не вдалося заповнити. Нічого не викликалося |
body_unresolved | Шлях тіла нічого не знайшов. Нічого не викликалося |
url_unparseable | Адреса не читається. Нічого не викликалося |
egress_not_configured | Список дозволених хостів сервісу порожній |
host_not_allowed | Хоста більше немає в списку дозволених |
host_is_address_literal | Адреса називає IP-адресу, а не хост |
host_unresolvable | Ім’я хоста не веде до жодної адреси |
address_not_public | Ім’я хоста веде до непублічної адреси |
unreachable | З’єднання не встановилося, або відповідь не прийшла за час вузла |
request_failed | Виклик обірвався після того, як з’єднання встановилося |
response_too_large | Відповідь довша, ніж вузлу можна прочитати |
У відповіді зі статусом поза 2xx немає reason: що сталося, каже статус.
Чернетку, у якій є цей вузол, відхиляють із кодом node_type_frozen — Перевірки під час публікації. Налаштування вузла теж перевіряються, під час перевірки флоу та під час його публікації:
В API запис issues називає таку перевірку в params.detail; його code — invalid_node_config.
| Перевірка | Повідомлення в конструкторі |
|---|---|
http_needs_url | Вузлу «{node}» потрібен url. |
http_templated_host | «{node}» не може підставляти хост через шаблон. |
http_egress_not_configured | «{node}» не може викликати назовні: не налаштовано жодного вихідного хоста. |
http_host_not_allowed | Url вузла «{node}» відсутній у списку дозволених (дозволені: {hosts}). |
http_scheme_not_https | «{node}» має викликати https. |
http_port_not_allowed | «{node}» може викликати лише порт 443. |
http_url_has_credentials | Url вузла «{node}» містить облікові дані. |
http_host_is_address_literal | «{node}» має викликати імʼя хоста, а не адресу. |
http_url_unparseable | Url вузла «{node}» неможливо розібрати. |
http_url_bad_placeholder | В url вузла «{node}» є підстановка, яка не називає значення у вхідних даних, контексті або виході вузла, — виклик падав би під час кожного запуску. |
http_url_unknown_node | Url вузла «{node}» читає «{path}», але вузла «{ref}» у флоу немає. |
http_url_later_node | Url вузла «{node}» читає «{path}», але «{ref}» не виконується раніше за нього. |
http_unsupported_method | «{node}» використовує непідтримуваний метод. |
http_headers_not_map | Заголовки «{node}» мають бути набором пар «імʼя — значення». |
http_too_many_headers | «{node}» задає більше ніж {max} заголовків. |
http_header_unusable_name | У «{node}» є заголовок із недопустимим імʼям. |
http_header_forbidden | «{node}» не може задавати «{header}»: граф зберігається відкритим текстом, тому такі дані не залишаться секретом. |
http_header_needs_value | Заголовку «{header}» вузла «{node}» потрібне текстове значення. |
http_invalid_timeout | «{node}» може чекати від 1 до {max} секунд. |
http_invalid_max_bytes | «{node}» може прочитати не більше ніж {max} байт. |
http_invalid_body_from | Шлях тіла запиту «{node}» має вказувати всередину виконання. |
http_body_from_unknown_node | Тіло запиту «{node}» читається з «{path}», але вузла «{ref}» у флоу немає. |
http_body_from_later_node | Тіло запиту «{node}» читається з «{path}», але «{ref}» не виконується раніше за нього. |
Приклад
- Запит — Типовий → HTTP-запит
- HTTP-запит — Типовий → Повернути відповідь
- HTTP-запит — Помилка → Відхилити запит
Вузол викликає адресу зі своїх налаштувань із клієнтом запиту в шляху. Повернути відповідь відповідає виходом вузла. Якщо виклик не вдався, виконання йде в Відхилити запит і завершується статусом rejected з кодом, на який налаштовано цей вузол.
Див. також
Контекст виконання та шляхи — що можуть читати підстановка й шлях тіла.
Порти й розгалуження — що робить порт, який нікуди не веде.
Як побудовано флоу — усі вузли конструктора.
Зібрано з openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d