ساختار داده یا Schema
GraphQL از Schema به عنوان بخش اساسی تعریف ساختار دادهها و نحوه تعامل با آنها استفاهد میشود. Schema بهصورت یک قرارداد بین کلاینت و سرور عمل میکند و مشخص میکند که چه نوع دادههایی میتوان درخواست کرد، چه عملیاتهایی (کوئری، موتیشن، سابسکریپشن) در دسترس هستند و ساختار پاسخها چگونه خواهد بود.
Schema در GraphQL با استفاده از یک زبان به نام SDL (Schema Definition Language) تعریف میشود. این تعریف شامل موارد زیر است:
- Typeها: اشیاء دادهای که ساختار دادههای موجود در سیستم را توصیف میکنند (مثل User، Post).
- Query: عملیات خواندن دادهها (مثل دریافت اطلاعات کاربر یا لیست پستها).
- Mutation: عملیات تغییر دادهها (مثل ایجاد، بهروزرسانی یا حذف یک پست).
- Subscription: برای دریافت بهروزرسانیهای بلادرنگ (مثل اطلاعرسانی وقتی پستی جدید اضافه میشود).
- Input Types: برای دریافت دادههای ورودی پیچیده در موتیشنها.
- Enums، Interfaces و Unions: برای تعریف ساختارهای پیشرفتهتر.
ساختار دادهها در سرور از قبل در قالب Schema تعریف میشود. سرور GraphQL باید دقیقاً مشخص کند که چه نوع دادههایی (Typeها) و چه عملیاتهایی (Query، Mutation، Subscription) در دسترس هستند. این Schema بهعنوان یک قرارداد عمل میکند و کلاینتها فقط میتوانند دادههایی را درخواست کنند که در Schema تعریف شدهاند. خارج از این ساختار شما نمیتوانید به مدل دادهای و یا قابلیتهای دیگری دسترسی داشته باشید.
به عبارت دیگر در این ساختار نوعهای داده تعریف میشوند، بعد تعیین میشود شما چه کوئریهایی میتوانید اجرا کنید و چگونه دادههای جدید خود را در سیستم ایجاد کنید. حتی تعیین میشود که شما برای اجرای کوئریها از چه پارامترهایی میتوانید استفاده کنید.
کوئری
یک نوع خاص در ساختار graphql در نظر گرفته شده که Query نام دارد. این مدل دادهای تعیین میکند که شما چه عملیاتهایی را می توانید فراخوانی کنید. Query برای خواندن یا دریافت دادهها از سرور استفاده میشود. این عملیات مشابه درخواستهای GET در REST است.
Mutation
Mutation برای تغییر دادهها در سرور استفاده میشود. این عملیات مشابه درخواستهای POST، PUT، DELETE در REST است.
Subscription
Subscription برای دریافت بهروزرسانیهای بلادرنگ از سرور استفاده میشود. این عملیات از پروتکلهایی مثل WebSocket برای ارتباط پایدار استفاده میکند.