ホームページ  >  記事  >  バックエンド開発  >  PHP で Pokémon API を構築する: 初心者ガイド

PHP で Pokémon API を構築する: 初心者ガイド

DDD
DDDオリジナル
2024-09-13 06:27:021166ブラウズ

Building a Pokémon API in PHP: A Beginner

このガイドでは、Pokémon API と Flight フレームワークおよび Zebra_cURL や Latte などの追加パッケージを使用する基本的な PHP プロジェクトを作成する手順を説明します。プロジェクトのセットアップ、ルートの追加、ビューのレンダリングについて説明します。

tl;dr: Flight で単純な API ベースのプロジェクトを作成するのは難しくありません。このガイドで使用されているコードを確認してください。

ステップ 1: 環境のセットアップ

まず、新しいプロジェクト フォルダーを設定する必要があります。ターミナルを開き、目的の場所に移動し、次のコマンドを実行して新しいディレクトリを作成し、そこに入ります。

mkdir flight-pokeapi
cd flight-pokeapi

ステップ 2: Composer のインストール

コードに入る前に、Composer がインストールされていることを確認する必要があります。 Composer は PHP の依存関係マネージャーであり、必要なライブラリを含めるのに役立ちます。

Composer がインストールされていない場合は、次のコマンドを使用してインストールできます。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

Composer が ./composer.phar という現在のファイルにインストールされたので、依存関係を管理しましょう。

ステップ 3: 依存関係のインストール

必要なパッケージを管理するには、composer を使用してパッケージを追加するだけです。

./composer.phar require flightphp/core stefangabos/zebra_curl latte/latte

これによりインストールされます:

  • Flight PHP: 軽量の PHP フレームワーク。
  • Zebra_cURL: HTTP リクエストを処理する cURL ラッパー。
  • Latte: ビューをレンダリングするためのテンプレート エンジン。

ステップ 4:index.php のセットアップ

次に、アプリケーションのエントリ ポイント、public/index.php を作成しましょう。このファイルはアプリをセットアップし、ルートを構成し、ビューのレンダリングを処理します。

パブリックディレクトリとindex.phpファイルを作成します:

mkdir public
touch public/index.php

次に、次のコンテンツをindex.phpに追加します:

<?php

use flight\net\Router;
use Latte\Engine;

require __DIR__ . '/../vendor/autoload.php'; // Autoload the installed packages

// Setup Latte for view rendering
$Latte = new Engine;
$Latte->setTempDirectory(__DIR__ . '/../temp');
Flight::map('render', function(string $template_path, array $data = []) use ($Latte) {
  $Latte->render(__DIR__ . '/../views/' . $template_path, $data);
});

// Setup Zebra_cURL for handling HTTP requests
$Curl = new Zebra_cURL();
$Curl->cache(__DIR__ . '/../temp');
Flight::map('curl', function() use ($Curl) { 
    return $Curl; 
});

// Define a simple route
Flight::route('/', function() {
  echo 'hello world!';
});

Flight::start();

このファイル内:

  • Composer のオートローダーをロードします。
  • ビューをレンダリングするために Latte を設定します。
  • Latte を使用して /views フォルダーからテンプレートをレンダリングするカスタム レンダリング メソッドをマップします。
  • API リクエストを処理するように Zebra_cURL を設定し、呼び出すときに Flight::curl() を使用するようにマップします。
  • 「hello world!」だけを返すホームページ (/) の簡単なルートを定義します

この設定をテストしたい場合は、パブリック ディレクトリから PHP サーバーを起動できます。

php -S localhost:8000 -t public/

次に、ブラウザで http://localhost:8000/ にアクセスすると、「hello world!」が表示されるはずです。かっこいいですね?

ステップ 5: ルートの追加

基本的なルートが設定できたので、Pokémon API を使用するより複雑なルートを追加しましょう。 public/index.php を更新して次のコードを含めます:

Flight::group('/pokemon', function(Router $router) {
    // Route to list all Pokémon types
    $router->get('/', function() {
        $types_response = json_decode(Flight::curl()->scrap('https://pokeapi.co/api/v2/type/', true));
        $results = [];
        while ($types_response->next) {
            $results = array_merge($results, $types_response->results);
            $types_response = json_decode(Flight::curl()->scrap($types_response->next, true));
        }
        $results = array_merge($results, $types_response->results);
        Flight::render('home.latte', [ 'types' => $results ]);
    });
});
  • /pokemon ルート グループを作成しました。ルート グループはルートを「囲み」、グループ内のすべてのルートに共通の機能を定義できるようにします。
  • /pokemon ルートは、Zebra_cURL を使用して Pokémon API から取得することにより、利用可能なすべてのポケモン タイプをリストします。
  • ポケモンのタイプを表示するには home.latte ビューを追加する必要があるため、これはまだ機能しません。

ステップ 6: Latte を使用してビューをレンダリングする

データを取得したので、それを表示するビューを設定しましょう。 views ディレクトリを作成し、ポケモンのタイプを表示するための Latte テンプレート ファイルを追加します。

mkdir views
touch views/home.latte

次のコードを views/home.latte に追加します:

<p>Welcome to the Pokemon World!</p>

<p>Types of Pokemon</p>
<ul>
    {foreach $types as $type}
        <li><a href="/pokemon/type/{$type->name}">{$type->name|firstUpper}</a></li>
    {/foreach}
</ul>

このファイル内:

  • ルートから渡された $types 配列をループし、各ポケモンのタイプの名前を表示します。

今、/pokemon にアクセスすると、すべてのポケモンのタイプのリストが表示されます!

ステップ 7: ルートをグループ化して追加する

ポケモンのルートを拡張して、特定のタイプと個々のポケモンの詳細を取得しましょう。次のルートを /pokemon グループに追加します:

// Route to fetch a specific Pokémon type and list all associated Pokémon
$router->get('/type/@type', function(string $type) {
    $Curl = Flight::curl();
    $type_response = json_decode($Curl->scrap('https://pokeapi.co/api/v2/type/' . $type, true));
    $pokemon_urls = [];
    foreach($type_response->pokemon as $pokemon_data) {
        $pokemon_urls[] = $pokemon_data->pokemon->url;
    }
    $pokemon_data = [];

    // The little & here is important to pass the variable by reference.
    // In other words it allows us to modify the variable inside the closure.
    $Curl->get($pokemon_urls, function(stdClass $result) use (&$pokemon_data) {
        $pokemon_data[] = json_decode($result->body);
    });

    Flight::render('type.latte', [ 
        'type' => $type_response->name,
        'pokemons' => $pokemon_data
    ]);
});

このルートでは、次のことを行います:

  • 関連するすべてのポケモンを含む、特定のポケモン タイプの詳細を取得します。
  • 複数の API リクエストを送信して、各ポケモンの詳細を取得します。
  • テンプレート (type.latte) を使用してデータをレンダリングします。

次に、type.latte ビューを作成します。

touch views/type.latte

次のコンテンツを type.latte に追加します:

<h1>{$type|firstUpper}</h1>
<ul>
    {foreach $pokemons as $pokemon}
        <li><a href="/pokemon/{$pokemon->id}">{$pokemon->name|firstUpper}</a></li>
    {/foreach}
</ul>

このテンプレートには、特定のタイプに関連付けられた各ポケモンの名前が表示されます。

ステップ 8: 効果がありますか?

この時点で、Flight PHP、API リクエスト用の Zebra_cURL、ビュー レンダリング用の Latte を使用して、基本的な Pokémon API コンシューマーがセットアップされました。さらにルートを追加し、テンプレートを改良することで、このプロジェクトをさらに拡張できます。

プロジェクトを表示するには、パブリック ディレクトリから PHP サーバーを起動します。

php -S localhost:8000 -t public/

ブラウザで http://localhost:8000/pokemon にアクセスすると、ポケモンのタイプのリストが表示されます。

トラブルシューティング

ヘルプが必要な場合や問題が発生した場合は、Github でコード全体をチェックして、どこで間違いを犯したかを確認できます。

この小さなチュートリアルを楽しんでいただければ幸いです。ご質問がある場合やサポートが必要な場合は、以下のコメント欄でお気軽にお問い合わせください。コーディングを楽しんでください!

以上がPHP で Pokémon API を構築する: 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。