ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP6 での GraphQL の使用

ThinkPHP6 での GraphQL の使用

王林
王林オリジナル
2023-06-20 23:25:301707ブラウズ

フロントエンドとバックエンドの分離の普及により、従来の 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

Configuration

GraphQL を導入した後、ThinkPHP6 構成ファイルに必要な設定をいくつか追加する必要があります。 config/app.php ファイルを開き、providers 配列を見つけて、GraphQL ServiceProvider を追加します。

'providers' => [
    // ...
    OverblogGraphQLBundleGraphQLBundleServiceProvider::class,
]

次に、GraphQL ルートを定義する必要があります。は、GraphQL クエリ コントローラーを指します。ここでは、別のルーティング ファイル route/graphql.php を使用できます。これは、ルートのリストを返します。

<?php

use thinkacadeRoute;

Route::any('/graphql', 'graphql/index')->name('graphql');

ここで、graphql/index は、GraphQL クエリ コントローラーを指します。 。

Controller

次に、すべての 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 ドキュメントを参照してください。

Query

コントローラーとスキーマが定義されたので、ブラウザーを通じて 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 サイトの他の関連記事を参照してください。

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