カスタム処理を利用して、APIのメイン処理に渡すリクエスト値を書き換える

カスタム処理とAPI Pre-processingを使用して、APIのメイン処理に渡すリクエスト値を書き換える方法を紹介します。

カスタム処理を利用することで、下記のような対応ができます。

  • ユーザーの入力値を特定の形式に変換した上でAPIに渡す
  • 追加の固定値をAPIに渡す

このチュートリアルでは、フォーム送信APIへのリクエスト時にユーザーが入力した全角数字を半角数字に変換する処理を実装します。

カスタム処理を作成する

リクエスト書き換え処理を記述するためのカスタム処理を用意します。

カスタム処理の一覧画面を表示する

サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。

Image from Gyazo

カスタム処理追加画面を表示する

カスタム処理一覧画面の右上の [追加] をクリックします。

Image from Gyazo

タイトル・カテゴリを入力する

カスタム処理のタイトルとカテゴリを入力します。
今回は下記のように入力しました。

  • タイトル:/rcms-api/2/inquiry/8/messages/send
  • カテゴリ:Pre-processing

同一カテゴリ内にタイトルが重複する処理を作成できないため、実装対象のエンドポイント名など、他と重複しないタイトルを命名してください。

Image from Gyazo

カスタム処理を保存する

一旦ここまでで保存します。 画面下部までスクロールし、[追加する] ボタンをクリックして保存します。

Image from Gyazo

リクエスト値の書き換え処理を記述する

次に、リクエスト値の書き換え処理を記述します。

カスタム処理編集画面を表示する

サイドメニューより[オペレーション]を選択し、[カスタム処理]をクリックします。

Image from Gyazo

先ほど追加したカスタム処理のタイトルをクリックします。

Image from Gyazo

編集画面内のエディタにリクエスト値の書き換え処理を記述していきます。

Image from Gyazo

リクエスト変数を初期化する

リクエスト値を格納するための$request変数を初期化します。

変数名説明
$requestarray連想配列

エディタに下記記入します。

{* $request = [] *}
{assign_array var="request" values=""}

Image from Gyazo

リクエスト値の書き換え処理を実装する

ユーザーの入力値を変換し、$request変数に変換後の値を代入します。
入力値を参照するためには、下記のいずれかの変数を利用します。

変数名説明
$smarty.getクエリパラメータ
$smarty.postJSON body
$smarty.requestクエリパラメータ & JSON body

入力値の変換には、mb_convert_kanaを利用します。

下記のように追記します。

{assign_array var="request" values=""}

{* [例] POSTされた値の全角数字を半角に書き換える *}
{if isset($smarty.post.ext_01)}
  {assign
    var="request.ext_01"
    value=$smarty.post.ext_01|mb_convert_kana:'n'}
{/if}

Image from Gyazo

保存する

処理の記述が完了したら、[更新する] ボタンをクリックし保存してください。

Image from Gyazo

APIにカスタム処理を関連付ける

次に作成したカスタム処理をAPIに関連付けます。

API一覧画面を表示する

メニューの[API] をクリックし、API一覧画面を表示します。

Image (fetched from Gyazo)

エンドポイントを作成する

フォーム送信APIの処理を実装するためのエンドポイントを作成します。
今回は下記のような設定でエンドポイントを作成しました。

親項目子項目
パス-inquiry/8/messages/send
モデルカテゴリーフォーム
モデルモデルInquiryMessage (v1)
モデルオペレーションsend
Parametersid8
(こちらには送信対象フォームのIDを記述します。
フォームIDはフォーム一覧画面から確認できます)

Image (fetched from Gyazo)

記入したら[+Add]をクリックして、エンドポイント作成完了です。

Image (fetched from Gyazo)

エンドポイントを選択する

API一覧画面より、先ほど作成したエンドポイントの[Pre-processing] ボタンをクリックします。

Image (fetched from Gyazo)

テーブルの下に、「カテゴリ」と「コンテンツ」プルダウンが表示されます。

Image (fetched from Gyazo)

カスタム処理を関連付ける

エンドポイントとカスタム処理を関連付けます。
プルダウンより、先ほど作成しておいたカスタム処理のカテゴリとタイトルを選択します。

  • カテゴリ:Pre-processing
  • コンテンツ:/rcms-api/2/inquiry/8/messages/send

Image (fetched from Gyazo)

APIの動作を確認する

API INFO画面からリクエストを行い、リクエスト書き換え処理の動作を確認します。

API情報画面を表示する

API一覧画面内パンくずリストのプルダウンより [API情報] をクリックし、API情報画面を表示します。

Image (fetched from Gyazo)

エンドポイントを選択する

作成した「/rcms-api/2/inquiry/8/messages/send」エンドポイントをクリックし、[Try it out] ボタンをクリックします。

Image (fetched from Gyazo)

全角数字を含む値を入力する

[Request body]フィールドが記入できるようになるので、全角数字を含む値を [Request body] に入力します。
今回は "ext_01": "string",の箇所を下記に修正します。

Request body
{
  ...
  "ext_01": "12345",
  ...
}

入力が完了したら、[Execute] ボタンをクリックし、リクエストを実行します。

Image (fetched from Gyazo)

リクエストが成功した場合、下記のようなレスポンスが出力されます。
後ほど動作確認で使用するため、ここで発行されたidの数値を控えておいてください。

Response
{
  "errors": [],
  "messages": [
    "新規追加しました。"
  ],
  "id": 97,
  "thanks_tag": ""
}

保存された値を確認する

サイドメニューより[キャンペーン] -> [フォーム] の順にクリックし、フォーム一覧画面にアクセスします。

Image (fetched from Gyazo)

先ほど送信したフォームのタイトルをクリックし、フォーム詳細画面にアクセスします。

Image (fetched from Gyazo)

[回答] タブを選択し、フォームの回答一覧画面にアクセスします。

Image (fetched from Gyazo)

[No.] 列より、フォーム送信時に発行されていたidを探し出し、数値のリンクをクリックして回答内容画面にアクセスします。

Image (fetched from Gyazo)

リクエスト値を上書きした項目を参照し、値が半角数字に書き換わっていることを確認します。

Image (fetched from Gyazo)

以上でカスタム処理とAPIの関連付けが完了です。

値が書き換わらない場合の確認ポイント

リクエスト値が想定通りに書き換わらない場合は、下記のポイントを確認してください。

  • APIのPre-processingとカスタム処理が関連付いているか
  • 関連付いているオリジナル処理が正しいか
  • 変数名(request)が正しいか
  • チェック対象の項目名が正しいか
  • リクエスト変換処理のロジックが正しいか

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。