ColdFusionからREST APIにJSON形式でデータを渡す例

ColdFusionから外部のRESTAPIを呼び出すには<cfhttp>タグを使用します。その際にContent-Typeの指定や必須のパラメーターがある場合は、<cfhttpparam>タグを使用します。

例えば、RESTAPIに対して、POSTでJSONデータを送る必要がある場合などは、下記のstackoverflowの質問に対する投稿の最初の Answer が参考になります。


https://stackoverflow.com/questions/8932973/how-to-post-json-data-to-remote-api-using-coldfusion-cfhttp

<cfhttp>でmethod="POST"を指定し、<cfhttpparam>で name="Content-Type" を指定して、application/jsonデータを渡す処理の例です。

【抜粋】
<cfset stFields = {
     "fields" = {
         "first_name" = "myFirstName"
      },
      "email" = "email@domain.com"
}>

<cfhttp url="http://api.url.com" method="post" result="httpResp" timeout="60">
     <cfhttpparam type="header" name="Content-Type" value="application/json" />
     <cfhttpparam type="body" value="#serializeJSON(stFields)#">
</cfhttp>

この例では、呼び出した結果がhttpResp.FileContentに戻されます。
(<cfdump var="#httpResp#">で確認頂くのも有効かと存じます)


尚、JSONとして渡す値に日本語が含まれていて、それが文字化けをする場合などは、Content-Type の値にcharsetを追加するか、値を事前にURLEncodedFormat関数を使用してURLエンコードする
などが必要な場合があります。

<cfhttpparam type="header" name="Content-Type"
                           value="application/json; charset=UTF-8" >

また、JSON形式のパラメーターを渡す際に「項目の順序」が決まっている場合は、
構造体の指定の際に順序を維持する設定を行います。上記のstFields内の入れ子となっているfieldsには一個の項目しかありませんが、例えばそこに複数の項目を指定し、順序を維持するには下記のように記述します。

<cfset stFields = {
     "fields" = [
         "first_name" = "myFirstName",
         "last_name" = "myLastName",
         "department" = "myDept",
         "group" = "myGroup",
         "priority": 0,
         "flag1": true
      ],
      "email" = "email@domain.com"
}>

※項目を{}で囲むと通常の構造体(順番は任意)となり、[]で囲むと順序を維持する構造体の指定になります

 


 


記事公開日:2022年03月30日
最終更新日:2022年03月30日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.