همه چیز دربارهی 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 تطابق دهیم ترتیب لایه ها به این صورت است:
- Repository
- Service
- Query/Mutation
پس از تعریف متد های مختلف در کلاس های Query و Mutation، نیاز به معرفی آنها به گراف کیو ال ( GraphQL ) داریم. مطابق کد زیر، درون پوشه Resources داخل Graphql و در فایل schema.graphqls به تعریف انواع مختلف Domain، انواع مدلهای Request، انواع متدهای Query و انواع متدهای Mutation میپردازیم. فیلدهای مختلف و جنس آنها و آرگومانهای مورد نیاز هر متد و جنس آنها نیز در این فایل ذکر میشود . لازم به ذکر است که وجود علامت <!> جلوی هر فیلد به منظور NotNull بودن آن فیلد است. پس از انجام این کار، پروژه قابل اجرا بوده و متدهای مختلف توسط فیلدهای معرفی شده قابل استفاده خواهند بود.
مثال نحوه ارسال درخواست :
- درخواست Query زیر جهت دریافت User توسط شناسه (ID) آن و نمایش نام، شناسه و نقشهای او است :
- پاسخ:
- برای فرستادن درخواست Mutation برای ایجاد یک کاربر و تعیین نقش او است، ولی تنها نمایش نام و آی-دی کاربر پس از ایجاد در پاسخ:
- پاسخ:
برای بررسی پروژه نمونه Graphql میتوانید از طریق لینک زیر به گیت هاب من متصل شوید:
https://github.com/arsalanmrz/Graphql-spring-boot-sample