ホームページ > 記事 > PHPフレームワーク > ThinkPHP6 での GraphQL の使用
フロントエンドとバックエンドの分離の普及により、従来の RESTful API は現代のインターネットのニーズを満たすことができなくなりました。問題は、各リソースの API を個別に設計する必要があり、各リクエストは固定構造のみを返すため、多数の冗長なリクエストとデータが発生し、プログラムが非常に煩雑になり、開発に適さないことです。そしてメンテナンス。
GraphQL は、ネットワーク データ送信量とリクエスト数を効果的に削減できる新しいタイプの API クエリ言語およびランタイムであり、この問題を解決します。 RESTful API とは異なり、GraphQL はタイプとスキーマを定義することによってデータを処理するため、クライアントは必要なデータとタイプを正確にリクエストできるため、データの効率と応答速度が向上します。
PHP 開発では、ThinkPHP6 はオブジェクト指向プログラミング、ルーティング、テンプレート、データベース操作などの強力な機能を提供する人気の Web フレームワークです。この記事では、ThinkPHP6でGraphQLを使う方法を紹介します。
始める前に、PHP と Composer がインストールされていること、および ThinkPHP6 プロジェクトの基本構造を理解していることを確認する必要があります。次に、GraphQL をプロジェクトに導入する必要があります。
composer require overblog/graphql-bundle:^0.12.17
GraphQL を導入した後、ThinkPHP6 構成ファイルに必要な設定をいくつか追加する必要があります。 config/app.php
ファイルを開き、providers
配列を見つけて、GraphQL ServiceProvider を追加します。
'providers' => [ // ... OverblogGraphQLBundleGraphQLBundleServiceProvider::class, ]
次に、GraphQL ルートを定義する必要があります。は、GraphQL クエリ コントローラーを指します。ここでは、別のルーティング ファイル route/graphql.php
を使用できます。これは、ルートのリストを返します。
<?php use thinkacadeRoute; Route::any('/graphql', 'graphql/index')->name('graphql');
ここで、graphql/index
は、GraphQL クエリ コントローラーを指します。 。
次に、すべての GraphQL クエリとミューテーションの処理を担当する GraphQL コントローラーを作成する必要があります。 appcontrollerGraphql.php
ファイルを作成し、空のクラス Graphql
を定義し、OverblogGraphQLBundleControllerController
を継承します。
<?php namespace appcontroller; use OverblogGraphQLBundleControllerController; class Graphql extends Controller { // }
このクラスでは、Define が必要です。 GraphQL クエリとミューテーションを処理するためのいくつかのメソッド。 PHP では、アノテーションを使用してこれらのメソッドの操作を定義できます。したがって、注釈サポートを追加する必要があります。 doctrine/annotations
ライブラリはここで使用され、Composer を使用してインストールされます:
composer require doctrine/annotations:^1.13.1
次に、ThinkPHP6 でアノテーションを構成する必要があります。 config/app.php
ファイルを開き、providers
配列を編集し、DoctrineCommonAnnotationsAnnotationReader
クラスを追加します。
'providers' => [ // ... DoctrineCommonAnnotationsAnnotationReader::class, ]
コントローラーでは、次のことができます。 GraphQL クエリのルーティング アドレスを指定する @Route
アノテーションと、クエリ パラメーターやその他の情報を自動的に変換する @ParamConverter
アノテーションを定義します。たとえば、単純なクエリ メソッドを定義します。
use OverblogGraphQLBundleAnnotation as GQL; /** * @GQLType(type="MySchema") * @GQLQueryList() */ public function index() { return []; }
その中で、@Type
アノテーションは戻り値の型を指定し、@QueryList
アノテーションはこれが返される値の型を指定します。メソッドはクエリメソッドです。テストを容易にするために、ここでは空の配列が返されます。次に、グラフ クエリ パターンを定義する必要があります。
パターンでは、GraphQLのグラフスキームを定義します。 GraphQL
クラスを使用してこれを作成し、@Object
、@Route
、および @Field
アノテーションを使用して型、メソッド、フィールドを定義します。 。たとえば、ユーザーのリストをクエリし、UserQuery
クラスを定義するとします。
use GraphQLTypeDefinitionObjectType; use OverblogGraphQLBundleAnnotation as GQL; /** * @GQLType(type="query") */ class UserQuery extends ObjectType { /** * @GQLField(type="[User]", name="users") */ protected function getUsers() { return // return data from database or service; } }
ここでは、GraphQLTypeDefinitionObjectType
クラスを基本クラスとして使用します。 UserQuery。クエリ フィールドと戻り値の型を定義します。ユーザーのリストを返す getUsers
メソッドを追加しました。また、このフィールドのタイプと名前を指定する @Field
注釈も追加しました。この例では、ユーザー タイプのリストを返します。
ここでは、type="[User]"
を使用してユーザー タイプを指定します。これは、ユーザー タイプの定義方法に関連しています。 User
型を記述することもできます。具体的な定義方法については、GitHub の overblog/graphql-bundle
ドキュメントを参照してください。
コントローラーとスキーマが定義されたので、ブラウザーを通じて GraphQL エンドポイントにアクセスできます。リクエスト アドレスは http://project.com/graphql?クエリ={ユーザー{id,name}}
。ここでは、POST リクエストを使用し、クエリ パラメータを渡します。
{ "query": "{users{id,name}}" }
このリクエストは、ID や名前などの情報を含むデータを JSON 形式で返します。その形式は次のようになります。
{ "data": { "users": [ { "id": 1, "name": "Alice" }, { "id": 2, "name": "Bob" } ] } }
変数を使用してパラメータを渡すこともできます。たとえば、ユーザー ID 1 の詳細をクエリしたいとします。
{ "query": "query GetUser($id:Int){user(id:$id){id,name,email}}", "variables": {"id":1} }
これにより、ユーザー ID、名前、電子メール アドレスなどの詳細が返されます。ここでは、$
記号を使用してパラメータを渡し、クエリするユーザーの ID を指定します。 variables
キーワードを使用して実際の変数を定義し、より正確なクエリ パラメーターを提供します。
この記事では、ThinkPHP6 フレームワークで GraphQL を使用する方法を紹介しました。まず、GraphQL の背景と利点を説明し、次に必要なパッケージをインストールしてルーティングを構成しました。次に、簡単なクエリの例を定義し、アノテーションを使用してそのタイプと操作を定義します。最後に、GraphQL の変数とクエリ メソッドを紹介し、GraphQL を使用してデータをクエリおよび処理する方法を示しました。実際の開発では、必要に応じて GraphQL の型と操作をカスタマイズして、より複雑な動作やクエリ機能を実現できます。
以上がThinkPHP6 での GraphQL の使用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。