Daha önce API geliştirme ile ilgili Ruby On Rails’ te API Yazalım başlıklı bir yazı yazmıştım. Bu yazımda ise Rails::API
gem’ ini kullanarak API
geliştirmeyi anlatacağım.
Rails::API
bir API
için gerekli olan kütüphaneler dışındaki kütüphaneleri çıkararak(view, assests …), normal bir rails projesine göre daha hafif bir proje oluşturabilmemizi sağlayan gem.
Aşağıdaki komutu çalıştırarak gem’ i yükleyelim
gem install rails-api
Yeni proje oluşturmak için aşağıdaki komutu kullanacağız.
rails-api new pigon
Komutu çalışıtrdıktan sonra projenin dosyalarına baktığımızda app
dizininin çok sade olduğunu görüyoruz. API geliştirme ihtiyacı dışındaki şeyler(views, helpers, assets) atılmıştır. ApplicationController
’ a baktığımızda ActionController::Base
yerine daha hafif olan ActionController::API
’ den türetildiğini görüyoruz.
1 2 |
|
En büyük değişiklik ise Gemfile
dosyamızda. rails-api
gem’ ini buraya eklenmiş olarak görüyoruz fakat assets
grubundaki gem’ lerin ve jquery-rails
gem’ inin eklenmediğini görüyoruz.
1 2 3 4 5 6 7 8 9 10 |
|
Peki generator’ larda nasıl bir değişiklik oluyor?. scaffold
ile Product
modeli oluşturduğumuzda assets
, views
ve helpers
dosyalarının oluşturulmadığını görüyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Gördüğünüz gibi model
, controller
ve test
dosyalarından oluşan bir yapı oluşturuldu. Şimdi migration’ ı çalıştıralım.
1
|
|
scaffold
tarafından generate edilen ProductsController
’ ına baktığımızda sadece JSON
formatında veri döndürüldüğünü göreceksiniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
|
Uygulamamızın hiç HTML
view renderlemediğini sadece JSON
renderlediğini görüyoruz. Tarayıcımızda /products
yolunu ziyaret ettiğimizde JSON
formatında henüz ürün eklemediğimiz için boş bir array
renderlediğini göreceğiz.
curl
ile uygulamamıza product ekleyelim.
1 2 |
|
/products
adresini ziyeret ettiğimizde
1 2 3 4 5 6 7 8 9 |
|
JSON
formatında eklediğimiz ürünü görüyoruz.
Şimdide uygulamamıza XML
desteği ekleyelim.
Burada respond_to
metodunu kullanacağız.
1 2 3 4 5 6 7 8 9 |
|
/products.xml
sayfasını ziyaret ettiğimizde aşağıdaki hatayı alacağız.
1 2 3 |
|
Rails::API
de uygulamayı daha hafif hale getirmek için bir dizi özellik çıkarılmış durumda ama biz istersek bu özellikleri kolayca uygulamalarımza geri ekleyebiliriz. Yukarıdaki aldığımız hata da ActionController::MimeResponds
modülü etkin olmadığından kaynaklanıyor. ProductController
’ a ActionController::MimeResponds
modülünü ekleyelim.
1 2 3 4 |
|
Rails::API
README dosyasında ihtiyacımız çerçevesinde hangi modulleri kullanabilecegimiz listelenmiştir. Ancak bu liste modüllerin tam listesi değil. Rails
kodları ile Rails::API
nin kodlarını karşılaştırdığımızda bu listedeki eksik olanları görebiliyoruz.
Bazı modülleri kullanmak istediğimizde modülü sadece controller’ da çağırmak yetmeyebibilir. Rails::API
Controller
’ ları azalttığı gibi aynı zamanda Rack middleware
katmanınıda azaltmıştır. Normal bir rails uygulamasındaki middleware’ lar ile Rails::API
gem’ ini kullanarak olulturduğumuz bir uygulamadaki middleware’ ları karşılaştırırsak aşağıdaki middleware’ ların çıkarılmış olduğunu görüyoruz.
1 2 3 4 5 |
|
İhtiyacımız çerçevesinde bu middleware’ ları application.rb
ye ekleyerek kullanabiliriz.
Rails::API
kullanırken karşılaşılan sorunların birçoğu issuelarda çözülmüş. https://github.com/rails-api/rails-api/issues?page=1&state=closed Gözatmakta fayda var.
İyi çalışmalar…