Skip to main content

Ruby on Rails ile GraphQL API Kurulumu 🚀


🧠 Teknik Özet

Bu rehberde, Ruby on Rails framework’ü üzerinde GraphQL destekli bir API kurmayı öğreneceksiniz. Amaç, REST API’lerdeki fazla veri çekme sorunlarını ortadan kaldırıp istemcilerin sadece ihtiyaç duydukları verileri tek sorguda almasını sağlamaktır. Adımlar: Rails API uygulaması kurmak, GraphQL gem’lerini yüklemek, Note modeli ve tiplerini oluşturmak, sorgular ve mutasyonları tanımlamak.


🎯 Bu Rehberde Ne Öğreneceksiniz?

  • PostgreSQL ile uyumlu bir Rails API uygulaması oluşturmayı,
  • GraphQL ve GraphiQL gem’lerini kullanarak sorgulama ortamı kurmayı,
  • Note modeli, sorgular (fetchNotes, fetchNote) ve mutasyonlar (addNote) tanımlamayı,
  • GraphiQL IDE üzerinden API’nizi test etmeyi.

⚙️ Adım Adım GraphQL API Kurulumu

1. Yeni Bir Rails API Uygulaması Oluşturma

Yeni bir API tabanlı proje başlatın:

rails new rails_graphql -d=postgresql -T --api
cd rails_graphql

📝 Bu komut PostgreSQL kullanan, test dosyaları olmayan bir API projesi oluşturur.

Veritabanını oluşturun:

rails db:create

📝 config/database.yml içindeki ayarları kullanarak geliştirme ve test veritabanlarını oluşturur.


2. GraphQL Ortamını Kurma

Gemfile dosyasına GraphQL gem’lerini ekleyin:

gem 'graphql'
group :development do
gem 'graphiql-rails'
end

Gem’leri yükleyin:

bundle install

GraphQL altyapısını oluşturun:

rails g graphql:install

📝 Bu komut GraphQL yapılandırması için gerekli dosyaları ve endpoint’i ekler.

GraphiQL IDE’yi etkinleştirin: config/routes.rb dosyasına ekleyin:

if Rails.env.development?
mount GraphiQL::Rails::Engine, at: "/graphiql", graphql_path: "/graphql"
end
post "/graphql", to: "graphql#execute"

📝 Bu sayede /graphiql adresinden tarayıcı üzerinden sorgu testleri yapılabilir.

Tarayıcı desteğini etkinleştirin: config/application.rb dosyasında şu satırın başındaki # işaretini kaldırın:

require "sprockets/railtie"

manifest.js oluşturun:

mkdir -p app/assets/config
nano app/assets/config/manifest.js

İçerisine şunları ekleyin:

//= link graphiql/rails/application.css
//= link graphiql/rails/application.js

3. Model ve GraphQL Tiplerini Oluşturma

Note modeli oluşturun:

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

Note tipini oluşturun:

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

Input tipini ekleyin (Mutations için): app/graphql/types/input/note_input_type.rb oluşturun:

module Types
module Input
class NoteInputType < Types::BaseInputObject
argument :title, String, required: true
argument :body, String, required: true
end
end
end

4. GraphQL Sorgularını (Queries) Yazma

BaseQuery sınıfını oluşturun:

module Queries
class BaseQuery < GraphQL::Schema::Resolver
end
end

Tüm notları getiren sorgu (fetchNotes):

module Queries
class FetchNotes < Queries::BaseQuery
type [Types::NoteType], null: false

def resolve
Note.all.order(created_at: :desc)
end
end
end

Tek notu ID ile getiren sorgu (fetchNote):

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('Not bulunamadı.')
end
end
end

QueryType dosyasına ekleyin:

field :fetch_notes, resolver: Queries::FetchNotes
field :fetch_note, resolver: Queries::FetchNote

5. GraphQL Mutasyonlarını (Mutations) Yazma

Yeni not ekleme mutasyonu (addNote):

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 }
rescue ActiveRecord::RecordInvalid => e
GraphQL::ExecutionError.new("Geçersiz veri: #{e.record.errors.full_messages.join(', ')}")
end
end
end

MutationType dosyasına ekleyin:

field :add_note, mutation: Mutations::AddNote

6. GraphiQL Üzerinden Test Etme

http://localhost:3000/graphiql adresine gidin ve şu sorguları deneyin:

📘 Tüm Notları Getir:

query {
fetchNotes {
id
title
body
}
}

📝 Tek Notu ID ile Getir:

query {
fetchNote(id: 1) {
id
title
body
}
}

➕ Yeni Not Ekle:

mutation {
addNote(input: { params: { title: "GraphQL Notu", body: "GraphQL ile not ekleme örneği" }}) {
note {
id
title
body
}
}
}

❓ Sıkça Sorulan Sorular (SSS)

1. GraphQL neden REST’ten daha esnektir?

Çünkü GraphQL, istemcinin yalnızca ihtiyaç duyduğu alanları tek istekte almasına izin verir.

2. GraphiQL nedir?

GraphiQL, tarayıcı üzerinden GraphQL sorgularını test etmenizi sağlayan etkileşimli bir IDE’dir.

3. rails new --api ne işe yarar?

Rails’i sadece API geliştirmeye uygun, hafif bir yapılandırmayla başlatır.

4. PostgreSQL yerine SQLite kullanabilir miyim?

Evet, ancak büyük ölçekli projelerde PostgreSQL daha stabil ve performanslıdır.

5. GraphiQL üretim ortamında açık kalmalı mı?

Hayır, sadece geliştirme ortamında etkinleştirin.


🎯 Sonuç

Artık Ruby on Rails üzerinde GraphQL tabanlı bir API geliştirmeyi öğrendiniz. Not oluşturma, listeleme ve sorgulama işlemlerini GraphiQL üzerinden kolayca test edebilirsiniz.

💡 Rabisu Bulut platformunda GraphQL destekli Rails API’lerinizi yüksek performanslı sunucularda hemen deneyin!