apeescape2.com
  • メイン
  • ツールとチュートリアル
  • 計画と予測
  • ヒントとツール
  • 収益と成長
バックエンド

Laravelを使用したGraphQLサーバーの構築

それでもよくわからない場合は、GraphQLはAPIとやり取りするために使用されるクエリ言語です。 いくつかの利点を提供します RESTなどの代替アーキテクチャと比較して。 GraphQLは、モバイルおよびシングルページアプリケーションのエンドポイントとして使用する場合に非常に便利です。 GraphQLを使用すると、リクエスト内のネストされた関連データを比較的簡単にクエリできるため、開発者はサーバーへの1回のラウンドトリップで必要な正確なデータを取得できます。

Laravel は人気のある、意見の分かれるPHPWebフレームワークです。アプリケーションをすばやく起動して実行するための多数の組み込みツールを提供しますが、開発者は必要に応じて独自の実装をLaravelの組み込みインターフェイスに交換することもできます。

GraphQLとLaravelの両方を取り巻くコミュニティは、オープンソース化されてから劇的に成長しましたが、これら2つのテクノロジーを一緒に使用する方法を説明するドキュメントはまだやや不足しています。



そのため、このチュートリアルでは、Laravelを使用して独自のGraphQLサーバーを作成する方法を紹介します。

プロジェクトの概要

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 }

Laravelプロジェクトの設定

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

Laravel灯台とGraphQLサーバー

データベースとモデルのセットアップが完了したので、GraphQLサーバーの構築を開始します。現在、Laravelで利用できるソリューションはいくつかありますが、この記事では、 灯台 。

ウェブサイトデザインのマインドマップ

灯台は私が数年前に作成したパッケージであり、最近、その周りの成長するコミュニティからいくつかの驚くべきサポートが見られました。これにより、開発者は、ボイラープレートをほとんど使用せずにLaravelを使用してGraphQLサーバーをすばやくセットアップできると同時に、開発者がほぼすべてのプロジェクトのニーズに合わせてカスタマイズできる柔軟性を備えています。

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

GraphQLAPIのクエリ

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 } } } }

GraphQLミューテーション

データをクエリできるようになったので、いくつかのミューテーションを作成して、新しいユーザーと記事を作成しましょう。まず、ユーザーモデルから始めます。

{ '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 } }

GraphQLの認証と承認

{ '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。 1

基本を理解する

GraphQLサーバーとは何ですか?

GraphQL仕様を実装し、クライアントがクエリを実行できるようにAPIエンドポイントを公開するサーバー。

GraphQLの利点は何ですか?

GraphQLは強く型付けされ、自己文書化されており、宣言型データフェッチを採用しています。これにより、クライアントは必要な正確なデータをクエリできるほか、強力で詳細な開発者ツールを構築できます。

GraphQLが使用されるのはなぜですか?

GraphQLは通常、関連データをクエリする必要があるシナリオや、サーバーへの複数のラウンドトリップがカスタマーエクスペリエンスに悪影響を与える可能性がある環境で使用されます。

Laravelとは何ですか?なぜそれが使用されるのですか?

Laravelは、PHP言語で構築されたWebフレームワークです。開発者がすばやく使用および反復できる包括的なツールキットを提供することで開発エクスペリエンスを容易にする機能があるため、需要が高くなっています。

Laravelの利点は何ですか?

Laravelは、箱から出してWebアプリケーションを構築するために必要なツールの多くを提供します。また、オープンソースであるため、コミュニティの人々は、最新のWeb開発における多くの一般的なエッジケースに貢献することができます。

Laravelはフロントエンドですか、それともバックエンドですか?

Laravelは通常、バックエンドWebサーバーと考えられています。ただし、フロントエンドでの開発を容易にする「ブレード」と呼ばれる表現力豊かなテンプレートエンジンが含まれています。

Laravelは人気がありますか?

現在、Laravelはあらゆる言語の中で最も人気のあるWebフレームワークの1つであり、そのコミュニティは急速に成長し続けています。

ロボットプログラミング入門チュートリアル

技術

ロボットプログラミング入門チュートリアル
リモートワークとサービスのグローバル化

リモートワークとサービスのグローバル化

リモートの台頭

人気の投稿
効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用
効果的なエンジニアリング管理のための根本的な率直なフレームワークの使用
落ち着いて新しい開発チームに移行する
落ち着いて新しい開発チームに移行する
スマートソフトウェアの価格戦略の究極のガイド
スマートソフトウェアの価格戦略の究極のガイド
ボリビアの開発者YasettAcuranaが6回目のApeeScape奨学金を獲得
ボリビアの開発者YasettAcuranaが6回目のApeeScape奨学金を獲得
ミッションステートメント:効果的に使用された無形資産が企業価値を生み出す方法
ミッションステートメント:効果的に使用された無形資産が企業価値を生み出す方法
 
製品戦略:基本的な概念とプロセスのガイド
製品戦略:基本的な概念とプロセスのガイド
経験がすべて–究極のUXガイド
経験がすべて–究極のUXガイド
デザインニュース-世界中からのイノベーション
デザインニュース-世界中からのイノベーション
正確なデザイン– Adob​​eXDレビュー
正確なデザイン– Adob​​eXDレビュー
契約交渉-注意を払うべき欺瞞的な条項
契約交渉-注意を払うべき欺瞞的な条項
人気の投稿
  • そこ対一人対私
  • 私募不動産ファンド
  • 担当するCFOとは
  • クレジットカード情報をバイパスする方法
  • パワーピボットとピボットテーブル
  • どこにコードを書くことができますか
カテゴリー
収益と成長 モバイル モバイルデザイン 収益性と効率性 仕事の未来 トレンド Uxデザイン アジャイル プロセスとツール ライフスタイル

© 2021 | 全著作権所有

apeescape2.com