Skip to content

HTTPアクション

httpアクションはHTTP/HTTPSリクエストを実行し、テストと検証のための詳細なレスポンス情報を提供します。

基本的な構文

yaml
steps:
- name: API Request
  uses: http
  with:
    url: https://api.example.com
    get: /endpoint
  test: res.code == 200

パラメータ

url (必須)

型: String
説明: リクエストを送信するURL
サポート: テンプレート式

yaml
vars:
  api_base_url: "{{API_BASE_URL ?? 'https://api.example.com'}}"

with:
  url: "https://api.example.com/users"
  url: "{{vars.api_base_url}}/v1/health"
  url: "https://api.example.com/users/{{outputs.auth.user_id}}"

method: path (必須)

型: String
デフォルト: GET
フィールド名: get, post, put, patch, delete, head, options

yaml
with:
  url: https://api.example.com
  post: /users

headers (オプション)

型: Object
説明: リクエストに含めるHTTPヘッダー
サポート: 値でのテンプレート式

yaml
vars:
  api_token: "{{API_TOKEN}}"

with:
  url: "https://api.example.com/users"
  headers:
    Authorization: "Bearer {{vars.api_token}}"
    Content-Type: "application/json"
    User-Agent: "Probe Monitor v1.0"
    X-Request-ID: "{{unixtime()}}"

body (オプション)

型: String
説明: リクエストボディコンテンツ
サポート: テンプレート式と複数行文字列

yaml
# JSONボディ
vars:
  user_name: "{{USER_NAME}}"
  user_email: "{{USER_EMAIL}}"

with:
  url: "https://api.example.com/users"
  method: "POST"
  headers:
    Content-Type: "application/json"
  body: |
    {
      "name": "{{vars.user_name}}",
      "email": "{{vars.user_email}}",
      "active": true
    }

# フォームデータ
with:
  url: "https://api.example.com/form"
  method: "POST"
  headers:
    Content-Type: "application/x-www-form-urlencoded"
  body: "name={{vars.user_name}}&email={{vars.user_email}}"

# テンプレート式
with:
  url: "https://api.example.com/users"
  method: "PUT"
  body: "{{outputs.user-data.json | tojson}}"

timeout (オプション)

型: Duration
デフォルト: defaults.http.timeoutを継承、または30s
説明: リクエストタイムアウト

yaml
with:
  url: "https://api.example.com/slow-endpoint"
  timeout: "60s"

follow_redirects (オプション)

型: Boolean
デフォルト: defaults.http.follow_redirectsを継承、またはtrue
説明: HTTPリダイレクトに従うかどうか

yaml
with:
  url: "https://example.com/redirect"
  follow_redirects: false

verify_ssl (オプション)

型: Boolean
デフォルト: defaults.http.verify_sslを継承、またはtrue
説明: SSL証明書を検証するかどうか

yaml
with:
  url: "https://self-signed.example.com/api"
  verify_ssl: false

max_redirects (オプション)

型: Integer
デフォルト: defaults.http.max_redirectsを継承、または10
説明: 従うリダイレクトの最大数

yaml
with:
  url: "https://example.com/many-redirects"
  max_redirects: 3

レスポンスオブジェクト

HTTPアクションは次のプロパティを持つresオブジェクトを提供します:

プロパティ説明
codeIntegerHTTPステータスコード (200, 404, 500など)
timeIntegerレスポンス時間(ミリ秒)
body_sizeIntegerレスポンスボディサイズ(バイト)
headersObjectレスポンスヘッダーのキー値ペア
body.jsonObject解析されたJSONレスポンス(有効なJSONの場合のみ)
body.textStringレスポンスボディのテキスト

レスポンス例

yaml
steps:
  - name: "API Test"
    id: api-test
    uses: http
    with:
      url: "https://jsonplaceholder.typicode.com/users/1"
    test: |
      res.code == 200 &&
      res.time < 2000 &&
      res.body.json.id == 1 &&
      res.body.json.name != ""
    outputs:
      user_id: res.body.json.id
      user_name: res.body.json.name
      response_time: res.time
      content_type: res.headers["Content-Type"]

一般的なHTTPパターン

認証

yaml
vars:
  api_url: "{{API_URL}}"
  access_token: "{{ACCESS_TOKEN}}"
  username: "{{USERNAME}}"
  password: "{{PASSWORD}}"
  api_key: "{{API_KEY}}"

# Bearerトークン
steps:
  - name: "Authenticated Request"
    uses: http
    with:
      url: "{{vars.api_url}}/protected"
      headers:
        Authorization: "Bearer {{vars.access_token}}"

# Basic認証
  - name: "Basic Auth Request"
    uses: http
    with:
      url: "{{vars.api_url}}/basic"
      headers:
        Authorization: "Basic {{encode_base64(vars.username + ':' + vars.password)}}"

# APIキー
  - name: "API Key Request"
    uses: http
    with:
      url: "{{vars.api_url}}/data"
      headers:
        X-API-Key: "{{vars.api_key}}"

コンテンツタイプ

yaml
vars:
  api_url: "{{API_URL}}"
  graphql_url: "{{GRAPHQL_URL}}"
  user_id: "{{USER_ID}}"

# JSON API
steps:
  - name: "JSON Request"
    uses: http
    with:
      url: "{{vars.api_url}}/json"
      method: "POST"
      headers:
        Content-Type: "application/json"
      body: |
        {
          "key": "value",
          "timestamp": "{{unixtime()}}"
        }

# XMLリクエスト
  - name: "XML Request"
    uses: http
    with:
      url: "{{vars.api_url}}/xml"
      method: "POST"
      headers:
        Content-Type: "application/xml"
      body: |
        <?xml version="1.0"?>
        <data>
          <key>value</key>
        </data>

# GraphQLクエリ
  - name: "GraphQL Query"
    uses: http
    with:
      url: "{{vars.graphql_url}}"
      method: "POST"
      headers:
        Content-Type: "application/json"
      body: |
        {
          "query": "query { user(id: \"{{vars.user_id}}\") { name email } }"
        }

ファイルアップロード

yaml
vars:
  api_url: "{{API_URL}}"

steps:
  - name: "File Upload"
    uses: http
    with:
      url: "{{vars.api_url}}/upload"
      method: "POST"
      headers:
        Content-Type: "multipart/form-data"
      body: |
        --boundary123
        Content-Disposition: form-data; name="file"; filename="test.txt"
        Content-Type: text/plain

        File content here
        --boundary123--

Released under the MIT License.