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 JSONformatı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::APInin 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…