記事
· 2024年12月18日 2m read

HTTPアウトバウンドアダプタを使用して、クエリパラメータとボディを両方送付する方法

開発者の皆さん、こんにちは。

試していたWebAPIでは、POST要求時クエリパラメータとボディの両方を送る必要がありましたので、HTTPアウトバウンドアダプタが提供するメソッド:Post()/PostFormDataArray()/PostURL() 辺りをドキュメントで確認していたのですが、残念ながら両方を渡せるように作成された丁度良いメソッドがありませんでした。

ドキュメント:HTTPアウトバウンドアダプタが提供するメソッド

では、どのように送ったかというと、SendFormDataArray()の第3引数を利用して両方の情報を送付してみました。

具体的には、SendFormDataArray()の第2引数にはHTTPメソッド(GET、POST、PUT、DELETEなど)第3引数に%Net.HttpRequestのインスタンスが渡せる仕様になっていましたので、クエリパラメータとボディを%Net.HttpRequestのインスタンスに設定し、第3引数に指定して実行する方法をとりました。

  set status=..Adapter.SendFormDataArray(.pHttpResponse,"POST",httprequest)
  if $$$ISERR(status) {
    return status
  }

変数httprequestの中身は以下のように作成しています

  set httprequest=##class(%Net.HttpRequest).%New()
  set httprequest.ContentType="application/json"
  set httprequest.ContentCharset="utf-8"
  //ボディの設定
  //..JTemplateプロパティにJSONダイナミックオブジェクトが設定されていると仮定
  do ..JTemplate.%ToJSON(httprequest.EntityBody)
  
  // QueryParameterの設定(..QueryParamプロパティにクエリパラメータが設定されていると仮定)
  for cn=1:1:$length(..QueryParam,"&") {
    set name=$piece($piece(..QueryParam,"&",cn),"=",1)
    set val=$piece($piece(..QueryParam,"&",cn),"=",2)
    do httprequest.SetParam(name,val)
  }

例では、クエリパラメータとボディを設定してますが、HTTP要求のヘッダに情報を追加したいときにも同様の方法が利用できます。
(HTTPヘッダを追加するには、SetHeader(キー,値)が利用できます。)

ヘッダ追加の参考情報:HTTP要求時の認証の指定

 

HTTPアウトバウンドアダプタを使用せず、シンプルにObjectScriptでHTTP要求を行う方法については以下ObjectScriptクックブックの例をご参照ください。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください