GraphQL هي لغة استعلام لواجهات برمجة التطبيقات (APIs) وبيئة تشغيل لتنفيذ تلك الاستعلامات باستخدام بياناتك الحالية.
الاستعلامات (Queries)
الاستعلام الأساسي والاستجابة
{ status }
JSON Response:
{
"data": {
"status": "available"
}
}
الكائنات المتداخلة (Nested Objects)
{
hero {
name
height
}
}
القوائم والمصفوفات (Lists)
{
friends {
name
}
}
المعاملات (Arguments)
{
hero(id: "1000") {
id
name
}
}
الأسماء المستعارة (Aliases)
{
luke: hero(id: "1000") {
name
}
han: hero(id: "1001") {
name
}
}
أسماء العمليات والمتغيرات (Variables)
Query Definition:
query FindHero($id: String!) {
hero(id: $id) {
name
}
}
Variables Payload (JSON):
{
"id": "1000"
}
التبديلات والتعديلات (Mutations)
mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
createReview(episode: $ep, review: $review) {
stars
commentary
}
}
القطع المضمنة للاستعلامات المتعددة (Inline Fragments)
{
search(q: "john") {
id
... on User {
name
}
... on Comment {
body
author {
name
}
}
}
}
التشغيل عبر بروتوكول HTTP
طلب GET عبر fetch
fetch('https://api.example.com/graphql?query={me{name}}')
طلب POST عبر fetch
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
query: 'query GetHero($id: String!) { hero(id: $id) { name } }',
variables: { id: '1000' }
})
})
لغة تعريف المخطط (Schema Definition Language - SDL)
الأنواع الأساسية
type Query {
me: User
users(limit: Int): [User]
}
type User {
id: ID!
name: String
}
الأنواع القياسية المدمجة (Scalar Types)
| النوع القياسي | الوصف |
|---|---|
Int |
عدد صحيح 32-بت ذو إشارة |
Float |
قيمة فاصلة عائمة مزدوجة الدقة |
String |
سلسلة محارف مشفرة بـ UTF-8 |
Boolean |
قيمة منطقية true أو false |
ID |
معرف فريد يتم تمثيله كنص |
الكلمات المفتاحية لتعريف الأنواع
| الكلمة المفتاحية | الوصف |
|---|---|
type |
نوع كائن يمثل مجموعة من الحقول |
scalar |
نوع قياسي أساسي مخصص |
interface |
نوع مجرد يحدد مجموعة حقول يجب تطبيقها |
union |
نوع مجرد يجمع بين عدة أنواع كائنات متميزة |
enum |
تعداد لقيم نصية مسموح بها ومحددة |
input |
كائن معقد يتم تمريره كمعامل إلى العمليات |
معدلات الأنواع (Type Modifiers)
| المعدل | الوصف |
|---|---|
String |
نص اختياري يقبل القيمة الفارغة (Nullable) |
String! |
نص إلزامي غير قابل للفراغ (Non-nullable) |
[String] |
قائمة اختيارية تحتوي على نصوص اختيارية |
[String]! |
قائمة إلزامية تحتوي على نصوص اختيارية |
[String!]! |
قائمة إلزامية تحتوي على نصوص إلزامية |
الواجهات (Interfaces)
interface Entity {
id: ID!
}
type User implements Entity {
id: ID!
name: String
}
التعدادات (Enums)
enum Direction {
NORTH
EAST
SOUTH
WEST
}
الاتحادات (Unions)
union SearchResult = Human | Droid | Starship
type Query {
search(text: String): [SearchResult]
}