همه چیز درباره‌ی GraphQl:

کتابخانه گراف کیو ال ( GraphQL ) باعث می‌شود که rest-controller به همراه API های متنوع از بین رفته و تنها یک API مرجع به آدرس : http://[server-url]:[port]/graphql در سمت کد سرور باقی بماند. تمامی درخواست ها توسط RequestBody به همراه متد POST به آدرس بالا ارسال شده و با توجه به Body فرستاده شده، متد های مختلف صدا زده می‌شوند. با استفاده از این کتابخانه ، مدل Response درون Body فرستاده شده و در نتیجه نیاز به تعریف مدل های مختلف Response در کد وجود ندارد .

دو نوع ارسال اطلاعات در Body وجود دارد:

1. Query : درخواست‌هایی که کاربر برای دریافت اطلاعات به سرور می‌فرستد ( مشابه متد های GET ).
2. Mutation : درخواست‌هایی که کاربر برای ایجاد، ویرایش و حذف اطلاعات به سرور می‌فرستد ( مشابه POST, PUT, DELETE ).

برای هر Domain، در حقیقت به جای Rest-controller دو کلاس برای مدیریت Query و Mutation در نظر گرفته می‌شود. در حقیقت برای فهم بیشتر اگر بخواهیم با مدل MVC تطابق دهیم ترتیب لایه ها به این صورت است:

  1. Repository
  2. Service
  3. Query/Mutation

پس از تعریف متد های مختلف در کلاس های Query و Mutation، نیاز به معرفی آنها به گراف کیو ال ( GraphQL ) داریم. مطابق کد زیر، درون پوشه Resources داخل Graphql و در فایل schema.graphqls به تعریف انواع مختلف Domain، انواع مدل‌های Request، انواع متدهای Query و انواع متدهای Mutation می‌پردازیم. فیلدهای مختلف و جنس آن‌ها و آرگومان‌های مورد نیاز هر متد و جنس آن‌ها نیز در این فایل ذکر می‌شود . لازم به ذکر است که وجود علامت <!> جلوی هر فیلد به منظور NotNull بودن آن فیلد است. پس از انجام این کار، پروژه قابل اجرا بوده و متدهای مختلف توسط فیلدهای معرفی شده قابل استفاده خواهند بود.

مثال نحوه ارسال درخواست :

  •  درخواست Query زیر جهت دریافت User توسط شناسه (ID) آن و نمایش نام، شناسه و نقش‌های او است :

graphOL

 

  • پاسخ:

graphql

  • برای فرستادن درخواست Mutation برای ایجاد یک کاربر و تعیین نقش او است، ولی تنها نمایش نام و آی-دی کاربر پس از ایجاد در پاسخ:

graphql

  • پاسخ:

graphql

برای بررسی پروژه نمونه Graphql می‌توانید از طریق لینک زیر به گیت هاب من متصل شوید:

https://github.com/arsalanmrz/Graphql-spring-boot-sample

 

ارسال دیدگاه

Captcha 66 − 59 =

در صورت نیاز و یا هر گونه مشکل ایمیل بزنید

پیام با موفقیت ثبت شد.
خطایی رخ داده است.