راه اندازی GraphQL با nodejs

راه اندازی GraphQL با nodejs

در جلسه های قبل با GraphQL آشنا شدیم و شیوه ی نوشتن کوئری ها را فرا گرفتیم. همچنین Schema و type های مختلف در GraphQL را نیز بررسی کردیم. در این جلسه قصد داریم تا با یک زبان برنامه نویسی این سرویس را پیاده سازی کنیم. برای این کار، از nodejs استفاده می کنیم.

پیش نیاز ها:

از آنجایی که از nodejs برای این قسمت استفاده می کنیم، دقت کنید nodejs روی سیستم شما نصب باشد. برای نصب آن به این لینک زیر مراجعه کنید.

همچنین از آنجایی که این آموزش روی GraphQL تمرکز دارد، انتظار می رود تا در این قسمت با nodejs آشنایی قبلی داشته باشید. حال برای شروع، ویرایش گر متن مورد نظر خود را باز کنید دستور زیر را برای ایجاد یک پروژه جدید در ترمینال وارد کنید:

npm init

موارد مورد نیاز را وارد کرده و با کلید Enter مراحل را رد کنید. حال در ادامه برای نصب پکیج graphql، از دستور زیر استفاده کنید:

npm install graphql

بعد از این کار، فایلی به نام app.js در root پروژه خود بسازید. سپس کدهای زیر را در این فایل قرار دهید:

const { graphql, buildSchema } = require('graphql');

const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

const root = {
  hello: () => {
    return 'Hello world';
  }
};

graphql(schema, '{ hello }', root).then(response => {
  console.log(response);
});

در کد بالا، برای استفاده از graphql، متدی به نام graphql را از پکیج نصب شده وارد پروژه می کنیم. این متد سه آرگومان به عنوان ورودی می پذیرد:

  • ابتدا برای GraphQL نیاز به یک schema داریم. برای ساخت schema از متد buildSchema در پکیج graphql استفاده می کنیم. این متد یک string به عنوان schema می پذیرد. دقت کنید که schema باید دارای نوع خاص Query باشد (برای آشنایی با ساخت schema می توانید به جلسه ی قبل مراجعه کنید). 
  • پارامتر دوم همان query که قصد اجرای آن را داریم است. این کوئری را در قالب string اضافه می کنیم.
  • پارامتر سوم یک object است که توابع resolver برای schema را در خود قرار داده است. برای هر فیلدی که در schema قرار دارد، نیاز به یک تابع resolver داریم. دقت کنید نام تابع باید با نام فیلد مورد نظر یکسان باشد.

فایل را ذخیره کنید و برای اجرای آن دستور زیر را وارد کنید:

node app.js

در نتیجه دستور بالا باید خروجی زیر در ترمینال نمایش داده شود:

{ data: { hello: 'Hello world' } }

می توان انواع کوئری ها و resolver ها را به همین صورت به سرویس اضافه کرد. به طور مثال قطعه کد زیر را با کد بالا جایگزین کنید:

const { graphql, buildSchema } = require('graphql');

const schema = buildSchema(`
  type User {
    id: String
    name: String
  }

  type Query {
    hello: String
    me: User
  }
`);

const root = {
  hello: () => {
    return 'Hello world';
  },
  me: () => {
    return {
      id: '1',
      name: 'sokan academy user',
    };
  },
};

graphql(schema, '{ hello me { id name } }', root).then(response => {
  console.log(response);
});

حال دوباره کد را اجرا کنید. کد بالا باید نتیجه زیر را در خروجی نمایش دهد:

{
  data: {
    hello: 'Hello world',
    me: { id: '1', name: 'sokan user' }
  }
}

بسیار عالی. با استفاده از پکیج graphql در nodejs، به راحتی یک سرویس ساده GraphQL ایجاد کردیم. سعی کنید برای تمرین بیشتر، type ها و کوئری های بیشتری به این کد اضافه کنید.

در این جلسه با شیوه ی ایجاد یک سرویس ساده GraphQL در nodejs آشنا شدیم. اما برای ایجاد یک سرویس کارآمد به یقین به ایجاد یک API server برای آن (به جای اجرای کد در ترمینال) نیاز داریم. در جلسه بعد شیوه ایجاد سرویس GraphQL با استفاده از فریمورک محبوب express را مورد بررسی قرار خواهیم داد.

 

          سلامت و تندرست باشید.

نظرات
اگر login نکردی برامون ایمیلت رو بنویس: