ホームページ > バックエンド開発 > PHPチュートリアル > LaravelでRESTリソースを構築します

LaravelでRESTリソースを構築します

William Shakespeare
リリース: 2025-02-20 11:50:10
オリジナル
527 人が閲覧しました

LaravelでRESTリソースを構築します

この部分では、RESTインターフェイスで作業を開始します。 LaravelでREST APIを作成することはそれほど難しくありません。心に留めておく必要があるのは、Emberjsを扱っており、新しいアダプターをゼロから書きたくないということです。いつものように、この部分のソースコードをGitHubで見つけることができます。

キーテイクアウト

ember.jsの規則を使用して、laravelを使用してapiを構築するときに互換性を確保し、開発プロセスを合理化します。
    Laravelでリソースコントローラーを作成して、職人のコマンドラインツールを使用して、CRUD操作を手動で定義する必要なく、安らかなリソースを効率的に管理します。
  • Laravelの特定の名前空間の下にそれらをグループ化することにより、ルートを効果的に整理し、API構造とアクセシビリティを強化します。
  • データの取得を管理し、堅牢なAPIエンドポイントを確保するために、コントローラーにエラー処理と応答のフォーマットを実装してください。 LaravelのEloquentおよびAPIリソースクラスを活用して、モデルデータをJSON応答に変換し、Ember.jsのようなフロントエンドフレームワークと簡単に統合します。
  • どこから始めればいいですか?
  • それは難しい質問です。 Emberには独自のワークフローとロジックがあります。その論理を念頭に置いて休息を書き始めると、時間を節約できます。素晴らしいアーキテクチャと再利用可能なものがあります。エンバーは彼らの休憩所の建築に良い選択をしたと思います。 Emberがデータをどのように期待しているかを見てください
  • ユーザーを取得したいと仮定しましょう。エンバーは次のようなことを期待しています:
  • ユーザーのリストを取得したい場合、Emberは次のようなJSONを期待するでしょう:

最初のものには「ユーザー」が必要ですが、2番目のユーザーには「ユーザー」が必要です。 2つ目は複数です。エンバーもそのためにいくつかのルールを入れました。

を使用して複数形を自分で指定しない場合

emberjsは仮定し、「式」を要求します。フレームワーク自体がそのようなことを提供するのは良いことですが、一方で、これらの詳細を忘れた場合、物事は制御不能になります。

エンバーでより深く冒険する前に、警告:エンバーは困難で強力です。時間をかけてそれがどのように機能するかを学びましょう
{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
少し物事を複雑にし、オブジェクト間に何らかの関係を置くと、たとえば、ユーザーが写真を持っていると言います。どのようにそれを出力しますか?

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これは1対多くの関係です。ユーザーをリクエストすると、彼の写真も引っ張られます。 Laravelですでにいくつかの関係を設定しています。必要に応じて使用して、Emberでそれらの関係を消費することもできます。

このフレームワークがどのようにデータを望んでいるかを確認するためにEmberから始めました。構造の構築方法を知っていれば簡単です。データベースからデータを検証と取得するのは簡単ですが、堅実な休憩インターフェイスとスマートなインターフェイスを構築することは難しい部分です。

残りの準備

何かを開発すると、モックアップが非常に役立ちます。あなたが第一人者であり、PhotoshopやGimpに対処するのが嫌いであっても、プロトタイプに適したツールがあります。私はBalsamiqを使用しましたが、私のフロントページのプロトタイプはこれでした:

LaravelでRESTリソースを構築します

それを構築し始めましょう。 Open /App/views/index.php。これは、シングルページアプリとして機能します。このシリーズの最初の部分でこのファイルを作成しました。

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
これを説明させてください。 NAVタグはナビゲーションを担当します。クラスのタイトルエリアのULタグは、アプリケーションの最初のレベルにリンクするロゴとして使用されるテキストです。また、カテゴリのリストを備えたドロップダウンも追加しました。詳細を知りたい場合は、5つのドキュメントにアクセスしてください。ほとんどの場合、操作をコピー/貼り付けているだけなので、この部分について心配しないでください。 また、コンテンツ領域にFoundationのグリッドシステムを使用しました。これはすべての情報で満たされ、ナビゲート中に変更されます。すべての内部更新はEmberによって処理されます。ここでは3つのテンプレートのみを構築します。 1つはユーザー用、1つは1つの写真用、もう1つはランディングページ用です。

すべてのコードがスクリプトタグ内にあることに気付きましたか? Emberは、ハンドルバーをテンプレート言語として使用します。テキスト/Xハンドルバーのタイプは、特別なタイプのスクリプトです。 Emberとハンドルバーをしばらく使用している場合は、おそらくテンプレート名を使用しました。このテンプレートはすべてのアプリケーションのコンテナとして使用されるため、このテンプレートはそれらを指定しません。名前を指定しない場合、Emberはアプリケーションテンプレートとして使用します。

リソースコントローラー

この非常にシンプルなアプリを開発したとき、REST APIを開発するときにリソースコントローラーが役立つことがわかりました。それがRESTアーキテクチャのポイントです。すべてがリソースです。すべてのリソースには、http動詞を適用できます。すべての動詞が必要なわけではありません

これは、Artisanを介してリソースコントローラーを作成する方法です。オプション-Exceptは、このコントローラーからこれら2つの方法を除外します。メソッドの作成と編集は必要ありません。作成メソッドは、そのリソースを作成するグラフィカルインターフェイスを扱います。 1ページのアプリを作成しているので、Emberの外にビューを作成するのは賢明ではありません。

カテゴリの別のリソースコントローラーを作成します。ご覧のとおり、このコントローラーでは表示とインデックスメソッドのみが利用できます。個々のカテゴリを表示し、すべてのカテゴリを取得するだけで十分だと思います。
{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

別のコントローラーは画像コントローラーです。すでにそれを持っているのに、なぜ画像コントローラー?画像を提供するにはエンドポイントが必要だからです。 Dropboxは画像を保持していますが、外部からアクセスすることはできません。フォルダを公開したい場合は、支払う必要があります。それが最初の理由です。 2番目の理由は、すべてのイメージを公開したくないということです。一言で言えば、このコントローラーはDropboxから画像をつかみ、クライアントに提供します。

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

そして最後になりましたが、usercontroller:

です
Ember.Inflector.inflector.irregular('formula', 'formulae');
ログイン後にコピー
ログイン後にコピー

ルート

コントローラーができたので、それらのコントローラーを関連するルートにリンクする必要があります。 /app/routes.phpを更新しましょう。 まず、ルート::グループを使用してURLネームスペース内にそれらをグループ化します。

{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }
ログイン後にコピー
ログイン後にコピー
ここでは、名前空間であるプレフィックスを指定しました。このグループ内にあるものはすべて、次のようにアクセスできます:

また、そのグループ内のフィルターを指定できます。たとえば、auth :: wonebasic( 'username')フィルターを追加するか、このグループに追加して追加できます。他の認証も使用できます。
<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload</a></h1>
                </li>
            </ul>

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories</a>
                        <ul >
                            <li><a href="#">Category1</a></li>
                            <li><a href="#">Category2</a></li>
                            <li><a href="#">Category3</a></li>
                            <li><a href="#">Category4</a></li>
                        </ul>
                    </li>
                </ul>

            </section>

            <div ></div>
            
        </nav><!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        </div><!-- END Content -->

    </script>
ログイン後にコピー
ログイン後にコピー

そのグループ内に3つのコントローラーを追加します。 Photocontroller、usercontroller、およびcategorycontroller

そのグループの外にImagesControllerを追加します。このコントローラーには名前空間が必要だとは思いません。画像は画像であり、名前空間を与えることには意味がありません。

php artisan controller:make PhotoController --except=create,edit
ログイン後にコピー
ログイン後にコピー
最終的には、 /app/routes.phpファイルは次のようになります:

php artisan controller:make CategoryController --only=show,index
ログイン後にコピー
ログイン後にコピー
Emberの要件により、リソース名が複数形であることに注意してください。 これらのコントローラーの充填

php artisan controller:make ImagesController --only=show
ログイン後にコピー
今、私たちは何かを作り始めることができます。すべてのことを説明するのが非常に難しいので、私はここでの休憩についてすべてをカバーするつもりはありません。詳細を知るために、このシリーズを参照してください。写真コントローラーから始めましょう

インデックス()メソッドは、データベースから最新の写真を返す必要があります。ここでは、いくつかのページネーションを行うことができますが、私は物事が複雑になりすぎてほしくありません。コメントに十分な関心がある場合は、このアプリケーションを今後の記事で更新します。

これを説明させてください。すべてをトライに挿入し、キャッチして最後にブロックしました。何か問題が発生した場合は、ステータスコードを使用して別のJSONを返してください。

これはデータベースから9枚の写真をつかみます。次に、すべての写真を撮って、後でJSON形式に変換されるフォーマットされた配列で表示します。

すべてがうまくいった場合、または例外が雄弁さによってスローされない場合、これは正しい出力を表示します。特定のステータスコードを表示する場合は、雄弁でスローできるすべての例外をキャッチし、適切なステータスコードを表示します。

今すぐShow()メソッドを記入しましょう。繰り返しますが、特定のIDを使用して写真に関するすべての情報を取得したいと考えています。

php artisan controller:make UserController --only=show,index
ログイン後にコピー

独自のアプリを構築するときは、ユーザー入力に検証を追加することを忘れないでください。

usercontrollerのロジックはほぼ同じです。今回は、ユーザーモデルをリクエストします。

{
      "user": {
        "firstName": "firstName",
        "lastName": "lastName"
      }
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

すべてがほぼ同じで、モデルとフィールドのみが変更されます。出力JSON。 showメソッドは次のようになります:

{
      "users": 
      [
          {
            "firstName": "firstPersonsName",
            "lastName": "lastname"
          },
          {
            "firstName": "secondPersonName",
            "lastName": "lastName"
          }
      ]
    }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
この関数は、指定されたIDを持つユーザーを取得します

私たちが扱っている最後のコントローラーは、ImagesControllerです。ロジックは、ファイルシステムから画像をつかんでそれらを提供するのと同じくらい簡単です。ファイルを保存し、ローカルファイルシステムまたはサーバーファイルシステムで取得する場合は簡単です。残念ながら、ファイルをHerokuに保存することはできないため、Dropboxを使用して、このエンドポイントからそれらのファイルを提供します。

ドロップボックスクライアントとフライシステムアダプターをインポートします。私たちの環境がローカルの場合、ローカルアダプターを使用してフライシステムを使用します。環境が生産されている場合は、Dropboxアダプターを使用してください。フライシステムクラスをこのコントローラー内のプライベート変数に割り当てます。

showメソッドはそのファイルにサービスを提供し、Destroyメソッドはファイルシステムからそのファイルを削除します。このライブラリを使用することにより、私たちはアプリにレベルの抽象化を入れました。

Ember.Inflector.inflector.irregular('formula', 'formulae');
ログイン後にコピー
ログイン後にコピー
Destroy()関数は非常に単純です。削除メソッドを使用して、削除するファイルの名前を渡すことにより、そのファイルを選択してください。ファイルが見つからない場合は、404を返します。

最終的には、ImageControllerは次のようになります:
{
      "user": {
        "id": 1,
        "name": "firstName",
        "lastname": "lastname,
        "photos": [1, 2, 3]
      },
    
      "photos": 
      [
          {
            "id": 1,
            "title": "Lorem Ipsum"
          },
          {
            "id": 2,
            "title": "Lorem Ipsum"
          }
      ]
    }
ログイン後にコピー
ログイン後にコピー

提供した形式はHTMLです。わかりました、それは少し奇妙です。 HTMLではなく画像を提供したかったのです。ただし、ブラウザはファイル形式を探し、そのファイルの使用方法を認識しているため、それは問題ではありません。
<script type="text/x-handlebars">
    
        <!-- The navigation top-bar -->
        <nav  data-topbar>

            <ul >
                <li >
                    <h1><a href="#">Photo Upload</a></h1>
                </li>
            </ul>

            <section >

                <!-- Left Nav Section -->
                <ul >
                    <li >
                        <a href="#">Categories</a>
                        <ul >
                            <li><a href="#">Category1</a></li>
                            <li><a href="#">Category2</a></li>
                            <li><a href="#">Category3</a></li>
                            <li><a href="#">Category4</a></li>
                        </ul>
                    </li>
                </ul>

            </section>

            <div ></div>
            
        </nav><!-- END Navigation -->
        
        <!-- Content -->
        <div style="margin-top: 50px;">
            <!-- The content will be here -->
        </div><!-- END Content -->

    </script>
ログイン後にコピー
ログイン後にコピー
先に進み、CategoryControllerを作成してみてください。私はあなたのための運動としてそれを除外しました。

APIのテスト
php artisan controller:make PhotoController --except=create,edit
ログイン後にコピー
ログイン後にコピー

私は認めなければなりません、私はphpstormに恋をしています、そして、残りのAPIをテストするために、私はRESTクライアントと呼ばれるツールを使用します。これは、テストを簡素化するグラフィカルインターフェイスです。必要に応じて、端末からカールを使用することもできます。いくつかのテストを行いましょう:

そしてこれが返されたものです:

php artisan controller:make CategoryController --only=show,index
ログイン後にコピー
ログイン後にコピー
phpstormのレストクライアントを使用すると、JSONで同じ結果が得られます。

LaravelでRESTリソースを構築します

そして、結果をより良い形式で確認したい場合は、ツールの左側にあるJSアイコンを押すだけで、RESTクライアントはより良い表現を与えてくれます。

削除や投稿など、他の動詞をテストすることもできます。先に進んで、できる限りテストしてください。テストに使用できる他のクライアントがあります。レストコンソールと郵便配達員はそのうちの2つです。 1つ目はChromeでのみ利用でき、2番目のChrome、PostmanはChromeとFirefoxの両方で利用できます。郵便配達員はよりシンプルでユーザーフレンドリーなようです。先に進んで、試してみてください。

結論

Laravelは、リソースコントローラーを使用してREST APIを構築するための作業を簡素化します。 Emberコンベンションを使用して、インターフェイスをどのように構築するかを確認しました。 Emberは優れたインターフェイスを選択しており、そのロジックに固執することで、他のプラットフォームのコードを簡単に再利用できます。

この部分では、概念にもっと焦点を合わせており、あまりコーディングをしませんでした。すべてのメソッドを埋めて検証を追加すると、この投稿が既に長く、長いシリーズになったときに、この投稿を不必要に拡張しました。開発するときは、常に入力を検証する必要があります。それを忘れないでください、そしてテスト、テスト、テスト。テストはあなたの親友でなければなりません。

このシリーズの最終記事では、完全に機能するライブアプリケーションにすべてをまとめます。

Laravelを使用した休憩リソースの構築に関するよくある質問

Laravelでリソースコントローラーを作成するにはどうすればよいですか?

Laravel Eloquentリソースの目的は何ですか? Eloquent ORMモデルとモデルコレクションはJSON形式になります。これは、APIを構築するときに特に役立ちます。これにより、API応答で送信するデータの正確な形状と形式を制御できます。データ出力を制御するための一貫した管理可能な方法を提供します。

laravel APIリソースを使用するにはどうすればよいですか?

Laravel APIリソースを使用するには、最初にリソースクラスを作成する必要があります。これは、Artisan Command PHP Artisan Make:Resource Resourcenameを使用して実行できます。リソースクラスが作成されたら、リソースのToArrayメソッドの変換を定義できます。ルートからリソースを返すには、リソースクラスの新しいインスタンスを返すだけで、変換するデータを渡します。 🎜>リソースクラスのToArrayメソッドを変更することにより、Laravelリソースによって返されたデータをカスタマイズできます。 ToArrayメソッドは、雄弁なモデル属性をAPI応答属性にマッピングする場合です。必要に応じて属性を追加、削除、または変更できますLaravelのリソースとコレクションの違いは何ですか?

laravelのリソースクラスは、JSON構造に変換する必要がある単一のモデルを表し、リソースコレクションクラスはコレクションを表します。リソースの。リソースコレクションは、モデルのアレイまたはコレクションをJSONに変換するために使用されます。

Laravelでリソースコレクションを作成するにはどうすればよいですか? Artisan Command Php Artisan Make:Resource ResourcenAmeCollection - Collection。これにより、コレクションの変換を定義できるリソースコレクションクラスが作成されます。

laravelのルートからリソースコレクションを返すにはどうすればよいですか? Laravelでは、リソースコレクションクラスの新しいインスタンスを返すだけで、変換するモデルのコレクションを渡します。はい、あなたLaravelのリソース応答にメタデータを追加できます。これは、リソースのメソッドを使用してAを定義することで実行できます。 withメソッドは、応答に含めたいメタデータの配列を返す必要があります。

laravelリソースで条件付き属性を処理するにはどうすればよいですか?リソース応答に属性を条件付きで追加します。メソッドが2つの引数を受け入れるとき:属性を含めるべきかどうかを決定する条件と、条件が真である場合の属性の値。はい、Laravelリソースは、Laravelの組み込みのページネーションと完全に機能します。 Laravel Eloquentクエリをページングすると、Laravelは、ページネーションリンクとともにパジネート結果を含むJSON応答を自動的に返します。ページングされた応答をカスタマイズする場合は、リソースコレクションを使用できます。

以上がLaravelでRESTリソースを構築しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート