LoginSignup
2
1

More than 1 year has passed since last update.

【PHP】API実行ツールを作ってみよう(その3)

Posted at

はじめに

PHPでツール作成の5回目です。
前回のAPI実行ツールでは主にテキストデータ(クエリパラメータ)の送受信を行いましたが、
今回は添付ファイルを用いた送受信ツールを作成したいと思います。

クライアント

クライアント側はツール作成の1回目で使用した
Chrome拡張機能のTalend API Tester を使用します。
インストール方法や基本的な使い方などは1回目の記事を参照下さい。

1.以下のようなファイルを作成します(CSV形式)
qiita_02.png

2.Talend APIの設定を以下のように行います。
qiita_01.png

①POSTを選択します
②アクセスするURLを指定します
■http://localhost/api_temp/server.php?fname=test.csv
③送信データを指定します
■今回はファイルをアップロードするので、「Text」→「File」に変更します
④アップロードするファイルをドラッグ&ドロップします
⑤送信ボタンを押します

サーバ

クライアントの準備は出来たので、続いてサーバ側を作成していきます。
1.「c:¥xampp¥htdocs」フォルダに「api_temp」フォルダを作成します
qiita_03.png

2.上記のフォルダ内に「file」フォルダを作成します
qiita_04.png

3.「api」フォルダ内に「server.php」ファイルを作成します
中身は下記になります

server.php
<?php
$saveFolderName = "./file";

// リクエストパラメータチェック
if( !isset($_GET['fname']) ){
    echo "エラー:リクエストパラメータにファイル名が指定されていません。";
    return;
}
$fname = $_GET['fname'];

// ファイル名拡張子チェック
$fileNames = explode( ".", $fname );
if( count($fileNames) <= 1 ){
    echo "エラー:リクエストパラメータにファイル名が指定されていません。";
    return;
}
$extName = $fileNames[1];
if( $extName != 'csv' ){
    echo "エラー:ファイル名の拡張子が不正です。";
    return;
}

// ファイル保存
$params = file_get_contents('php://input');
if( strlen($params) <= 0 ){
    echo "エラー:ファイルが不正です。";
    return;
}

$outputFile = "".$saveFolderName."/".date("Y-m-d_His")."_".substr(explode(".", (microtime(true) . ""))[1], 0, 3).".".$extName."";
file_put_contents( $outputFile, $params );

// レスポンス
echo "Success";
?>

コード解説

  • 5~22行目・・クライアントからのリクエストデータのエラーチェックを行っています。
  • 24~32行目・・クライアントからの送信データを取得し、ファイルへ保存しています。
  • 34~35行目・・クライアントへレスポンスを返しています。

クライアント動作確認

・「Send」ボタン押下後、画面下のResponseに「200 OK」が表示されていて、
右下の「BODY」に「Success」と表示されていれば成功しています
qiita_05.png

サーバ動作確認

1.実行日時のファイル名でCSVファイルが作成されていることを確認
qiita_06.png

2.CSVファイルを開き、クライアントから送られたファイル内容と一致していることを確認
qiita_07.png

最後に

実際の業務では今回のようなファイルがAPI経由で送られてきて、その内容を保存するといったことが結構あるかと思います。
またファイル送信は別会社が担当し、自分はデータ受信(今回のPHP側の部分)を担当するといったケースも良くあるので、
特にエラーチェック(ファイル名ファイル形式データの中身など)は厳密にし、エラーが発生した際にどちら側に原因があるのか?を特定し易くしておくと良いと思います。
次回は、クライアント部分をPHPを使って作成したいと思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1