- Konu sahibi
- #1
İlk API’nizi oluşturmak için Rails’in API-only uygulama tipini kullanın:
Ön koşul olarak Ruby, Rails ve uygulamanızın kullanacağı veritabanı sistemi kurulu olmalıdır. Terminalde yeni projeyi oluşturun:
REST yaklaşımında bir kaynak, belirli bir veri türünü HTTP yöntemleriyle yönetir. Örnekte kaynak türü
Scaffold komutu genellikle
Bu tanım, kitaplar için REST rotalarını oluşturur. İsterseniz dosyayı açıp yalnızca API’de kullanacağınız rotaları açıkça sınırlayabilirsiniz:
Oluşturulan
Listeyi kontrol etmek için sunucu çalışırken başka bir terminalde şu isteği gönderin:
Henüz kayıt eklenmediği için beklenen gövde
Yeni kayıt oluşturmak için JSON gövdeli bir
Başarılı istekte HTTP durum kodu genellikle
Buradaki
Üretim uygulamasında zorunlu alanları modelde doğrulayın:
İstemciden gelen veriyi doğrudan güvenilir kabul etmeyin. Scaffold tarafından oluşturulan güçlü parametreler yalnızca izin verilen alanların kaydedilmesini sağlar. Kimlik doğrulama, yetkilendirme, hız sınırlaması ve CORS ayarları ise
API’nin temel akışı tamamlandığında
rails new kitap_api --api, ardından bir kaynak üretip veritabanını hazırlayın ve JSON yanıtlarını curl ile doğrulayın. Aşağıdaki örnekte Book kaynağı üzerinden çalışan listeleme, tek kayıt görüntüleme, oluşturma, güncelleme ve silme uç noktaları elde edilir.API-only Rails uygulamasını oluşturma
Ön koşul olarak Ruby, Rails ve uygulamanızın kullanacağı veritabanı sistemi kurulu olmalıdır. Terminalde yeni projeyi oluşturun:
Bash:
rails new kitap_api --api
cd kitap_api
--api seçeneği, tarayıcıya HTML sayfası sunan klasik Rails yapısı yerine JSON tabanlı istemciler için daha uygun, daha küçük bir uygulama iskeleti oluşturur. Bu yapı; web arayüzü, mobil uygulama veya başka bir sunucunun HTTP üzerinden veri alıp göndermesi için kullanılabilir.Bir REST kaynağı oluşturma
REST yaklaşımında bir kaynak, belirli bir veri türünü HTTP yöntemleriyle yönetir. Örnekte kaynak türü
Book, yani kitaptır. Aşağıdaki komut model, migration, denetleyici ve rotaları birlikte üretir:
Bash:
bin/rails generate scaffold Book title:string author:string published_year:integer
bin/rails db:create db:migrate
title, author ve published_year alanları veritabanındaki sütunları temsil eder. db:migrate komutu çalıştırıldığında tablo oluşturulur. Migration başarısız olursa önce hata mesajındaki veritabanı bağlantısını, ardından config/database.yml içindeki bağlantı ayarlarını kontrol edin. Tablo oluşturulmadan API isteği gönderirseniz uygulama beklenen veriyi okuyamaz.Scaffold komutu genellikle
config/routes.rb dosyasına şu kaynağı ekler:
Ruby:
resources :books
Bu tanım, kitaplar için REST rotalarını oluşturur. İsterseniz dosyayı açıp yalnızca API’de kullanacağınız rotaları açıkça sınırlayabilirsiniz:
Ruby:
Rails.application.routes.draw do
resources :books, only: %i[index show create update destroy]
end
İsteklerin ve yanıtların işleyişi
Oluşturulan
BooksController, HTTP yöntemine göre ilgili işlemi çalıştırır. Temel eşleşme şöyledir:| HTTP yöntemi | Uç nokta | İşlem |
|---|---|---|
| GET | /books | Tüm kitapları döndürür |
| GET | /books/1 | 1 numaralı kitabı döndürür |
| POST | /books | Yeni kitap oluşturur |
| PATCH veya PUT | /books/1 | Kitabı günceller |
| DELETE | /books/1 | Kitabı siler |
Bash:
bin/rails server
curl -i http://localhost:3000/books
Henüz kayıt eklenmediği için beklenen gövde
[] olabilir. Bu sonuç, rotanın ve sorgunun çalıştığını gösterir; ancak veri ekleme işleminin başarıyla yapıldığını kanıtlamaz.Yeni kayıt oluşturmak için JSON gövdeli bir
POST isteği gönderin:
Bash:
curl -i -X POST http://localhost:3000/books \
-H "Content-Type: application/json" \
-d '{"book":{"title":"Örnek Kitap","author":"Ayşe Yılmaz","published_year":2024}}'
Başarılı istekte HTTP durum kodu genellikle
201 Created olur ve yanıt gövdesinde oluşturulan kitap bulunur. Yanıt 400 veya 422 ise gönderilen JSON’un yapısını ve model doğrulamalarını kontrol edin. İstemcinin gönderdiği alan adları modeldeki alanlarla eşleşmelidir; eksik veya geçersiz veri, kaydın oluşturulmamasına neden olabilir.show uç noktasını, oluşturulan kimliği kullanarak sınayın:
Bash:
curl -i http://localhost:3000/books/1
Buradaki
1 yalnızca örnektir; gerçek kimliği POST yanıtından veya GET /books sonucundan alın. 404 Not Found, rotanın çalışmadığını değil, istenen kimlikte kayıt bulunmadığını gösterir. Bu durumda önce listeyi çağırıp mevcut kimlikleri kontrol edin.Doğrulama ve güvenli giriş
Üretim uygulamasında zorunlu alanları modelde doğrulayın:
Ruby:
class Book < ApplicationRecord
validates :title, :author, presence: true
validates :published_year, numericality: { only_integer: true }, allow_nil: true
end
İstemciden gelen veriyi doğrudan güvenilir kabul etmeyin. Scaffold tarafından oluşturulan güçlü parametreler yalnızca izin verilen alanların kaydedilmesini sağlar. Kimlik doğrulama, yetkilendirme, hız sınırlaması ve CORS ayarları ise
rails new --api komutuyla otomatik olarak tamamlanmaz; bunlar uygulamanızın kullanıcı ve istemci modeline göre ayrıca tasarlanmalıdır.API’nin temel akışı tamamlandığında
GET, POST, PATCH ve DELETE isteklerini gerçek istemcinizle deneyin. Her istekte HTTP durum kodunu, JSON gövdesini ve veritabanındaki değişikliği birlikte kontrol edin; yalnızca 200 yanıtı görmek, verinin iş kurallarınıza uygun kaydedildiğini tek başına kanıtlamaz.