ساخت API ها با استفاده از تکنولوژیهای جدید و بروزی مثل Koa، MongoDB و GraphQL کاری آسان و شیرین است. Koa همانند Express، یک فریمورک برای Node است. ما به دلیل استفاده Koa از async/await بر روی کالبکها، آنرا به Express ترجیح دادهایم.
شروع کار
- پیشنیازهای ساخت یک API:
- نصب Node
- ویرایشگر متن (visual studio code)
- Terminal
- مرورگر
اگر تمام موارد بالا را آماده کردهاید، ادامهی متن را مطالعه کنید.
ترمینال را باز کنید و یک پروژهی نود بسازید:
تا اینجا پوشهی پروژهی نود خود را ساختهایم و یک پروژهی نود را درون آن آغاز کرده ایم. حال میتوانیم با استفاده از NPM پکیجهای مورد نظرمان که به Koa، Mongo و GraphQL مربوط میشوند را نصف میکنیم.
npm i koa
راهاندازی یک سرور Koa ساده است. تنها کاری که باید بکنیم ساخت یک فایل server.js است.
پروژه را با کد زیر راهاندازی کنید:
نصب GraphQL
برای راهاندازی GraphQL نیاز به دو پکیج داریم: koa-mount و koa-graphql
npm i koa-mount koa-graphql
برای استفاده از GraphQL نیاز به پاس دادن schema ی اولیهی خود به سرور GraphQL داریم.
Schema ی graphQL را در مسیر graphql/schema.js قرار میدهیم. Query اولیهی خود را نیز در فانکشن buildSchema قرار میدهیم.
حال میتوانیم schemaی اولیهی خود را به GraphQL ارسال کنیم. Import کردن koa-mount و koa-graphql و همچنین schema.js را فراموش نکنید؛ سپس به آدرس localhost:9000/graphql بروید:
بالاخره راهاندازی اولیه به پایان رسید. اگر چه فعلا خیلی کاربردی نیست اما پیشزمینهی مراحل بعد را انجام دادهایم تا بتوانیم با کوئری زدن از طریق graphQL، دادهها را در MongoDB ذخیره کنیم یا آنها را از آن بخوانیم.
راهاندازی MongoDB
برای خواندن و نوشتن روی پایگاه داده (database) از طریق GraphQL، نیاز به یک فضا داریم. در اینجا Mongo به کار میآید و در واقع مکانیست که میتواند دادههای ما را در خود ذخیره کند.
برای سادهتر کردن کارها، ما از mlab.com استفاده میکنیم و یک پایگاه دادهی mongo به وسیلهی آن، میسازیم.
ساخت پایگاه دادهی MongoDB
بعد از ساخت پایگاه داده، نیاز به ساخت یک کاربر برای آن دارید.
ساخت کاربر MongoDB
بر روی تب کاربران کلیک کنید و یک username و password جدید بسازید.
حال میتوانید از 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();
اگر تمام مراحل را تا به اینجا درست انجام داده باشید، کنسولتان چیزی شبیه به شکل زیر را نشان خواهد داد:
مدلهای MongoDB
اگر تا به حال از مونگو استفاده کرده باشید، میدانید که MongoDB به شما اجازهی ساخت مدلهایی برای دادههایتان میدهد. این یک راه مناسب برای ساختار دادن به نحوهی نمایش دادههایمان است.
یک پوشه برای مدلهای MongoDB بسازید و درون آن فایل gadgets.js را به وجود آورید.
حال یک collection و مقداری دادههای نمونه بسازید. نام collection را اسم جمع gadgets میگذاریم.
پس از ساختن collection سند خود را با شکل JSON وارد کنید:
کارمان با 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 رفته و کوئری بزنید!
اگر با تصویری شبیه به تصویر زیر مواجه شدهاید، کار خود را به درستی از مرحلهی اولیه تا به اینجا، انجام دادهاید.
سورس کد این پروژهی آموزشی را میتوانید در اینجا ملاحظه کنید.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید