بک اند

آموزش راه‌اندازی 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 فراهم می‌کند.

 

 

 

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

نوشته های مشابه

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

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

دکمه بازگشت به بالا