このプロジェクトでは、任意のフレームワークで PHP のみを使用してシンプルな API を作成します。必要なのは次のものだけです:
データベース構成用の docker-compose.yml ファイルを定義することから始めましょう。 Docker を使用してコンテナー内にデータベースを作成したくない場合の解決策は、コンピューターにデータベースをインストールすることです。このチュートリアルでは、MySQL を使用します。
アプリケーションを配置するフォルダーを作成したら、まず docker-compose.yaml を構成します。
services: mysql: image: mysql:9.1.0 ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
説明のためにこのファイルをいくつかの部分に分割してみましょう:
services: mysql:
このファイルでは、使用されるサービスを定義しています。
このサービスに mysql という名前を付けます。 注意、このサービスの名前はホストとしてデータベースに接続するために使用されます
image: mysql:9.1.0
次に、データベースの作成に使用するイメージを定義します。このプロジェクトでは、mysql のバージョン 9.1.0 を使用します。
このバージョンと他のバージョンは Docker Hub で見つけることができます。
ports: - '3306:3306'
ポートは 3306 に設定されています。これはデフォルトの mysql ポートです。
ポートが 3306:3306 のようなものであることがわかります。この : は、Docker コンテナーだけでなく、ローカル マシン上でこのポートをリッスンすることを意味します。そのため、マシン上で直接アクセスできます。
environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
環境として、mysql サービスの資格情報を定義する必要があります。
したがって、環境変数を使用してユーザー、パスワード、データベース名を定義しています:
MYSQL_USER: api_user // <--- Este é nosso usuário
MYSQL_PASSWORD: api_password // <--- Este é nosso password
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root
コンテナを起動するには、docker-compose.yaml ファイルが配置されているフォルダー内でターミナルに次のコマンドを入力するだけです。
docker compose up -d
これにより、コンテナ内の mysql サービスが初期化されます。
ターミナル内で mysql にアクセスしたい場合は、次のコマンドを使用できます:
docker exec -it <nome do container> bash
このコマンドを入力して Enter キーを押すと、mysql イメージが実行されているコンテナーに入ります。
コンテナ名は、フォルダー名-ホスト名-番号で形成されます
この場合、アプリケーションが「create-api-php」ディレクトリ内に作成された場合、コンテナの名前は create-api-php-mysql-1 になります。
composer.json ファイルも作成します。このファイルは、プロジェクトで使用される外部ライブラリをインストールするための基礎として機能します。このプロジェクトでは、Dotenv のみを使用します。
services: mysql: image: mysql:9.1.0 ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
この行では、php で dotenv に最もよく使用されるライブラリを追加しています。
このライブラリのリポジトリは、Github Vlucas Repository
で見つけることができます。
services: mysql:
以下の行では、基本的に PSR-4 のデフォルト設定で自動ロードを使用することを示しています。現在最も使用されている PSR は PSR-12 と PSR-4 で、これまでで最も使用されているのは 12 です。ただし、今のところは PSR-4 を使い続けます。
image: mysql:9.1.0
これら 2 つのファイルが作成されたので、次のコマンドを実行できます
ports: - '3306:3306'
Dotenv ライブラリがインストールされ、目的の PSR の設定が構成されます。
このコマンドの後、composer.lock.
JavaScript の世界から来た人は、これらのファイルを package.json および package-lock.json と比較できます。
vendor という名前のフォルダーがディレクトリに追加されていることがわかります。このフォルダーには、Dotenv ライブラリと非常に重要なファイル autoload.php が含まれています。
このファイルは他のファイル間で Dotenv 情報をやり取りするため、このファイル内の何も変更したりする必要はありません。
bootstrap.php というファイルも作成します。このファイルは、アプリケーションを初期化し、すべてが期待どおりに動作するようにいくつかの重要なパラメーターを接続する役割を果たします。
environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
次に、.env ファイルを作成して、mysql データベースへの接続を担当する環境変数を追加します。
次に、次を追加します:
MYSQL_USER: api_user // <--- Este é nosso usuário
また、誰かがリポジトリのクローンを作成したい場合や、将来プロジェクトを継続したい場合に備えて、この情報のコピーが保存される .env.example ファイルも作成します。何を定義する必要があり、何が不必要かを知るために必要な情報。
MYSQL_PASSWORD: api_password // <--- Este é nosso password
これら 2 つのファイル (1 つはすべての情報を含み、もう 1 つは情報の一部のみを含む) を作成する理由は、.env ファイルには機密情報が含まれているため、リポジトリにアップロードすべきではないためです。将来、アクセスのために トークン を追加する必要があるサードパーティ API を使用したいとします。その後、この情報を .env ファイル内に保存します。
.env ファイルがリポジトリにアップロードされないようにするには、.gitignore というファイルを作成し、次の情報を追加します。
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
このようにして、.env ファイルとベンダー フォルダーの内容全体がコミットされないことを定義します。
これでプロジェクトの構成が完了したので、自由にコーディングを続けることができます。
次のディレクトリ src/System を作成し、System 内に DatabaseConnector.php ファイルを作成します
services: mysql: image: mysql:9.1.0 ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
ここでは、このファイルの ネームスペース を定義しています。これにより、将来このファイルを他のファイル内で使用できるようになります。
services: mysql:
ファイルと同じ名前でクラスを作成し、値 null を渡す $dbConnection という名前のプライベート変数を作成します。
この変数は、このクラスの新しいインスタンスを担当し、データベースに接続します。
詳細については、try-catch を実装するときに後で説明します。
image: mysql:9.1.0
コンストラクター内で次の変数を作成し、.env ファイルから取得した値を Dotenv で確認します。
ports: - '3306:3306'
コンストラクター内で、実行したいアクションを検証するために try-catch を実行します。
environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
この試行では、クラスの新しいインスタンスを作成し、それを $dbConnection 変数に渡そうとしています。これにはパラメータ
を受け取る PDO モジュールを使用しています。エラーケース:
MYSQL_USER: api_user // <--- Este é nosso usuário
PDO から例外をトリガーし、エラー メッセージを返します。
明らかに、これは開発環境でエラーをどのように表示すべきかを示す単なる一例です。運用環境では、問題をより明確に理解するのに役立つ、より簡潔なエラーを提示することをお勧めします。
コンストラクターの外でクラス内に、次の関数を作成します:
MYSQL_PASSWORD: api_password // <--- Este é nosso password
接続のインスタンスを含む変数を呼び出す責任があります。
bootstrap.php ファイルを覚えていますか?次のコード行を追加しましょう:
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
次のようになります:
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root
フォルダーsrc内にDatabaseという名前の別のディレクトリを作成し、その中にファイルdatabase_seed.php.
を作成します。
このファイルはデータベースに初めてデータを取り込む役割を果たします。そのため、このプロジェクトを誰かと共有したい場合でも、空のデータベースが残ることはありません。
このファイル内に次のコードを追加します:
services: mysql: image: mysql:9.1.0 ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
require 'bootstrap.php' をインポートします。なぜなら、ブートストラップ ファイル内で、データベースのインスタンス化を担当する変数がすでにインポートされているからです。
services: mysql:
Heredoc
の値を持つ $statement という名前の変数を作成します。
image: mysql:9.1.0
この ヒアドキュメント 内に、いくつかの クエリ を追加します。
ports: - '3306:3306'
ここでは、drop table を選択して、ベース全体を削除してから新しいテーブルを開始します。ただし、必要に応じて、このコード行を削除できます。
次のコード行は、このテーブルがトランザクションの実行に使用され、テーブル間に接続があることを指定します。この mysql 宣言について詳しく知りたい場合は、innoDb ドキュメント
を参照してください。
environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
同じ ヒアドキュメント 内に、別の クエリ を追加します:
MYSQL_USER: api_user // <--- Este é nosso usuário
ここでは、person テーブルにデータを挿入しています。
ファイルの最後に try-catch を作成し、そこで クエリ を初期化しようとします。エラーの場合は、上記のコードのデータ処理で行ったのと同じようにエラー メッセージを返します。 .
MYSQL_PASSWORD: api_password // <--- Este é nosso password
src 内に TableGateways という名前の別のディレクトリを作成し、その中に PersonGateway.php.
というファイルを作成します。
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
このフォルダー内のファイルは、リポジトリとほぼ同じように、データベースと対話する役割を果たします。
PersonGateway クラスに次のコンストラクターを追加します。
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root
クラスが他のファイルで呼び出され、クラスのいくつかのメソッドをトリガーできるようになるため、このコンストラクターを追加します。
次の方法を参照してください:
テーブル内のすべてのユーザーをリストするメソッド
docker compose up -d
テーブルから単一のユーザーをリストするメソッド
docker exec -it <nome do container> bash
テーブルにユーザーを挿入する責任のあるメソッド
{ "require": { "vlucas/phpdotenv": "^2.4" }, "autoload": { "psr-4": { "Src\": "src/" } } }
テーブル内のユーザー情報を更新するメソッド
"require": { "vlucas/phpdotenv": "^2.4" },
テーブルからユーザーを削除するメソッド
"autoload": { "psr-4": { "Src\": "src/" } }
src 内に、Controller という名前のディレクトリを作成し、その中に PersonController.php.
というファイルを作成します。
このディレクトリ内のファイルは、アプリケーション ルートと対話する役割を果たします。ここでは銀行と直接対話しますが、サービス層を使用して、すべてのロジックとビジネス ルールをこの層に制限することもできます。
サービス層を作成したい場合は、次のようになります:
services: mysql: image: mysql:9.1.0 ports: - '3306:3306' environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
ただし、このタイプのアーキテクチャをさらに深く掘り下げることは目的ではありません。今のところはコントローラー ファイルの説明を続けます。
services: mysql:
PersonController クラス内に次の内容を追加します。
image: mysql:9.1.0
このようにして、データベースの新しいインスタンスと対話していることが保証されます。
リクエストを処理するメソッドも作成しました:
ports: - '3306:3306'
この ヘッダー はステータス コードの送信を担当し、本文が作成された場合は、表示される同じ本文を返します。
environment: MYSQL_ROOT_PASSWORD: useroot MYSQL_USER: api_user MYSQL_PASSWORD: api_password MYSQL_DATABASE: api_example
ルートと対話するメソッドも作成しました。
ユーザーのリストルートとの対話を担当するメソッド
MYSQL_USER: api_user // <--- Este é nosso usuário
ユーザーの作成ルートとの対話を担当するメソッド
MYSQL_PASSWORD: api_password // <--- Este é nosso password
ユーザーの更新ルートとの対話を担当するメソッド
MYSQL_DATABASE: api_example // <--- Este é nosso banco de dados
ユーザーの削除ルートとの対話を担当するメソッド
MYSQL_ROOT_PASSWORD: useroot // <--- Está é a senha para o usuário root
検証を担当するメソッド
docker compose up -d
docker exec -it <nome do container> bash
{ "require": { "vlucas/phpdotenv": "^2.4" }, "autoload": { "psr-4": { "Src\": "src/" } } }
最後に、フォルダー src の外に Public という名前のディレクトリを作成します。
このフォルダーには、php 表示ファイルが含まれます。
その中にファイルindex.php
を作成します。
次のコードを追加します:
"require": { "vlucas/phpdotenv": "^2.4" },
このファイルは、ヘッダーの設定と URL へのアクセスのチェックを行います。アクセスが成功すると内容が返され、そうでない場合はエラーが返されます。
アプリケーションにアクセスするには、内部 PHP サーバーを使用してサーバーをアップロードするだけです。
"autoload": { "psr-4": { "Src\": "src/" } }
コンテナを初期化していない場合は、ターミナルに次のコマンドを入力します。
composer install
ここで、postman または URL の操作に役立つその他のアプリケーションを使用してください。
私のソーシャルネットワーク:
Github Linkedin
以上がPure PHP で API を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。