GraphQL چیست؟
تاریخ انتشار:۱۲:۰ ۱۳۹۸/۱۱/۲۳

GraphQL چیست؟


        




یک زبان پرس و جو برای API شما


هنگامی که از API نام می‌بریم به یاد یک سری مشکلات می‌افتیم و خودمان را برای حل این مشکلات آماده می‌کنیم. مثل وجودEndpoint های متفاوت، درخواست‌های متعدد، داده‌های زیاد که نیازی به آن‌ها نداریم، مستند سازی هر Endpoint و پارامتر‌های آن و ... از جمله مشکلاتی است که ممکن است با آن‌ها مواجه شویم. شاید در اولین نگاه بگوییم که در RestAPI برای حل مشکلات بالا راه حل‌هایی ارائه شده است.


فیس بوک راه حلی را برای کار کردن با APIها ارائه کرده است به نام Graphql این رویکرد یک Library یا یک فریم ورک نیست بلکه راه حلی برای ساخت API با ساختاری شبیه به Graph است. Graphql در اصل به جای اینکه API را در قالبEndpoint های متعدد در نظر بگیرد، آن‌ها را در قالب Graph در نظر می‌گیرد.

بعد از این توضیحات برای درک بهتر مسئله اجازه دهید یک مثال را مورد بررسی قرار دهیم.

فرض کنید یک برنامه موبایل داریم که کاربر، پست، کامنت و لایک دارد. احتمالا برای ساخت APIهای مورد نیاز به صورت زیر عمل می‌کنیم.


api/post/
**api/posts/**POST_ID/
api/posts/**POST_ID**/comments/
api/posts/**POST_ID**/likes//
**api/comments/**POST_ID/
api/users/
**api/users/**USER_ID/
**api/likes/**POST_ID/


همان طور که می‌بینیم برای هر موجودیت یک Endpoint در نظر گرفتیم.

حتی ممکن است برای هر Endpoint یک سری Parameter داشته باشیم.


api/posts?count=1&offset=20&fields=title,body,user/


یا اینکه برخی از پارامترها با header تنظیم شود مثلا url صفحه قبلی و بعدی به صورت http header باشد.

این موارد تنها قسمتی از مشکلاتی است که در کار کردن با APIها ممکن است با آن‌ها مواجه شویم. برای درک بهتر مسئله به تصویر زیر توجه کنید.






GraphQL چه راه حل‌هایی را ارائه کرده است؟


ما درGraphql داده را به صورت Graph می‌بینیم و به صورت Graph درخواست می‌کنیم. اما نکته قابل توجه این است کهGraph ها را در graphql به صورت Json در نظر می‌گیریم.

فرض کنید می‌خواهیم در یک API که با GraphQL نوشته شده است پست‌ها را دریافت کنیم به صورت زیر عمل می‌کنیم:


  1. }
  2. post
  3. {


اگر بخواهیم فیلدهای مشخصی را دریافت کنیم به صورت زیر عمل می‌کنیم:


  1. }post 
  2. ,title 
  3. ,body 
  4. userId
  5. {
  6. {


همچنین می‌توانیمpagination را نیز پیدا سازی کنیم مثلا بگوییم Count را مساوی ۱۰ قرار بده.


  1. }
  2. }post ( userID : 20 , count : 10 , offset= 20 ) 
  3. ,title 
  4. body
  5. {
  6. {


حال موقع آن رسیده که دست به کار شویم.


یک مثال خیلی ساده را با هم بررسی می‌کنیم.

در Visual Studio یک پروژه از نوع Console ایجاد می‌کنیم و GraphQL را از طریق NuGet بر روی پروژه خود نصب می‌کنیم. و به صورت زیر عمل می‌کنیم.


  1. ;using GraphQL
  2. ;using GraphQL.Types
  3. ;using System

  4. namespace GraphQL
  5. }
  6. class Program
  7. }
  8. static void Main ( string [ ] args )
  9. }

  10. "@)var schema = Schema. For
  11. type Query }
  12. ,id: ID
  13. ,name : String
  14. course : String
  15. {
  16. ;("

  17. ;var _root = new { id = 100 , name = "nikamooz" , course = "sqlserver" }

  18. d, name//
  19. <=var json = schema. Execute ( a
  20. }
  21. ;"a.Query = "{ id, name }
  22. ;a.Root = _root
  23. ;({
  24. ;Console. WriteLine ( json )

  25. ;Console. WriteLine ( "---------------------------------------------" )

  26. Id,name,course//
  27. <=json = schema. Execute ( a
  28. }
  29. ;"a.Query = "{ id, name, course }
  30. ;a.Root = _root
  31. ;({


  32. ;Console. WriteLine ( json )
  33. ;()Console. ReadLine
  34. {
  35. {
  36. {

خروجی برنامه به صورت زیر می‌باشد.


  1. }
  2.   }: "data" 
  3. ,"id" : "100" 
  4. "name" : "nikamooz"
  5. {
  6. {
  7. --------------------------------
  8. }
  9.  } : "data" 
  10. ,"id" : "100" 
  11. ,"name" : "nikamooz" 
  12. "course" : "sqlserver"
  13. {
  14. {


در مقاله بعدی نحوه پیاده سازی API را با Graphql بررسی خواهیم کرد.

برای اطلاعات بیشتر می‌توانید به سایت ۀraphql مراجعه نمایید.


https://graphql.org/






منبع:nikamooz