31
26

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 1 year has passed since last update.

PHPでAPI作成

Last updated at Posted at 2021-04-22

はじめに

今回この記事を書こうと思ったのは普段はSwiftの勉強を主にしているのですがそれだけでは就職活動がうまく行かないなと感じ、PHPの勉強を始めたのがきっかけとなります。
PHPの勉強を始めた時はPHPでWebアプリを作れればいいなと言うぐらいの気持ちだったのですが作ったアプリをスマホアプリとしても使えたら面白いなと思ったためAPIの作成の仕方まで調べたので備忘録として、また自分のようにAPI作りたいと思った人のために役にたてばいいなと思います。

簡単なAPIの作成

では、早速簡単なAPIの作成をしましょう。
このコードはこちらのnoteの記事を丸パクリしています。
PHPで簡単なWebAPIを実装してみる【初心者向け】

<?php
    // 文字コード設定
    header('Content-Type: application/json; charset=UTF-8');
    
    // numが存在するかつnumが数字のみで構成されているか
    if(isset($_GET["num"]) && !preg_match('/[^0-9]/', $_GET["num"])) {
        // numをエスケープ(xss対策)
        $param = htmlspecialchars($_GET["num"]);
        // メイン処理
        $arr["status"] = "yes";
        $arr["x114"] = (string)((int)$param * 114); // 114倍
        $arr["x514"] = (string)((int)$param * 514); // 514倍
    } else {
        // paramの値が不適ならstatusをnoにしてプログラム終了
        $arr["status"] = "no";
    }
    
    // 配列をjson形式にデコードして出力, 第二引数は、整形するためのオプション
    print json_encode($arr, JSON_PRETTY_PRINT);
?>

コードがかけたら
XAMPP -> Service -> Apacheを選択 -> start
XAMPP -> Network -> localhost:8080 -> enable
でサーバーを立ち上げましょう。

http://localhost:8080/アプリ名/ファイル名.php?num=114

を開きましょう。

json形式で多分教示されていると思います。

これでめっちゃ簡単なAPIは作成できました。
ですが、実際はデータベースが絡んでくるのでデータベースからデータを取得しましょう。

databaseからデータを取得するAPI

<?php
    header('Content-Type: application/json; charset=UTF-8');

    $dsn = "mysql:host=localhost;dbname=データベース名;charset=utf8";
    $user = 'root';
    $password = '';

    $dbh = new PDO($dsn, $user, $password);
    $dbh -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = 'select * from テーブル名 where 1';

    $stmt = $dbh -> prepare($sql);
    $stmt -> execute();

    while(true) {
        $rec = $stmt -> fetch(PDO::FETCH_ASSOC);

        if ($rec === false) {
            break;
        }
        $arr[] = $rec;
    }

    print json_encode($arr, JSON_PRETTY_PRINT);

?>
http://localhost:8080/アプリ名/ファイル名.php

に接続してみましょう。
データがあれば表示されると思います。
今回はデータベースから全件取得なのでパラメータなしでSQL文も短いです。
もし取得したい条件があるならパラメータを渡してあげましょう。

以下サンプルです。

//Twitterのような投稿アプリで特定の文字列を含む内容の投稿を取得したい時
$content_query = $_GET["content_query"];
$sql = 'select * from post where content like "%'.$content_query.'%"';
http://localhost:8080/アプリ名/ファイル名.php?content_query="検索したい文字列"

これで欲しいデータが取得できます。

もし、エラーが出た場合は以下の項目を確認してください。
・データベースがあるか、間違っていないか
・テーブルがあるか、まちがっていないか
・mysqlのサーバーを立ち上げているか
これらがちゃんとできているのにエラーが出る時はググってください。

また、本番で使うには例外処理が必要になるので調べてください。

最後に

PHPの勉強をしている期間Swiftの勉強していなかったのでSwiftの能力は上がってないですがこうやってAPIを作ってSwiftでも使えるようにするのはかなり楽しかったですし、エンジニア(笑)としての能力は少し上がったかなと感じました。
さらに久しぶりに触るSwiftは新鮮に感じることができました。
今回はGETのみの記事ですがPOSTも難しくないので調べてコードを書いてみて欲しいです。

31
26
4

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
31
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?