خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

GraphQL: جایگزینی برای REST در HTTP

دریابید که چگونه یک API GraphQL می تواند به شما قدرت بیشتری بدهد و زمان توسعه شما را کوتاه کند.

بسیاری از استانداردهای معماری منبع باز برای ساخت و توزیع برنامه ها وجود دارد. REST (انتقال حالت نمایندگی)، SOAP (پروتکل دسترسی به شیء ساده)، RPC (تماس رویه ای از راه دور) و GraphQL محبوب ترین API ها هستند.

API های RESTful پر استفاده ترین استاندارد معماری API هستند. اگر API های پیچیده RESTful با نقاط پایانی زیادی نوشته اید، احتمالاً متوجه شده اید که چقدر می توانند پیچیده باشند. این امر به ویژه در صورتی صادق است که فقط تفاوت های جزئی بین نقاط پایانی وجود داشته باشد.

همچنین ممکن است در واکشی داده با مشکلاتی روبرو شوید زیرا API های RESTful به اندازه کافی برای انتخاب داده های خاص انعطاف پذیر نیستند. GraphQL این مشکلات API های RESTful را حل می کند.

GraphQL چیست؟

GraphQL (Graph Query Language) یک زبان پرس و جو و زمان اجرا برای ساخت API است. برخلاف API های REST با نقاط پایانی زیادی برای مصرف داده، API های GraphQL یک نقطه ورود دارند. شما می توانید داده های خاصی را با توصیف آن در پرس و جوها واکشی کنید.

مشخصات GraphQL زبان پرس و جو و نحوه عملکرد سرورهای GraphQL را تعریف می کند. می توانید API های GraphQL را در زبان های سمت سرور از پایتون تا جاوا اسکریپت و هر زبانی که از HTTP پشتیبانی می کند بسازید و مصرف کنید.

متا GraphQL را در سال 2012 به عنوان جایگزینی برای REST برای ساخت بر روی HTTP ساخت. آنها GraphQL را به عنوان یک استاندارد منبع باز در سال 2015 منتشر کردند. امروز، بنیاد GraphQL بر توسعه مشخصات GraphQL نظارت دارد.

GraphQL نسبتا جدید است، با پذیرش کم، و هزینه های پنهانی برای استفاده از آن وجود دارد. ساختن API های GraphQL می تواند به طور غیر ضروری پیچیده باشد، به خصوص برای پروژه های کوچک با چند نقطه پایانی.

همچنین، تمام درخواست‌های GraphQL در نهایت بدون در نظر گرفتن وضعیت درخواست، کد وضعیت 200 را برمی‌گردانند.

مطلب مرتبط:   Rust Macro: چگونه استفاده از آنها می تواند کد شما را بهبود بخشد

GraphQL چگونه کار می کند؟

توابع و نحو GraphQL

برخلاف REST که منبع گرا است، GraphQL نیاز دارد که در مورد داده ها به عنوان یک نمودار برای تعامل با داده ها فکر کنید. می‌توانید ساختار داده‌ها را مشخص کنید، و مشخصات یک رابط پرس و جو قوی برای تعامل با API از طریق HTTP فراهم می‌کند. بسته به بسته GraphQL یا کتابخانه ای که برای استفاده انتخاب می کنید، می توانید از ویژگی های مختلفی استفاده کنید.

طرحواره های GraphQL شامل انواع شی هستند که شی مورد درخواست و فیلدهای موجود آن را تعریف می کنند. در پرس و جوها و جهش های API، بسته GraphQL پرس و جوها را تأیید می کند و پرس و جوها را بر اساس توابع کنترل کننده مشخص شده (Resolver) اجرا می کند.

چرا باید از GraphQL استفاده کنید؟

REST یک استاندارد با استفاده آسان است و اکثر زبان های برنامه نویسی ابزارهایی برای ساخت سریع API های RESTful دارند. با این حال، مشکلات زیادی در مورد ساخت و مصرف API های RESTful وجود دارد.

در اینجا برخی از مشکلات REST وجود دارد که باعث می شود توسعه دهندگان GraphQL را برای برخی موارد استفاده ترجیح دهند.

واکشی ناکارآمد داده

API های RESTful داده ها را بر اساس مشخصات نقطه پایانی رله می کنند. آن‌ها به اندازه کافی انعطاف‌پذیر نیستند تا داده‌هایی را فراتر از آنچه در عملکرد کنترل‌کننده نقطه پایانی کدگذاری شده است، بازیابی کنند.

فرض کنید یک نقطه پایانی لیستی از داده ها را هنگام تماس برمی گرداند و شما باید مقادیر یا معیارهایی را برای فیلدها مشخص کنید. در آن صورت، توسعه‌دهنده باید یک نقطه پایانی ایجاد کند و منطق تجاری را برای بازگرداندن داده‌ها تعریف کند. شما می توانید منبع ارزشمند را به صورت دستی تجزیه کنید، که در نهایت زمان بیشتری می برد.

GraphQL مشکل واکشی ناکارآمد داده را حل می کند، زیرا می توانید API ها را برای برگرداندن داده ها بر اساس معیارها و مشخصات به صورت انعطاف پذیر جستجو کنید.

مطلب مرتبط:   7 کاری که قبل از تغییر قالب وردپرس خود باید انجام دهید

GraphQL APIهای تعاملی هستند. شما می توانید داده هایی را که برای بازیابی نیاز دارید در یک نحو آسان و خوانا مشخص کنید.

{
user(where: {age: {_eq: "89"}}) {
name
school(where: {alive: {_eq: true}}) {
bio
nationality
}
}
}

پرس و جو GraphQL بالا یک طرح کاربر را برای ورودی هایی که فیلد سنی 89 سال است پرس و جو می کند. این پرس و جو دارای یک پرس و جو جاسازی شده برای ورودی هایی است که فیلد زنده در آنها درست ارزیابی می کند. فیلدهای نام، بیو و ملیت را از طرح برمی گرداند.

توسعه سریع

ساختن و مصرف API های GraphQL راحت تر از استفاده از REST است، به خصوص با افزایش اندازه پروژه. در طول مرحله توسعه، شما مجبور نیستید به همان اندازه که هنگام توسعه API های RESTful می خواهید مسیرها و عملکردهای کنترل کننده را توسعه دهید. مصرف API های GraphQL به اندازه API های RESTful خسته کننده نیست.

در REST، نقاط پایانی مختلف به منابع مختلف دسترسی می‌دهند، برخلاف GraphQL که یک نقطه پایانی واحد وجود دارد. این باعث انعطاف پذیری و عملکرد می شود و پرس و جوها می توانند توابع مختلف حل کننده را فراخوانی کنند.

زبان تعریف طرحواره GraphQL

زبان تعریف طرحواره GraphQL (SDL) طرحواره های خدمات GraphQL را مشخص می کند.

سینتکس GraphQL SDL به راحتی قابل خواندن و درک است. شما ساختار طرح واره خود را در فایلی با پسوند graphql یا .graphqls مشخص خواهید کرد.

type Human {
name: String!
age: Int!
}

input AddHuman {
name: String!
age: Int!
}

type Mutation {
CreateHuman(input: AddHuman!): Human!
DeleteHuman(id: Int!): String!
UpdateHuman(id: Int!): String!
}

type Query {
GetHuman(id: Int!): Human!
GetHumans: [Human!]!
}

کد GraphQL بالا طرحی برای GraphQL API است که ساختار API را برای درخواست ها تعریف می کند. این طرح، عملکرد CRUD را برای API تعریف می کند.

در سمت سرویس گیرنده، بر اساس ساختار طرح و داده ها یا عملیات مشتری، مشتری می تواند یک پرس و جو (GET یا DELETE در REST) ​​یا یک جهش (PUT یا POST) را اجرا کند.

در اینجا نمونه ای از پرس و جو در طرحواره انسان آورده شده است.

query Human {
name
age
}

پرس و جوی بالا نام طرحواره انسانی و داده های فیلد سن را برمی گرداند.

جهش‌های GraphQL بر خلاف کوئری‌ها، نحو نسبتاً متفاوتی دارند. در اینجا نمونه ای از عملیات جهش در طرحواره انسان است.

mutation {
CreateHuman(input:{ name:"man", age:1000000000000000,}) {
name
age
}
}

کد جهش فیلدهای نام و سن را به مشتری وارد می کند و داده ها را از فیلدها برمی گرداند.

هنگام ساخت GraphQL API خود به یک فروشگاه داده برای ماندگاری نیاز دارید. مانند REST و اکثر معماری های وب مبتنی بر HTTP، GraphQL بدون حالت است و شما می توانید از هر فروشگاه داده یا پایگاه داده برای برنامه خود استفاده کنید.

ساخت GraphQL API

زبان های پشتیبانی شده GraphQL

GraphQL یک مشخصات است و می توانید GraphQL را در محبوب ترین زبان های سمت سرور بسازید. شما باید کتابخانه ای با ویژگی های مورد نیاز پروژه خود پیدا کنید.

هنگام انتخاب یک کتابخانه GraphQL، می خواهید از یک کتابخانه غنی از ویژگی ها استفاده کنید که از انواع و عملیات GraphQL پشتیبانی می کند. اکثر کتابخانه ها یا از یک رویکرد طرحواره اول یا یک رویکرد کد اول استفاده می کنند. در حالت اول، شما یک طرح واره GraphQL را تعریف می کنید و کتابخانه حل کننده ها و کدهای دیگ بخار را تولید می کند. برای دومی، شما رهیافت‌کننده‌ها را بدون تعریف طرحواره کدگذاری می‌کنید.

GraphQL در حال پذیرش است

از زمان پیدایش GraphQL، توسعه دهندگان و شرکت ها ابزارهایی را برای ساده کردن استفاده از آن منتشر کرده اند. اینها می توانند زمان توسعه پروژه های کوچکتر و متوسط ​​را کاهش دهند.

برای کسب اطلاعات بیشتر می‌توانید کلاینت‌های GraphQL منبع باز، اسناد GraphQL و مشخصات آن را بررسی کنید.