چگونه با استفاده از GraphQL،Koa و MongoDB یک API قدرتمند بسازیم

ترجمه و تالیف : ابوالفضل باغشاهی
تاریخ انتشار : 13 مرداد 99
خواندن در 2 دقیقه
دسته بندی ها : جاوا اسکریپت

ساخت API ها با استفاده از تکنولوژی‌های جدید و بروزی مثل Koa، MongoDB و GraphQL کاری آسان و شیرین است. Koa همانند Express، یک فریم‌ورک برای Node است. ما به دلیل استفاده Koa از async/await بر روی کال‌بک‌ها، آن‌را به Express ترجیح داده‌ایم.

شروع کار

  • پیش‌نیازهای ساخت یک API:
  • نصب Node
  • ویرایش‌گر متن (visual studio code)
  • Terminal
  • مرورگر

اگر تمام موارد بالا را آماده کرده‌اید، ادامه‌ی متن را مطالعه کنید.

ترمینال را باز کنید و یک پروژه‌ی نود بسازید:

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

تا این‌جا پوشه‌ی پروژه‌ی نود خود را ساخته‌ایم و یک پروژه‌ی نود را درون آن آغاز کرده ایم. حال می‌توانیم با استفاده از NPM پکیج‌های مورد نظرمان که به Koa، Mongo و GraphQL مربوط می‌شوند را نصف می‌کنیم.

npm i koa

راه‌اندازی یک سرور Koa ساده است. تنها کاری که باید بکنیم ساخت یک فایل server.js است.

پروژه را با کد زیر راه‌اندازی کنید:

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

نصب GraphQL

برای راه‌اندازی GraphQL نیاز به دو پکیج داریم: koa-mount و koa-graphql

npm i koa-mount koa-graphql

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم 

برای استفاده از GraphQL نیاز به پاس دادن schema ی اولیه‌ی خود به سرور GraphQL داریم.

Schema ی graphQL را در مسیر graphql/schema.js قرار می‌دهیم. Query اولیه‌ی خود را نیز در فانکشن buildSchema قرار می‌دهیم.

حال می‌توانیم schemaی اولیه‌ی خود را به GraphQL ارسال کنیم. Import کردن koa-mount و koa-graphql و همچنین schema.js را فراموش نکنید؛ سپس به آدرس localhost:9000/graphql بروید:

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

بالاخره راه‌اندازی اولیه به پایان رسید. اگر چه فعلا خیلی کاربردی نیست اما پیش‌زمینه‌ی مراحل بعد را انجام داده‌ایم تا بتوانیم با کوئری زدن از طریق graphQL، داده‌ها را در MongoDB ذخیره کنیم یا آن‌ها را از آن بخوانیم.

راه‌اندازی MongoDB

برای خواندن و نوشتن روی پایگاه داده (database) از طریق GraphQL، نیاز به یک فضا داریم. در این‌جا Mongo به کار می‌آید و در واقع مکانیست که می‌تواند داده‌های ما را در خود ذخیره کند.

برای ساده‌تر کردن کارها، ما از mlab.com استفاده می‌کنیم و یک پایگاه‌ داده‌ی mongo به وسیله‌ی آن، می‌سازیم.

ساخت پایگاه‌ داده‌ی MongoDB

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

بعد از ساخت پایگاه داده، نیاز به ساخت یک کاربر برای آن دارید.

ساخت کاربر MongoDB

بر روی تب کاربران کلیک کنید و یک username و password جدید بسازید.

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

حال می‌توانید از MonogoDB جفت‌شده با Mongoose استفاده کنید. آدرس url پایگاه داده شما که می‌توانید از این پس از آن استفاده کنید،‌ چیزی شبیه به آدرس زیر خواهد بود:

mongodb://:@ds213615.mlab.com:13615/koa-graphql

نصب Mongoose

npm i mongoose

ساخت فایل database.js

ما برای اتصالات به پایگاه‌ داده‌مان، فایلی جداگانه می‌سازیم:

const mongoose = require('mongoose');

const initDB = () => {

  mongoose.connect(
    'mongodb://indrek:graphql1@ds213615.mlab.com:13615/koa-graphql',
    { useNewUrlParser: true }
  );

  mongoose.connection.once('open', () => {
    console.log('connected to database');
  });

}

module.exports = initDB;

قطعه کد بالا وظیفه‌ی متصل شدن به MongoDB خارجی شما را دارد. برای فراخوانی این قسمت نیز، باید در server.js با استفاده از require و سپس متد initDB این کار را انجام دهید:

const initDB = require('./database');

initDB();

اگر تمام مراحل را تا به این‌جا درست انجام داده باشید، کنسول‌تان چیزی شبیه به شکل زیر را نشان خواهد داد:

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

مدل‌های MongoDB

اگر تا به حال از مونگو استفاده کرده باشید، می‌دانید که MongoDB به شما اجازه‌ی ساخت مدل‌هایی برای داده‌هایتان می‌دهد. این یک راه مناسب برای ساختار دادن به نحوه‌ی نمایش داده‌هایمان است.

یک پوشه برای مدل‌های MongoDB بسازید و درون آن فایل gadgets.js را به وجود آورید.

حال یک collection و مقداری داده‌های نمونه بسازید. نام collection را اسم جمع gadgets می‌گذاریم.

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

پس از ساختن collection سند خود را با شکل JSON وارد کنید:

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

کارمان با Mongo تمام شده است و باید به سراغ GraphQL برویم.

کوئری‌های GraphQL

GraphQL به ما اجازه‌ی تعریف type های مختلف را می‌دهد:

graphql/gadgetType.js

حال که یک graphql type ساخته‌ایم،‌ داخل هر فیلد می‌توانیم پراپرتی‌های مختص آن تایپ را مشخص کنیم. این نکته نیز قابل ذکر است که primitive type (انواع اولیه) در GraphQL موجود هستند و علاوه بر آن‌ها می‌توانیم تایپ‌های مورد نیاز خود (GraphQLObjectType) را تعریف کنیم.

همچنین ساخت تایپ‌های graphQL، type-hinting را نیز فراهم می‌کند و ما از آن در هنگام ساخت کوئری‌هایمان می‌توانیم کمک بگیریم.

آخرین کاری که باید بکنیم، refactor کردن schema.js است. می‌خواهیم یک کوئری با استفاده از id بزنیم.

مدل Gadget و gadgetGraphQLType که تایپ graphQl ای است را به همراه GraphQLSchema، GraphQLObjectType و GraphQLString  از graphQL به schema.js، import کنید.

سپس به یک کوئری ریشه‌ای احتیاج خواهیم داشت. هر کوئری graphQL با {} همراه خواهد بود. درون فیلدها نیز می‌توانیم پراپرتی‌های مختلف را مشخص کنیم.

سه پراپرتی موجود در کوئری gadget را در نظر داشته باشید:

  • Type: این نوع کوئری است که در مثال ما gadgetGraphQLType
  • Args: ما می‌توانیم آرگومان‌هایی برای کوئری‌های GraphQL ای مان داشته باشیم؛ مثل (gadgets(id: "1"
  • Resolve: چگونه می‌توانیم کوئری را پاسخ دهیم؟ چه اتفاقی پس از ساخته شدن کوئری می‌افتد؟ در این‌جا مدل Gadget را با استفاده از id بر می‌گردانیم.

در نهایت نیز آن‌ را export می‌کنیم.

به این ترتیب فایل schema.js را نیز به درستی تنظیم کرده‌ایم. حال به آدرس http://localhost:9000/graphql رفته و کوئری بزنید!

اگر با تصویری شبیه به تصویر زیر مواجه شده‌اید، کار خود را به درستی از مرحله‌ی اولیه تا به این‌جا، انجام داده‌اید.

چگونه با استفاده از GraphQL، Koa و MongoDB یک API قدرتمند بسازیم

سورس کد این پروژه‌ی آموزشی را می‌توانید در این‌جا ملاحظه کنید.

منبع

گردآوری و تالیف ابوالفضل باغشاهی
آفلاین
user-avatar

Front-End

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر لازم است ابتدا وارد سایت شوید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید