それでもよくわからない場合は、GraphQLはAPIとやり取りするために使用されるクエリ言語です。 いくつかの利点を提供します RESTなどの代替アーキテクチャと比較して。 GraphQLは、モバイルおよびシングルページアプリケーションのエンドポイントとして使用する場合に非常に便利です。 GraphQLを使用すると、リクエスト内のネストされた関連データを比較的簡単にクエリできるため、開発者はサーバーへの1回のラウンドトリップで必要な正確なデータを取得できます。
Laravel は人気のある、意見の分かれるPHPWebフレームワークです。アプリケーションをすばやく起動して実行するための多数の組み込みツールを提供しますが、開発者は必要に応じて独自の実装をLaravelの組み込みインターフェイスに交換することもできます。
GraphQLとLaravelの両方を取り巻くコミュニティは、オープンソース化されてから劇的に成長しましたが、これら2つのテクノロジーを一緒に使用する方法を説明するドキュメントはまだやや不足しています。
そのため、このチュートリアルでは、Laravelを使用して独自のGraphQLサーバーを作成する方法を紹介します。
始める前に、構築しようとしているプロジェクトに精通する必要があります。そのために、リソースを定義し、GraphQLスキーマを作成します。これは、後でAPIを提供するために使用します。
このアプリケーションは、次の2つのリソースで構成されます。 記事 そして ユーザー 。これらのリソースは、GraphQLスキーマでオブジェクトタイプとして定義されます。
type User { id: ID! name: String! email: String! articles: [Article!]! } type Article { id: ID! title: String! content: String! author: User! }
スキーマを見ると、2つのオブジェクト間に1対多の関係があることがわかります。ユーザーは多くの記事を書くことができ、記事には著者(ユーザー)が割り当てられています。
オブジェクトタイプを定義したので、データを作成してクエリを実行する方法が必要になるので、クエリオブジェクトとミューテーションオブジェクトを定義しましょう。
type Query { user(id: ID!): User users: [User!]! article(id: ID!): Article articles: [Article!]! } type Mutation { createUser(name: String!, email: String!, password: String!): User createArticle(title: String!, content: String!): Article }
GraphQLスキーマを定義したので、Laravelプロジェクトを稼働させましょう。 Composerプロジェクトを介して新しいLaravelを作成することから始めましょう:
$ composer create-project --prefer-dist laravel/laravel laravel-graphql
すべてが機能していることを確認するために、サーバーを起動して、Laravelのデフォルトページが表示されていることを確認しましょう。
$ cd laravel-graphql $ php artisan serve Laravel development server started:
この記事では、SQLiteを使用します。それでは、デフォルトの.env
に次の変更を加えましょう。ファイル:
DB_CONNECTION=sqlite # DB_HOST= # DB_PORT= # DB_DATABASE=database.sqlite # DB_USERNAME= # DB_PASSWORD=
次に、データベースファイルを作成しましょう。
$ touch ./database/database.sqlite
Laravelには、ユーザーモデルといくつかの基本的な移行ファイルが付属しています。簡単にapi_token
を追加しましょうCreateUsersTable
の列Laravelから提供された移行ファイル:
/database/migrations/XXXX_XX_XX_000000_create_users_table.php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateUsersTable extends Migration { /** * Run the migrations. */ public function up() { Schema::create('users', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('name'); $table->string('email')->unique(); $table->timestamp('email_verified_at')->nullable(); $table->string('password'); $table->string('api_token', 80)->unique()->nullable()->default(null); $table->rememberToken(); $table->timestamps(); }); } /** * Reverse the migrations. */ public function down() { Schema::dropIfExists('users'); } }
承認が得られたら、記事の後半でこの追加の列に戻ります。それでは、記事モデルと移行ファイルを作成して、関連するテーブルを作成しましょう。
$ php artisan make:model Article -m
注意: -mオプションは、新しく作成した記事モデルの移行ファイルを作成します。
生成された移行ファイルにいくつかの調整を加えましょう。
use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateArticlesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('articles', function (Blueprint $table) { $table->bigIncrements('id'); $table->unsignedBigInteger('user_id'); $table->string('title'); $table->text('content'); $table->timestamps(); $table->foreign('user_id')->references('id')->on('users'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('articles'); } }
id
を指す外部キーを追加しました私たちのusers
テーブルとtitle
およびcontent
GraphQLスキーマで定義した列。
移行ファイルが定義されたので、先に進んでデータベースに対して実行します。
$ php artisan migrate
次に、必要な関係を定義してモデルを更新しましょう。
app/User.php namespace App; use IlluminateNotificationsNotifiable; use IlluminateFoundationAuthUser as Authenticatable; class User extends Authenticatable { use Notifiable; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', ]; // ... /** * @return IlluminateDatabaseEloquentRelationsHasMany */ public function articles() { return $this->hasMany(Article::class); } }
app/Article.php namespace App; use IlluminateDatabaseEloquentModel; class Article extends Model { /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'title', 'content', ]; /** * @return IlluminateDatabaseEloquentRelationsBelongsTo */ public function user() { return $this->belongsTo(User::class); } }
モデルと移行の設定が完了したので、データベースにシードを設定しましょう。 articles
のシーダークラスを作成することから始めます。およびusers
テーブル:
$ php artisan make:seeder UsersTableSeeder $ php artisan make:seeder ArticlesTableSeeder
次に、SQLiteデータベースにダミーデータを挿入するように設定しましょう。
database/seeds/UsersTableSeeder.php use AppUser; use IlluminateDatabaseSeeder; class UsersTableSeeder extends Seeder { /** * Run the database seeds. */ public function run() { AppUser::truncate(); $faker = FakerFactory::create(); $password = bcrypt('secret'); AppUser::create([ 'name' => $faker->name, 'email' => ' [email protected] ', 'password' => $password, ]); for ($i = 0; $i $faker->name, 'email' => $faker->email, 'password' => $password, ]); } } }
database/seeds/ArticlesTableSeeder.php use AppArticle; use IlluminateDatabaseSeeder; class ArticlesTableSeeder extends Seeder { /** * Run the database seeds. */ public function run() { AppArticle::truncate(); AppArticle::unguard(); $faker = FakerFactory::create(); AppUser::all()->each(function ($user) use ($faker) { foreach (range(1, 5) as $i) { AppArticle::create([ 'user_id' => $user->id, 'title' => $faker->sentence, 'content' => $faker->paragraphs(3, true), ]); } }); } }
/database/seeds/DatabaseSeeder.php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { /** * Seed the application's database. * * @return void */ public function run() { $this->call(UsersTableSeeder::class); $this->call(ArticlesTableSeeder::class); } }
最後に、データベースシーダーを実行して、データベースにデータを取得しましょう。
$ php artisan db:seed
データベースとモデルのセットアップが完了したので、GraphQLサーバーの構築を開始します。現在、Laravelで利用できるソリューションはいくつかありますが、この記事では、 灯台 。
ウェブサイトデザインのマインドマップ
灯台は私が数年前に作成したパッケージであり、最近、その周りの成長するコミュニティからいくつかの驚くべきサポートが見られました。これにより、開発者は、ボイラープレートをほとんど使用せずにLaravelを使用してGraphQLサーバーをすばやくセットアップできると同時に、開発者がほぼすべてのプロジェクトのニーズに合わせてカスタマイズできる柔軟性を備えています。
パッケージをプロジェクトに取り込むことから始めましょう。
$ composer require nuwave/lighthouse:'3.1.*'
次に、Lighthouseの構成ファイルを公開しましょう。
$ php artisan vendor:publish --provider='NuwaveLighthouseLighthouseServiceProvider' --tag=config
注意: --tag=config
を削除するだけで、Lighthouseのデフォルトスキーマファイルを公開することもできます。オプション。ただし、この記事では、スキーマファイルを最初から作成します。
config/lighthouse.php
を見てみましょうファイルスキーマファイルをLighthouseに登録するために使用される設定に気付くでしょう。
'schema' => [ 'register' => base_path('graphql/schema.graphql'), ],
それでは、先に進んでスキーマファイルを作成し、ユーザーオブジェクトタイプとクエリを設定しましょう。
$ mkdir graphql $ touch ./graphql/schema.graphql /graphql/schema.graphql type User { id: ID! name: String! email: String! } type Query { user(id: ID! @eq): User @find users: [User!]! @all }
スキーマは、という識別子をいくつか追加したことを除けば、前に定義したものと似ていることがわかります。 スキーマディレクティブ 。
定義されたスキーマを分解してみましょう。私たちの最初の定義は オブジェクトタイプ と呼ばれるUser
これは私たちのAppUser
と関係があります雄弁なモデル。 id
、name
を定義しましたおよびemail
User
からクエリできるフィールドとしてモデル。または、これはpassword
、created_at
を意味しますおよびupdated_at
列は、APIからクエリできないフィールドです。
次に、Query
がありますAPIへのエントリポイントであり、データのクエリに使用できるタイプ。最初のフィールドはusers
ですUser
の配列を返すフィールドオブジェクトタイプ。 @all
ディレクティブは、User
を使用してEloquentクエリを実行するようにLighthouseに指示します。モデル化し、すべての結果を取得します。これは、以下を実行するのと同じです。
$users = AppUser::all();
注意: 灯台はAppUser
でモデルを探すことを知っていますnamespaces
のための名前空間構成ファイルで定義されているオプション。
クエリタイプで2番目に定義されたフィールドは、user
の呼び出しです。引数として、単一のid
を返しますオブジェクトタイプ。また、Lighthouseが自動的にクエリを作成し、単一のUser
を返すのに役立つ2つのディレクティブを追加しました。モデル。 User
ディレクティブは、Lighthouseに@eq
に場所を追加するように指示します列、およびid
ディレクティブは、Lighthouseに単一の結果を返すように指示します。 Laravelのクエリビルダーを使用してこのクエリを作成するには、次のようになります。
@find
Lighthouseがスキーマを使用してクエリを作成する方法について少し洞察が得られたので、サーバーを実行してデータのクエリを開始しましょう。サーバーを実行することから始めます。
$user = AppUser::where('id', $args['id'])->first();
GraphQLエンドポイントをクエリするには、ターミナルまたはPostmanなどの標準クライアントでcURLコマンドを実行できます。ただし、GraphQLのすべてのメリット(オートコンプリート、エラーの強調表示、ドキュメントなど)を取得するには、次を使用します。 GraphQLプレイグラウンド (リリースダウンロード ここに )。
Playgroundを起動するときは、[URLエンドポイント]タブをクリックして、「 http:// localhost:8000 / graphql GraphQLPlaygroundをサーバーにポイントします。エディターの左側で、データをクエリできるので、データベースにシードしたすべてのユーザーを尋ねることから始めましょう。
$ php artisan serve Laravel development server started:
IDEの中央にある再生ボタンを押したとき(またはクリックしたとき) Ctrl + Enter )、右側にサーバーのJSON出力が表示されます。これは次のようになります。
{ users { id email name } }
注意: Fakerを使用してデータベースをシードしたため、{ 'data': { 'users': [ { 'id': '1', 'email': ' [email protected] ', 'name': 'Carolyn Powlowski' }, { 'id': '2', 'email': ' [email protected] ', 'name': 'Elouise Raynor' }, { 'id': '3', 'email': ' [email protected] ', 'name': 'Mrs. Dejah Wiza' }, ... ] } }
のデータおよびemail
フィールドは異なります。
それでは、1人のユーザーにクエリを実行してみましょう。
name
また、1人のユーザーに対して次の出力が得られます。
{ user(id: 1) { email name } }
このようなデータのクエリを開始するのは良いことですが、クエリを実行したいプロジェクトに参加する可能性はほとんどありません。 すべて データの一部なので、ページ付けを追加してみましょう。灯台の幅広い範囲を見るとき 組み込みディレクティブ 、{ 'data': { 'user': { 'email': ' [email protected] ', 'name': 'Carolyn Powlowski' } } }
がありますディレクティブはすぐに利用できるので、次のようにスキーマのクエリオブジェクトを更新しましょう。
@paginate
GraphQL Playgroundをリロードした場合( Ctrl / Cmd + R )そして私たちのtype Query { user(id: ID! @eq): User @find users: [User!]! @paginate }
を試してみてくださいもう一度クエリを実行すると、users
というエラーメッセージが表示されるので、どうなりましたか?舞台裏では、Lighthouseはスキーマを操作してページ付けされた結果のセットを取得し、Cannot query field 'id' on type 'UserPaginator'
の戻り値の型を変更します。フィールド。
GraphQL Playgroundの[ドキュメント]タブでスキーマを調べて、詳しく見ていきましょう。 users
を見てくださいフィールド、それはusers
を返していますこれは、ユーザーの配列と定義された灯台を返しますUserPaginator
タイプ:
PaginatorInfo
Laravelの組み込みのページ付けに精通している場合は、type UserPaginator { paginatorInfo: PaginatorInfo! data: [User!]! } type PaginatorInfo { count: Int! currentPage: Int! firstItem: Int hasMorePages: Boolean! lastItem: Int lastPage: Int! perPage: Int! total: Int! }
で使用可能なフィールドタイプはおそらくあなたに非常に馴染みがあるように見えるでしょう。したがって、2人のユーザーをクエリし、システム内のユーザーの総数を取得し、循環するページがまだあることを確認するには、次のクエリを送信します。
PaginatorInfo
これにより、次の応答が得られます。
{ users(count:2) { paginatorInfo { total hasMorePages } data { id name email } } }
一般に、アプリケーションを開発するとき、データの多くは関連しています。私たちの場合、{ 'data': { 'users': { 'paginatorInfo': { 'total': 11, 'hasMorePages': true }, 'data': [ { 'id': '1', 'name': 'Carolyn Powlowski', 'email': ' [email protected] ' }, { 'id': '2', 'name': 'Elouise Raynor', 'email': ' [email protected] ' }, ] } } }
多くのUser
を記述できるので、その関係をユーザータイプに追加して、Articles
を定義しましょう。タイプ:
Article
ここでは、Lighthouseが提供する別のスキーマディレクティブtype User { id: ID! name: String! email: String! articles: [Article!]! @hasMany } type Article { id: ID! title: String! content: String! }
を使用しています。これは、Lighthouseに@hasMany
を通知します。モデルにはUser
がありますIlluminateDatabaseEloquentRelationsHasMany
との関係モデル。
次に、新しく定義した関係をクエリしてみましょう。
Article
これにより、次の応答が返されます。
{ user(id:1) { articles { id title } } }
最後に、関係を逆にして、{ 'data': { 'user': { 'articles': [ { 'id': '1', 'title': 'Aut velit et temporibus ut et tempora sint.' }, { 'id': '2', 'title': 'Voluptatem sed labore ea voluptas.' }, { 'id': '3', 'title': 'Beatae sit et maxime consequatur et natus totam.' }, { 'id': '4', 'title': 'Corrupti beatae cumque accusamus.' }, { 'id': '5', 'title': 'Aperiam quidem sit esse rem sed cupiditate.' } ] } } }
を追加しましょう。私たちとの関係author
灯台のArticle
を使用したオブジェクトタイプスキーマディレクティブと@belongsTo
の更新:
Query
オプションのtype Article { id: ID! title: String! content: String! author: User! @belongsTo(relation: 'user') } type Query { user(id: ID! @eq): User @find users: [User!]! @paginate article(id: ID! @eq): Article @find articles: [Article!]! @paginate }
が追加されたことがわかりますrelation
への引数指令。これにより、Lighthouseは@belongsTo
を使用するようになります。モデルのArticles
関係を作成し、それをuser
に割り当てますフィールド。
それでは、記事のリストを照会して、関連する著者を取得しましょう。
author
そして、サーバーから次のものを取得する必要があります。
{ articles(count:2) { paginatorInfo { total hasMorePages } data { id title author { name email } } } }
データをクエリできるようになったので、いくつかのミューテーションを作成して、新しいユーザーと記事を作成しましょう。まず、ユーザーモデルから始めます。
{ 'data': { 'articles': { 'paginatorInfo': { 'total': 55, 'hasMorePages': true }, 'data': [ { 'id': '1', 'title': 'Aut velit et temporibus ut et tempora sint.', 'author': { 'name': 'Carolyn Powlowski', 'email': ' [email protected] ' } }, { 'id': '2', 'title': 'Voluptatem sed labore ea voluptas.', 'author': { 'name': 'Carolyn Powlowski', 'email': ' [email protected] ' } } ] } } }
それでは、このスキーマ定義を分解してみましょう。 type Mutation { createUser( name: String! email: String! @rules(apply: ['email', 'unique:users']) password: String! @bcrypt @rules(apply: ['min:6']) ): User @create }
というミューテーションを作成しましたこれは3つの引数(createUser
、name
、およびemail
)を取ります。 password
を適用しました@rules
の両方へのディレクティブおよびemail
引数。これは、に似ているため、少し見覚えがあるかもしれません。 検証ロジック Laravelはそのコントローラーを提供します。
次に、password
を添付しました@bcrypt
へのディレクティブフィールド。これにより、新しく作成されたモデルに渡される前にパスワードが暗号化されます。
最後に、新しいモデルの作成を支援するために、Lighthouseはpassword
を提供します定義した引数を取り、新しいモデルを作成するスキーマディレクティブ。コントローラで同じロジックを実行すると、次のようになります。
@create
createUserミューテーションフィールドが設定されたので、先に進んで、次のようにGraphQLPlaygroundで実行します。
namespace AppHttpControllers; use IlluminateHttpRequest; class UserController extends Controller { /** * Create a new user. * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function store(Request $request) { $data = $this->validate($request, [ 'email' => ['email', 'unique:users'], 'password' => ['min:6'] ]); $user = AppUser::create($data); return response()->json(['user' => $user]); } }
次の出力が得られるはずです。
mutation { createUser( name:'John Doe' email:' [email protected] ' password: 'secret' ) { id name email } }
{ 'data': { 'createUser': { 'id': '12', 'name': 'John Doe', 'email': ' [email protected] ' } } }
を追加する必要があるためuser_id
へモデルは、GraphQL / Lighthouseでの認証と承認を検討する絶好の機会です。
ユーザーを認証するには、ユーザーにArticle
を提供する必要があるため、それを処理するためのミューテーションを作成して、api_token
を追加します。ロジックを処理するカスタムリゾルバーをLighthouseにポイントするディレクティブ。リゾルバをと同じパターンで設定します コントローラーの定義 Laravelで@field
を使用引数。
resolver
で以下に定義されているディレクティブでは、@field
がいつLighthouseに通知されますかミューテーションが実行されたら、login
を使用しますcreateToken
のメソッドクラス:
AppGraphQLMutationsAuthMutator
注意: ここに名前空間全体を含める必要はありません。 type Mutation { # ... login( email: String! password: String! ): String @field(resolver: ' [email protected] ') }
で設定ファイルには、ミューテーション用に定義された名前空間がlighthouse.php
として設定されていることがわかります。すでに—ただし、必要に応じて完全な名前空間を使用できます。
Lighthouseのジェネレーターを使用して、新しいミューテータークラスを作成しましょう。
App\GraphQL\Mutations
次に、次のようにリゾルバー関数を更新しましょう。
$ php artisan lighthouse:mutation AuthMutator
リゾルバーを設定したので、それをテストして、GraphQLPlaygroundで次のミューテーションを使用してAPIトークンを取得してみましょう。
namespace AppGraphQLMutations; use IlluminateSupportArr; use IlluminateSupportStr; use IlluminateSupportFacadesAuth; use GraphQLTypeDefinitionResolveInfo; use NuwaveLighthouseSupportContractsGraphQLContext; class AuthMutator { /** * Return a value for the field. * * @param null $rootValue Usually contains the result returned from the parent field. In this case, it is always `null`. * @param mixed[] $args The arguments that were passed into the field. * @param NuwaveLighthouseSupportContractsGraphQLContext $context Arbitrary data that is shared between all fields of a single query. * @param GraphQLTypeDefinitionResolveInfo $resolveInfo Information about the query itself, such as the execution state, the field name, path to the field from the root, and more. * @return mixed */ public function resolve($rootValue, array $args, GraphQLContext $context, ResolveInfo $resolveInfo) { $credentials = Arr::only($args, ['email', 'password']); if (Auth::once($credentials)) { $token = Str::random(60); $user = auth()->user(); $user->api_token = $token; $user->save(); return $token; } return null; } }
次のようにトークンを返送する必要があります。
mutation { login(email:' [email protected] ', password:'secret') }
注意: ログインミューテーションから返されたトークンをコピーして、後で使用できるようにしてください。
次に、認証されたユーザーを返すクエリフィールドを追加して、ロジックが機能することを確認します。 { 'data': { 'login': 'VJCz1DCpmdvB9WatqvWbXBP2RN8geZQlrQatUnWIBJCdbAyTl3UsdOuio3VE' } }
というフィールドを追加します灯台のme
を使用します現在認証されているユーザーを返すディレクティブ。 @auth
も設定しますguard
に等しい引数それがユーザーを認証する方法だからです。
api
それでは、クエリを実行しましょう。 GraphQL Playgroundでは、下部にある[HttpHeaders]タブをダブルクリックしてリクエストヘッダーを設定できます。 JSONオブジェクトを使用してヘッダーを追加するため、各リクエストにベアラートークンを追加するには、次を追加します。
type Query { # ... me: User @auth(guard: 'api') }
注意: ベアラトークンを、実行時に受け取ったトークンに置き換えます。 ログインする クエリ。
それでは、{ 'Authorization': 'Bearer VJCz1DCpmdvB9WatqvWbXBP2RN8geZQlrQatUnWIBJCdbAyTl3UsdOuio3VE' }
を実行しましょうクエリ:
me
次のような出力が得られるはずです。
{ me { email articles { id title } } }
認証が正しく機能していることがわかったので、最後のミューテーションを作成して、現在認証されているユーザーを使用して記事を作成しましょう。 { 'data': { 'me': { 'email': ' [email protected] ', 'articles': [ { 'id': '1', 'title': 'Rerum perspiciatis et quos occaecati exercitationem.' }, { 'id': '2', 'title': 'Placeat quia cumque laudantium optio voluptatem sed qui.' }, { 'id': '3', 'title': 'Optio voluptatem et itaque sit animi.' }, { 'id': '4', 'title': 'Excepturi in ad qui dolor ad perspiciatis adipisci.' }, { 'id': '5', 'title': 'Qui nemo blanditiis sed fugit consequatur.' } ] } } }
を使用しますLighthouseをリゾルバーにポイントするディレクティブ。@field
も含まれます。ユーザーが確実にログインするようにするディレクティブ。
@middleware
まず、ミューテーションクラスを生成しましょう。
type Mutation { # ... createArticle(title: String!, content: String!): Article @field(resolver: ' [email protected] ') @middleware(checks: ['auth:api']) }
次に、ミューテーターを次のロジックで更新しましょう。
$ php artisan lighthouse:mutation ArticleMutator
注意: デフォルトの名前をnamespace AppGraphQLMutations; use NuwaveLighthouseSupportContractsGraphQLContext; class ArticleMutator { /** * Return a value for the field. * * @param null $rootValue * @param mixed[] $args * @param NuwaveLighthouseSupportContractsGraphQLContext $context * @return mixed */ public function create($rootValue, array $args, GraphQLContext $context) { $article = new AppArticle($args); $context->user()->articles()->save($article); return $article; } }
に変更しましたresolve
に機能します。すべてのリゾルバーに対して新しいクラスを作成する必要はありません。代わりに、より理にかなっている場合は、ロジックをグループ化できます。
最後に、新しいミューテーションを実行して、出力を確認しましょう。必ずcreate
を保持してください[HTTPヘッダー]タブの前のクエリのヘッダー:
Authorization
次の出力が得られるはずです。
mutation { createArticle( title:'Building a GraphQL Server with Laravel' content:'In case you're not currently familiar with it, GraphQL is a query language used to interact with your API...' ) { id author { id email } } }
要約すると、Lighthouseを活用してLaravelプロジェクト用のGraphQLサーバーを作成しました。いくつかの組み込みスキーマディレクティブを利用し、クエリとミューテーションを作成し、承認と認証を処理しました。
灯台を使用すると、さらに多くのことができます(独自の灯台を作成できるようにするなど) カスタムスキーマディレクティブ )しかし、この記事の目的のために、私たちは基本に固執し、かなり少ない定型文でGraphQLサーバーを稼働させることができました。
次回、モバイルまたはシングルページアプリケーション用のAPIを設定する必要がある場合は、必ず検討してください。 GraphQL データをクエリする方法として!
関連: 完全なユーザー認証とアクセス制御– Laravel Passportチュートリアル、Pt。 1GraphQL仕様を実装し、クライアントがクエリを実行できるようにAPIエンドポイントを公開するサーバー。
GraphQLは強く型付けされ、自己文書化されており、宣言型データフェッチを採用しています。これにより、クライアントは必要な正確なデータをクエリできるほか、強力で詳細な開発者ツールを構築できます。
GraphQLは通常、関連データをクエリする必要があるシナリオや、サーバーへの複数のラウンドトリップがカスタマーエクスペリエンスに悪影響を与える可能性がある環境で使用されます。
Laravelは、PHP言語で構築されたWebフレームワークです。開発者がすばやく使用および反復できる包括的なツールキットを提供することで開発エクスペリエンスを容易にする機能があるため、需要が高くなっています。
Laravelは、箱から出してWebアプリケーションを構築するために必要なツールの多くを提供します。また、オープンソースであるため、コミュニティの人々は、最新のWeb開発における多くの一般的なエッジケースに貢献することができます。
Laravelは通常、バックエンドWebサーバーと考えられています。ただし、フロントエンドでの開発を容易にする「ブレード」と呼ばれる表現力豊かなテンプレートエンジンが含まれています。
現在、Laravelはあらゆる言語の中で最も人気のあるWebフレームワークの1つであり、そのコミュニティは急速に成長し続けています。