آموزش راه‌اندازی API گراف‌کیوال (GraphQL) با Ruby on Rails

مقدمه

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

GraphQL مستقل از زبان برنامه‌نویسی و پایگاه داده است و تقریباً در هر زبان و دیتابیسی قابل پیاده‌سازی است.

در این آموزش، یک API یادداشت‌برداری (Note Taking) مبتنی بر Ruby on Rails و GraphQL ایجاد می‌کنید. پس از پایان آموزش، قادر خواهید بود از طریق GraphQL یادداشت‌های جدید ایجاد کرده و یادداشت‌های موجود را مشاهده کنید.

پیش‌نیازها

برای دنبال کردن این آموزش به موارد زیر نیاز دارید:

Ruby نسخه 2.6.3
Ruby on Rails نسخه 6.0.2.1
PostgreSQL نسخه 11.2
آشنایی اولیه با Rails و پایگاه داده PostgreSQL
مرحله اول: ایجاد پروژه Rails API

ابتدا یک پروژه Rails API جدید ایجاد کنید:

rails new rails_graphql -d=postgresql -T –api

توضیح پارامترها:

پارامتر توضیح
-d=postgresql استفاده از PostgreSQL
-T عدم ایجاد فایل‌های تست
–api ساخت پروژه فقط برای API

سپس وارد پوشه پروژه شوید:

cd rails_graphql
ایجاد پایگاه داده

فایل تنظیمات دیتابیس در مسیر زیر قرار دارد:

config/database.yml

برای ایجاد دیتابیس‌ها دستور زیر را اجرا کنید:

rails db:create

خروجی:

Created database ‘rails_graphql_development’
Created database ‘rails_graphql_test’
اجرای پروژه
bundle exec rails server

یا روی سرور:

bundle exec rails server –binding=YOUR_SERVER_IP

مرورگر را باز کنید:

http://localhost:3000

اگر صفحه خوش‌آمدگویی Rails را مشاهده کردید، همه چیز درست است.

مرحله دوم: نصب GraphQL روی Rails

برای اضافه کردن GraphQL فایل Gemfile را باز کنید:

group :development do
gem ‘graphiql-rails’
end

gem ‘graphql’, ‘1.9.18’

سپس نصب کنید:

bundle install
نصب فایل‌های اولیه GraphQL
rails g graphql:install

این دستور:

مسیر /graphql را ایجاد می‌کند.
کنترلر GraphQL را می‌سازد.
پوشه app/graphql را ایجاد می‌کند.
فعال‌سازی GraphiQL

فایل:

config/routes.rb

را ویرایش کنید:

Rails.application.routes.draw do
if Rails.env.development?
mount GraphiQL::Rails::Engine,
at: “/graphiql”,
graphql_path: “graphql#execute”
end

post “/graphql”, to: “graphql#execute”
end
فعال‌سازی Asset Pipeline

در فایل:

config/application.rb

خط زیر را از حالت کامنت خارج کنید:

require “sprockets/railtie”

پوشه زیر را ایجاد کنید:

mkdir -p app/assets/config

فایل:

app/assets/config/manifest.js

را بسازید:

//= link graphiql/rails/application.css
//= link graphiql/rails/application.js
تست GraphQL

سرور را مجدد اجرا کنید:

bundle exec rails server

سپس آدرس زیر را باز کنید:

http://localhost:3000/graphiql

در محیط GraphiQL کوئری زیر را اجرا کنید:

query {
testField
}

اگر پاسخ دریافت کردید، GraphQL به درستی نصب شده است.

مرحله سوم: ایجاد مدل Note

مدل یادداشت را ایجاد کنید:

rails generate model note title:string:index body:text

سپس Migration را اجرا کنید:

rails db:migrate

خروجی:

create_table(:notes)
add_index(:notes, :title)
ساخت GraphQL Type

برای ساخت NoteType:

rails generate graphql:object Note id:ID! title:String! body:String!

این Type شامل فیلدهای زیر خواهد بود:

type Note {
id: ID!
title: String!
body: String!
}
ساخت Input Type

فایل زیر را ایجاد کنید:

app/graphql/types/input/note_input_type.rb

محتوا:

module Types
module Input
class NoteInputType < Types::BaseInputObject
argument :title, String, required: true
argument :body, String, required: true
end
end
end
مرحله چهارم: ایجاد Query ها
Query دریافت تمام یادداشت‌ها

فایل:

app/graphql/queries/fetch_notes.rb
module Queries
class FetchNotes < Queries::BaseQuery
type [Types::NoteType], null: false

def resolve
Note.all.order(created_at: :desc)
end
end
end
اتصال Query به GraphQL

فایل:

app/graphql/types/query_type.rb
field :fetch_notes,
resolver: Queries::FetchNotes
ایجاد داده آزمایشی

فایل:

db/seeds.rb
5.times do |i|
Note.create(
title: “Note #{i+1}”,
body: “Lorem ipsum saves lives”
)
end

اجرا:

rails db:seed
اجرای Query

در GraphiQL:

query {
fetchNotes {
id
title
body
}
}

خروجی:

{
“data”: {
“fetchNotes”: [
{
“id”:”1″,
“title”:”Note 1″,
“body”:”Lorem ipsum saves lives”
}
]
}
}
دریافت یک یادداشت بر اساس ID

فایل:

app/graphql/queries/fetch_note.rb
module Queries
class FetchNote < Queries::BaseQuery

type Types::NoteType, null: false

argument :id, ID, required: true

def resolve(id:)
Note.find(id)
rescue ActiveRecord::RecordNotFound
GraphQL::ExecutionError.new(
“یادداشت پیدا نشد”
)
end
end
end

در فایل QueryType:

field :fetch_note,
resolver: Queries::FetchNote

کوئری:

query {
fetchNote(id: 1) {
id
title
body
}
}
مرحله پنجم: ایجاد Mutation

Mutation برای ساخت یادداشت جدید:

app/graphql/mutations/add_note.rb
module Mutations
class AddNote < Mutations::BaseMutation

argument :params,
Types::Input::NoteInputType,
required: true

field :note,
Types::NoteType,
null: false

def resolve(params:)
note = Note.create!(params.to_h)

{
note: note
}
end
end
end
اتصال Mutation

فایل:

app/graphql/types/mutation_type.rb
module Types
class MutationType < Types::BaseObject
field :add_note,
mutation: Mutations::AddNote
end
end
تست Mutation

در GraphiQL:

mutation {
addNote(
input: {
params: {
title: “GraphQL Notes”
body: “A long body of text”
}
}
) {
note {
id
title
body
}
}
}

خروجی:

{
“data”: {
“addNote”: {
“note”: {
“id”:”6″,
“title”:”GraphQL Notes”,
“body”:”A long body of text”
}
}
}
}
جمع‌بندی

در این آموزش یاد گرفتید:

✅ ایجاد پروژه Rails API
✅ اتصال Rails به PostgreSQL
✅ نصب و پیکربندی GraphQL
✅ راه‌اندازی GraphiQL
✅ ساخت مدل Note
✅ ایجاد Query برای دریافت داده‌ها
✅ ایجاد Mutation برای ثبت داده‌ها
✅ کار با Type و Input Type در GraphQL

در پایان یک API کامل یادداشت‌برداری مبتنی بر Ruby on Rails + PostgreSQL + GraphQL ساختید که قابلیت دریافت و ایجاد یادداشت‌ها را از طریق GraphQL فراهم می‌کند.

 

 

 

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

Click to rate this post!
[Total: 0 Average: 0]

نظرات کاربران

دیدگاهی بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *