Silexで簡単なRESTアプリケーションを作成する

この記事では、 Silex PHPフレームワーク上にシンプルなRESTアプリケーションを作成しますSilexインストールから始まり、いくつかのアプリケーション経路の作成で終わります。
Silexは、Symfonyの作成者によるPHPマイクロフレームワークであり、その大部分に基づいて構築されています。 次のハブから詳細を知ることができます


さあ始めましょう


この例では、 toyshopというディレクトリを使用します

Silexをインストールする


Silexをインストールする方法はいくつかありますが、これにはComposerを使用しましょう。
作業ディレクトリ内で、次のコマンドを実行します。

 composer require silex/silex ~1.1 


このコマンドでは、Composerコマンドを使用して次のことを行います。


このコマンドを実行すると、Composerは要求していないライブラリもインストールすることがわかります。Silexはこれらのライブラリを正しく動作させる必要があるため、心配する必要はありません。

コマンドの実行が終了するとすぐに、以下に示す次のファイル構造が得られます。
 toyshop/ composer.json composer.lock vendor/ ... 


すべてのSilexコードはベンダーフォルダー内に保存され、2つのComposerファイルにはインストールされているパッケージとライブラリバージョンに関する情報が含まれています。

Composer.json


composer.jsonの内部を見てみましょう。次のようになります。
 { "require": { "silex/silex": "~1.1" } } 


Composer.lock


このファイルには、インストールされているすべてのパッケージとそのバージョンのリストが含まれています。 これは、プロジェクトをリポジトリにアップロードするときにvendor/フォルダをcommit必要がなくなることを意味するため、非常に便利です。アプリケーションが正しく動作するために必要なすべてのライブラリをこのファイルに基づいてインストールできます。 composer.lockファイルとcomposer.lockファイルをリポジトリにアップロードするだけで、リポジトリからコードが抽出されるとすぐに、 composer installコマンドを実行するだけで、 Composer指定されたバージョンの必要なライブラリをインストールします。

ルート作成



このアプリケーションはおもちゃ屋なので、必要なものについて考えてみましょう。 私たちのサイトを訪れる人はギフトを見たいと思うので、ギフトのリストを取得できるルートを作成しましょう。

index.phpファイルを作成しましょう。 次のようにコードを追加します。
 <?php require_once __DIR__.'/vendor/autoload.php'; $app = new Silex\Application(); // Please set to false in a production environment $app['debug'] = true; $toys = array( '00001'=> array( 'name' => 'Racing Car', 'quantity' => '53', 'description' => '...', 'image' => 'racing_car.jpg', ), '00002' => array( 'name' => 'Raspberry Pi', 'quantity' => '13', 'description' => '...', 'image' => 'raspberry_pi.jpg', ), ); $app->get('/', function() use ($toys) { return json_encode($toys); }); $app->get('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) { if (!isset($toys[$stockcode])) { $app->abort(404, "Stockcode {$stockcode} does not exist."); } return json_encode($toys[$stockcode]); }); $app->run(); 


これで、2つのルートが宣言されました: /および/{stockcode}

ルート/


これは、すべてのおもちゃのリストを取得するルートです。 このメソッドは、指定されたものをJSONでエンコードし、エンコードされたデータをリクエストへの応答として返しJSON

匿名関数が$toys配列にアクセスできるようにするには、匿名関数定義の最後にuse($toys)を追加してインポートする必要がありますが、{を開く前に。

ルート/{stockcode}


これは、特定の玩具に関する情報を取得するためのルートであり、 stockcodeパラメーターによって識別されます。 ご覧のとおり、この関数はこのルートで少し複雑なヘッダーを使用します。

use($toys)て、いくつかの変数を関数自​​体に渡します: Silex\Application $app $stockcode.

Silex\Application $appはSilexアプリケーションオブジェクトであり、その助けにより、間違ったストックコードが渡された場合に美しい404エラーページを表示できます。

$stockcodeは、情報を受け取りたいおもちゃの識別子です。 ご覧のとおり、この変数は{stockcode}に対応しています。これは、当社が説明しているルートにあります。

アプリケーションをテストする



index.phpを介してすべてのリクエストをルーティングするようにWebサーバーを設定した後、次を使用してルートに移動できます。 toyshop toyshop/00001 toyshop toyshop/00001で、これらの各クエリが返す結果を確認します。

例えば toyshop/00001 toyshop/00001は以下を返します:
 {"name":"Raspberry Pi","quantity":"13","description":"...","image":"raspberry_pi.jpg"} 


応答は、オンラインストアまたはモバイルアプリケーションでの使用に適した便利な形式で返されます。 実行する必要があるのは、このデータに対してjson_decode関数を実行し、HTMLなどの便利な形式でデータを表示することだけです。

なぜSilexなのか?


いい質問です。
回答:それはマイクロフレームワークであるため、自分の好みのスタイルで書くように強制することはなく、Silexで動作するようにプログラミングスタイルを変更する必要はありません。 必要に応じて、Slim、その他のマイクロフレームワーク、またはSymfonyやZendなどの本格的なフレームワークを使用できます。

翻訳者からのメモ


Silexや、PUT、POST、DELETEなどの他のタイプのHTTPリクエストでも簡単に作業できることを付け加えます(下の例)
 $app->post('/toys', function (Silex\Application $app) use ($toys) { //... }); $app->put('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) { //... }); $app->delete('/{stockcode}', function (Silex\Application $app, $stockcode) use ($toys) { //... }); 


したがって、本格的なRESTアプリケーションを作成できます。

Source: https://habr.com/ru/post/J208206/


All Articles