استخدم Facebook GraphQL مع Laravel 5 أو Lumen. يعتمد على تطبيق PHP هنا. يمكنك العثور على مزيد من المعلومات حول GraphQL في مقدمة GraphQL على مدونة React أو يمكنك قراءة مواصفات GraphQL. هذا عمل مستمر
هذه الحزمة متوافقة مع نموذج Eloquent (أو أي مصدر بيانات آخر). انظر المثال أدناه.
تم إصدار الإصدار 1.0. إذا كنت تقوم بالترقية من الإصدار الأقدم، فيمكنك التحقق من الترقية إلى 1.0.
1- اطلب الحزمة عبر Composer في composer.json
الخاص بك.
{
"require" : {
"folklore/graphql" : " ~1.0.0 "
}
}
2- قم بتشغيل Composer لتثبيت أو تحديث المتطلبات الجديدة.
$ composer install
أو
$ composer update
1- نشر ملف التكوين
$ php artisan vendor:publish --provider= " FolkloreGraphQLServiceProvider "
2- قم بمراجعة ملف التكوين
config/graphql.php
1- قم بإضافة مزود الخدمة إلى ملف config/app.php
الخاص بك
Folklore GraphQL ServiceProvider::class,
2- أضف الواجهة إلى ملف config/app.php
الخاص بك
' GraphQL ' => Folklore GraphQL Support Facades GraphQL::class,
3- نشر ملف التكوين
$ php artisan vendor:publish --provider= " FolkloreGraphQLServiceProvider "
4- قم بمراجعة ملف التكوين
config/graphql.php
1- قم بتحميل مزود الخدمة في bootstrap/app.php
$ app -> register ( Folklore GraphQL LumenServiceProvider::class);
2- لاستخدام الواجهة عليك إلغاء التعليق على السطر $app->withFacades();
في bootstrap/app.php
بعد إلغاء التعليق على هذا السطر، تكون واجهة GraphQL
ممكّنة
$ app -> withFacades ();
3- نشر ملف التكوين
$ php artisan graphql:publish
4- قم بتحميل ملف التكوين في bootstrap/app.php
هام : يجب تنفيذ هذا الأمر قبل تسجيل مزود الخدمة
$ app -> configure ( ' graphql ' );
. . .
$ app -> register ( Folklore GraphQL LumenServiceProvider::class)
5- قم بمراجعة ملف التكوين
config/graphql.php
بدءًا من الإصدار 1.0، يمكنك تحديد مخططات متعددة. يمكن أن يكون وجود مخططات متعددة مفيدًا، على سبيل المثال، إذا كنت تريد نقطة نهاية عامة وأخرى تحتاج إلى المصادقة.
يمكنك تحديد مخططات متعددة في التكوين:
' schema ' => ' default ' ,
' schemas ' => [
' default ' => [
' query ' => [
// 'users' = > 'AppGraphQLQueryUsersQuery'
],
' mutation ' => [
// 'updateUserEmail' = > 'AppGraphQLQueryUpdateUserEmailMutation'
]
],
' secret ' => [
' query ' => [
// 'users' = > 'AppGraphQLQueryUsersQuery'
],
' mutation ' => [
// 'updateUserEmail' = > 'AppGraphQLQueryUpdateUserEmailMutation'
]
]
]
أو يمكنك إضافة مخطط باستخدام الواجهة:
GraphQL:: addSchema ( ' secret ' , [
' query ' => [
' users ' => ' AppGraphQLQueryUsersQuery '
],
' mutation ' => [
' updateUserEmail ' => ' AppGraphQLQueryUpdateUserEmailMutation '
]
]);
بعد ذلك، يمكنك بناء المخطط باستخدام الواجهة:
// Will return the default schema defined by 'schema' in the config
$ schema = GraphQL:: schema ();
// Will return the 'secret' schema
$ schema = GraphQL:: schema ( ' secret ' );
// Will build a new schema
$ schema = GraphQL:: schema ([
' query ' => [
// 'users' = > 'AppGraphQLQueryUsersQuery'
],
' mutation ' => [
// 'updateUserEmail' = > 'AppGraphQLQueryUpdateUserEmailMutation'
]
]);
أو يمكنك طلب نقطة النهاية لمخطط محدد
// Default schema
http://homestead.app/graphql?query=query+FetchUsers{users{id,email}}
// Secret schema
http://homestead.app/graphql/secret?query=query+FetchUsers{users{id,email}}
تحتاج أولاً إلى إنشاء نوع.
namespace App GraphQL Type ;
use GraphQL Type Definition Type ;
use Folklore GraphQL Support Type as GraphQLType ;
class UserType extends GraphQLType
{
protected $ attributes = [
' name ' => ' User ' ,
' description ' => ' A user '
];
/ *
* Uncomment following line to make the type input object .
* http : // graphql . org / learn / schema / #input-types
* /
// protected $ inputObject = true ;
public function fields ()
{
return [
' id ' => [
' type ' => Type:: nonNull (Type:: string ()),
' description ' => ' The id of the user '
],
' email ' => [
' type ' => Type:: string (),
' description ' => ' The email of user '
]
];
}
// If you want to resolve the field yourself , you can declare a method
// with the following format resolve [ FIELD_NAME ] Field ()
protected function resolveEmailField ( $ root , $ args )
{
return strtolower ( $ root -> email );
}
}
أضف النوع إلى ملف التكوين config/graphql.php
' types ' => [
' User ' => ' AppGraphQLTypeUserType '
]
يمكنك أيضًا إضافة النوع باستخدام واجهة GraphQL
، في مزود الخدمة على سبيل المثال.
GraphQL:: addType ( ' AppGraphQLTypeUserType ' , ' User ' );
فأنت بحاجة إلى تحديد استعلام يُرجع هذا النوع (أو القائمة). يمكنك أيضًا تحديد الوسائط التي يمكنك استخدامها في طريقة الحل.
namespace App GraphQL Query ;
use GraphQL ;
use GraphQL Type Definition Type ;
use Folklore GraphQL Support Query ;
use App User ;
class UsersQuery extends Query
{
protected $ attributes = [
' name ' => ' users '
];
public function type ()
{
return Type:: listOf (GraphQL:: type ( ' User ' ));
}
public function args ()
{
return [
' id ' => [ ' name ' => ' id ' , ' type ' => Type:: string ()],
' email ' => [ ' name ' => ' email ' , ' type ' => Type:: string ()]
];
}
public function resolve ( $ root , $ args )
{
if ( isset ( $ args [ ' id ' ])) {
return User:: where ( ' id ' , $ args [ ' id ' ])-> get ();
} else if ( isset ( $ args [ ' email ' ])) {
return User:: where ( ' email ' , $ args [ ' email ' ])-> get ();
} else {
return User:: all ();
}
}
}
أضف الاستعلام إلى ملف التكوين config/graphql.php
' schemas ' => [
' default ' => [
' query ' => [
' users ' => ' AppGraphQLQueryUsersQuery '
],
// ...
]
]
وهذا كل شيء. يجب أن تكون قادرًا على الاستعلام عن GraphQL بطلب إلى عنوان url /graphql
(أو أي شيء تختاره في التكوين الخاص بك). حاول طلب GET مع إدخال query
التالي
query FetchUsers {
users {
id
email
}
}
على سبيل المثال، إذا كنت تستخدم المنزل:
http://homestead.app/graphql?query=query+FetchUsers{users{id,email}}
الطفرة مثل أي استعلام آخر، فهي تقبل الوسائط (التي سيتم استخدامها لإجراء الطفرة) وتعيد كائنًا من نوع معين.
على سبيل المثال طفرة لتحديث كلمة المرور للمستخدم. تحتاج أولاً إلى تحديد الطفرة.
namespace App GraphQL Mutation ;
use GraphQL ;
use GraphQL Type Definition Type ;
use Folklore GraphQL Support Mutation ;
use App User ;
class UpdateUserPasswordMutation extends Mutation
{
protected $ attributes = [
' name ' => ' updateUserPassword '
];
public function type ()
{
return GraphQL:: type ( ' User ' );
}
public function args ()
{
return [
' id ' => [ ' name ' => ' id ' , ' type ' => Type:: nonNull (Type:: string ())],
' password ' => [ ' name ' => ' password ' , ' type ' => Type:: nonNull (Type:: string ())]
];
}
public function resolve ( $ root , $ args )
{
$ user = User:: find ( $ args [ ' id ' ]);
if (! $ user ) {
return null ;
}
$ user -> password = bcrypt ( $ args [ ' password ' ]);
$ user -> save ();
return $ user ;
}
}
كما ترون في طريقة resolve
، يمكنك استخدام الوسائط لتحديث النموذج الخاص بك وإعادته.
يمكنك بعد ذلك إضافة الطفرة إلى ملف التكوين config/graphql.php
' schema ' => [
' default ' => [
' mutation ' => [
' updateUserPassword ' => ' AppGraphQLMutationUpdateUserPasswordMutation '
],
// ...
]
]
يجب أن تكون قادرًا بعد ذلك على استخدام الاستعلام التالي على نقطة النهاية الخاصة بك لإجراء الطفرة.
mutation users {
updateUserPassword(id: "1", password: "newpassword") {
id
email
}
}
إذا كنت تستخدم المنزل:
http://homestead.app/graphql?query=mutation+users{updateUserPassword(id: "1", password: "newpassword"){id,email}}
من الممكن إضافة قواعد التحقق من الصحة إلى الطفرة. يستخدم Laravel Validator
لإجراء التحقق من صحة args
.
عند إنشاء طفرة، يمكنك إضافة طريقة لتحديد قواعد التحقق من الصحة التي تنطبق عن طريق القيام بما يلي:
namespace App GraphQL Mutation ;
use GraphQL ;
use GraphQL Type Definition Type ;
use Folklore GraphQL Support Mutation ;
use App User ;
class UpdateUserEmailMutation extends Mutation
{
protected $ attributes = [
' name ' => ' UpdateUserEmail '
];
public function type ()
{
return GraphQL:: type ( ' User ' );
}
public function args ()
{
return [
' id ' => [ ' name ' => ' id ' , ' type ' => Type:: string ()],
' email ' => [ ' name ' => ' email ' , ' type ' => Type:: string ()]
];
}
public function rules ()
{
return [
' id ' => [ ' required ' ],
' email ' => [ ' required ' , ' email ' ]
];
}
public function resolve ( $ root , $ args )
{
$ user = User:: find ( $ args [ ' id ' ]);
if (! $ user ) {
return null ;
}
$ user -> email = $ args [ ' email ' ];
$ user -> save ();
return $ user ;
}
}
وبدلاً من ذلك، يمكنك تحديد القواعد مع كل وسيطة
class UpdateUserEmailMutation extends Mutation
{
// ...
public function args ()
{
return [
' id ' => [
' name ' => ' id ' ,
' type ' => Type:: string (),
' rules ' => [ ' required ' ]
],
' email ' => [
' name ' => ' email ' ,
' type ' => Type:: string (),
' rules ' => [ ' required ' , ' email ' ]
]
];
}
// ...
}
عند تنفيذ طفرة، فإنه سيتم إرجاع أخطاء التحقق من الصحة. نظرًا لأن مواصفات GraphQL تحدد تنسيقًا معينًا للأخطاء، تتم إضافة رسائل أخطاء التحقق من الصحة إلى كائن الخطأ كسمة validation
إضافية. للعثور على خطأ التحقق من الصحة، يجب عليك التحقق من الخطأ message
تساوي 'validation'
، ثم ستحتوي سمة validation
على رسائل الأخطاء العادية التي يعيدها Laravel Validator.
{
"data" : {
"updateUserEmail" : null
},
"errors" : [
{
"message" : " validation " ,
"locations" : [
{
"line" : 1 ,
"column" : 20
}
],
"validation" : {
"email" : [
" The email is invalid. "
]
}
}
]
}