0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Laravel】PHP環境からWebAPI(Laravel)へPOSTする

Posted at

はじめに

PHP製のアプリケーションAからアプリケーションB(PHP7.3・Laravel6.3)のWebAPIに対してPOSTリクエストを送信することを想定します。
異なるアプリケーションからWebAPIを叩く方法を初めて実装したので、実施した内容を整理しようと思います。

環境

  • PHP
    • V 5.6
    • V 7.3
  • Laravel(6.4)

クライアント側の実装

クライアント側(リクエスト送信側)ではPHP5.6を使用したアプリケーションです。
こちら側で、Laravel製のアプリケーション(PHP7.3 / Laravel6.4)のWebAPIを叩くメソッドを実装します。
今回、WebAPIを叩くために、PHPの標準機能である「curl」をしようします。

request.php
$base_url    = 'https://xxx.xxx.xxx.xxx';   // アプリケーションBのドメイン
$destination = 'api/hoge';                  // アプリケーションBのAPIのパス

$header = [
  'Content-Type: application/json',         // json形式のデータをpostするので必要
];

$params = [
  'hoge' => 'hoge',
  'fuga' => 'fuga'
];  // 対象APIへのリクエストパラメータ

$curl = curl_init();                                                // curlの初期化
curl_setopt($curl, CURLOPT_URL, $base_url.$destination);            // curlするURL
curl_setopt($curl, CURLOPT_POST, TRUE);                             // POSTメソッド指定
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($params));  // parameter クエリ文字列にエンコードしてpost
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);                    // HTTPヘッダー
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);                  // 証明書の検証を無効化
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);                  // 証明書の検証を無効化
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);                   // 返り値を文字列に変更
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, TRUE);                   // Locationヘッダを追跡

$output= curl_exec($curl);      // curlの実行・レスポンス
$result = json_decode($output); // JSONを連想配列にパース

curl_close($curl);  // コネクションを閉じる

APIサーバ側の実装

アプリケーションAからcurlでPOSTリクエストされるAPIの実装を行います。

hogeApi.php
$dataJsonString = file_get_contents(php://input);
// リクエストデータを加工
$dataList = [];
foreach (explode(&, $dataJsonString) as $data) {
    $tmpList = explode(=, $data);
    $key = $tmpList[0];
    $val = $tmpList[1];
    $dataList[$key] = $val;
}

注意点

リクエストパラメータについて、APIで処理するために連想配列に加工することを目標とします。
Larvelのrequestヘルパー関数では、postされたパラメータを受け取ることができませんでした。
また、PHPの標準関数である$_POSTでも受け取れません。
そこで、上記のように、file_get_contents関数を使用して、POSTデータを受け取ります。

file_get_contentsについて

公式

  • 生のPOSTデータを取得する方法です。
  • 何故生のPOSTデータを取得する必要があるのか?
    • 通常のPOSTデータはKeyとValueの組み合わせによる連想配列の形式となるが、
      JSON形式に変換することで文字列のみとなり、標準の「$_POST」では形式が合わず取得が出来なくなるためと思われます。

最後に

PHPの標準機能であるcurlfile_get_contentsをもちいて、アプリケーション間の処理の受け渡しを実装することができました。

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?