HTTPメソッド

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

このセクションでは、WorkatoがサポートするさまざまなHTTPメソッドについて説明します。 そのほとんどについて、すでに理解している必要があります。 また、HTTP呼び出しのレスポンス後処理を行い、コネクターコードで後から使いやすい形式にデータを操作する方法についても説明します。

HTTP動詞メソッド

HTTP動詞メソッド
GETget()get("url", parameters)
POSTpost()post("url", payload)
PUTput()put("url", payload)
PATCHpatch()patch("url", payload)
DELETEdelete()delete("url", parameters)
OPTIONSoptions()options("url", parameters)

リクエストの作成

各HTTP動詞メソッドには、最初の引数としてurl文字列を指定する必要があります。 2番目の引数(任意)は、2つの形式で指定できます。

まず、inputは単一のハッシュとして渡すことができます。 このハッシュは、次のようにexecute引数またはpoll引数のinput引数にすることができます。

ruby
execute: lambda do |connection, input|
  get("https://www.some_api_endpoint.com/api", input)
end

ハッシュは、次のように事前に作成することもできます。

ruby
execute: lambda do |connection, input|
  params = {
    "id" => input["id"]
  }

  get("https://www.some_api_endpoint.com/api", params)
end

Workato SDKフレームワークはこのハッシュ値を処理し、対応するデータ形式に変換します。 GET、DELETE、OPTIONSリクエストの場合、ハッシュデータはURLクエリパラメーターに変換されます。

POST、PUT、およびPATCHの場合、ペイロードは指定した形式でリクエスト本文として作成されます。 さまざまなデータ形式の使用方法の詳細については、データ形式を参照してください。

リクエストデータを渡すもう1つの方法は、一連のキー/値ペアとして渡すことです。

ruby
execute: lambda do |connection, input|
  post("https://www.some_api_endpoint.com/api", name: input["name"], email: input["email"])
end

最初の引数より後のすべての引数は、リクエストデータに変換されます。 この場合、デフォルトのデータ形式はJSONであるため、次のリクエスト本文が作成されます。

json
{
  "name": "Ee Shan",
  "email": "[email protected]"
}

GETリクエストの場合、次のURLパラメーターが作成されます。

ruby
execute: lambda do |connection, input|
  get("https://www.some_api_endpoint.com/api", name: input["name"], email: input["email"])
end

完全なリクエストURL文字列は次のようになります。

https://www.some_api_endpoint.com/api?name%3DEe%20Shan%26email%3Deeshan%40workato.com

認証はリクエストURLに追加されます

定義したすべての認証は、リクエストURLに追加されます。 前の例では、認証が不要であることを前提としています。 認証は、connectionオブジェクトで定義されたapplyブロックを通じて適用されます。

リクエストを作成するための追加ヘルパーメソッド

最初のHTTP動詞メソッドの後にチェーンすることで、Workatoでさまざまな他のヘルパーメソッドを使用できます。 役立つ可能性のあるメソッドを次に示します。

payload

このメソッドを使用すると、リクエストにペイロードを追加でき、上記で説明したものと同じ構文に従います。

ruby
execute: lambda do |connection, input|
  post("https://www.some_api_endpoint.com/api")
    .payload(name: input["name"], email: input["email"])
end

postリクエストの結果として生成されるペイロード:

json
{
  "name": "Ee Shan",
  "email": "[email protected]"
}

params

このメソッドを使用すると、リクエストにクエリパラメーターを追加でき、上記で説明したものと同じ構文に従います。 これらの値はURLエンコードされます。

ruby
execute: lambda do |connection, input|
  get("https://www.some_api_endpoint.com/api")
    .params(name: input["name"], email: input["email"])
end
https://www.some_api_endpoint.com/api?name%3DEe%20Shan%26email%3Deeshan%40workato.com

headers

このメソッドを使用すると、リクエストにヘッダーを追加でき、上記で説明したものと同じ構文に従います。 ここで定義されたヘッダーは大文字と小文字を区別しません。

ruby
execute: lambda do |connection, input|
  get("https://www.some_api_endpoint.com/api")
    .headers(Authorization: "Bearer HTB674HJK1")
end

TIP

大文字と小文字を区別するヘッダーはRFCから逸脱していますが、HTTPメソッドではheadersの代わりにcase_sensitive_headersメソッドを使用して指定できます。

tls_client_cert

このメソッドを使用すると、SSL証明書、キー、パスフレーズ、および中間証明書を追加できます。

ruby
execute: lambda do |connection, input|
  get("https://www.some_api_endpoint.com/api")
    .tls_client_cert(
      certificate: connection['ssl_client_cert'],
      key: connection['ssl_client_key'],
      passphrase: connection['ssl_key_passphrase'],
      intermediates: connection['ssl_client_intermediate_cert']
    )
end

レスポンス後処理

デフォルトのレスポンスデータ

デフォルトでは、すべてのHTTP動詞メソッドはリクエストのレスポンス本文を返します。 たとえば、次のリクエストはOktaでユーザーを作成します。

ruby
execute: lambda do |connection, input|
  response = post("/api/v1/users", profile: { login: input["email"], displayName: input["name"] })
end

response変数は、次のようなハッシュになります。

ruby
{
  "id": "00ub0oNGTSWTBKOLGLNR",
  "status": "STAGED",
  "created": "2018-03-13T21:36:25.344Z",
  "activated": null,
  "statusChanged": null,
  "lastLogin": null,
  "lastUpdated": "22018-03-13T21:36:25.344Z",
  "passwordChanged": null,
  "profile": {
    "firstName": "Ee Shan",
    "lastName": "Sim",
    "email": "[email protected]",
    "login": "[email protected]",
    "mobilePhone": null
  },
  "credentials": {
    "provider": {
      "type": "OKTA",
      "name": "OKTA"
    }
  }
}

レスポンス処理

after_responseは、HTTPレスポンスのさまざまな部分を処理するためにHTTP動詞メソッドにチェーンできる任意のブロックです。 再びOkta APIを使用して、例を見てみましょう。

すべてのユーザーを一覧表示エンドポイントにリクエストを送信すると、切り詰められたレスポンスは次のようになります。

http
HTTP/1.1 200 OK
Content-Type: application/json
Link: <https://workatotest.okta.com/api/v1/users?limit=200>; rel="self"

[
  {
    "id": "00utti9t3j1xO9jOm2p6",
    "status": "ACTIVE",
    "created": "2018-03-15T08:23:05.000Z",
    "activated": null,
    "statusChanged": "2018-03-15T08:39:39.000Z",
    "lastLogin": "2018-03-15T08:39:40.000Z",
    "lastUpdated": "2018-03-15T08:39:40.000Z",
    "passwordChanged": "2018-03-15T08:39:39.000Z",
    "profile": {},
    "credentials": {},
    "_links": {}
  }
]

このレスポンスは3つの部分に分けることができます。 HTTPレスポンスのコードヘッダー、および本文です。

after_responseを使用して、HTTPレスポンスのこれらすべての部分を処理できます。 すべてのユーザーを一覧表示し、ヘッダーから既存のページへのリンクを含むレスポンス全体を出力するアクションがあるとします。

ruby
execute: lambda do |connection, input|
  get("/api/v1/users").after_response do |code, body, headers|
    {
      code: code,
      next_link: headers["link"],
      users: body
    }
  end
end

このアクションの結果出力には、レスポンスの3つの部分がすべて含まれます。

json
{
  "code": 200,
  "next_link": "<https://workatotest.okta.com/api/v1/users?limit=200>; rel=\"self\"",
  "users": [
    {
      "id": "00utti9t3j1xO9jOm2p6",
      "status": "ACTIVE",
      "created": "2018-03-15T08:23:05.000Z",
      "activated": null,
      "statusChanged": "2018-03-15T08:39:39.000Z",
      "lastLogin": "2018-03-15T08:39:40.000Z",
      "lastUpdated": "2018-03-15T08:39:40.000Z",
      "passwordChanged": "2018-03-15T08:39:39.000Z",
      "profile": {},
      "credentials": {},
      "_links": {}
    }
  ]
}

テスト

カスタムコネクターの開発中に、これを簡単に確認できます。 リクエスト後処理を含めると、出力タブに期待されるJSONオブジェクトが反映されるはずです。

レスポンスコードとヘッダー値を含む出力レスポンスコードとヘッダー値を含む出力

Last updated: