RESTful Web Servisleri – Hazırlık

Bu RESTful servislerin yazılması üzerine bir önek olacaktır. Fakat internette bulunan diğer örneklerden farklı, bir firmada çalışırken sizden istenen herşeyi içerisinde barındıracaktır. Yani projeyi yaratma, veritabanını tasarlama, JPA katmanının yazılması, Rest Servislerin yazılmasını ve hatta hazırladığınız Rest Servise ait istemcinin nasıl yazılacağına kadar bir çok konuyu kapsayacaktır. Sadece RestFul web servislerinin nasıl yazıldığını değil, diğer araçlarla ve kütüphanelerle nasıl entegre olduğunuda göreceksiniz. Yani RestFulk web servislerini öğrenirken Hibernate/JPA bilginizide güncelleyeceksiniz.

Içindekiler

  1. Hazırlık
    1. Projenin Yaratılması
    2. Veritabanının Yaratılması
  2. JPA Modellerinin Oluşturulması
  3. Hibernate DAO Sınıflarının Yazılması
  4. Web Servisin Yazılması
  5. GAE Üzerine Web Servisin Yüklenmesi
  6. Web Servis İçin İstemcilerin Yazılması

1.Hazırlık

Hazırlık kısmında projenin içeriğinden, veritabanı tasarımından, projenin yaratılmasından ve kullanılacak araçlardan bahsedilecektir.

Tüm proje Eclipse Helios altında geliştirilecektir. Ayrıca geliştirme sırasında sunucu olarak MySQL ve Tomcat 7.0 kullanılacaktır. RestFul Web servisleri için, JAX-RS uygulaması olarak Jersey kullanılacaktır. İsterseniz başka JAX-RS uygulamalarıda kullanabilirsiniz. Projenin lifecycle’ı maven tarafından yönetilecektir. Bu sebepten M2E eklentisini kullanmanız tavsiye edilir.

Bir apartmanın otoparkını yönetmek için bir sistem yazıldığını varsayalım. Arayüzü destekleyecek verilerin çekilmesinden sorumlu Web Servisi yazma işi ve veritabanının tasarlanması bu projede bize verilmiş olsun.

1.1 Projenin Yaratılması

Projemizi modüller haline yaratacağız. Modül yapısı kullanarak bir projeyi en rahat maven ile yönetebiliriz. Maven bizim için bağımlılıklarımızı ve modüllerimizi yönetecek. Ayrıca maven bizim için projemiz için çıkaracağım “Release” leride yönetecek. Tüm bu sebeplerden maven kullanılması en doğru karar gibi duruyor. Tabi bunları yapabileceğiniz tek çözüm maven değil başka çözümlerde mevcut. Örneğin Ant ilede bu tip bir yapı kurabilirsiniz. Fakat elinizde hazır Ant Script’leriniz yoksa çok zamanınızı alacaktır.

Sizinde öngörebileceğiniz üzere projemiz ana iki modülden oluşacak. Bunlardan biri veritabanı işlemlerini yönetirken, diğeri bu veritabanı işlemleri üzerinden web servis mimarisini ayağa kaldıracak. Bu durumda web servis modülü, veritabanı modülüne bağımlı olacaktır.

Aslında bir modülün diğerine bağımlı olması çok istediğimiz bir durum değil. Normalde bu tip bir yapıdan kaçınmanız gerekiyorsa, örneğin sistem ayaktayken veritabanı modülünü değiştirmeniz gerekebilir, araya birde API modülü koymanız gerekmetedir. Bu modül veritabanı modlününe dolaylı bağımlı olarak yaratılmalı (loosely-coupled). Örneğin reflection kullanarak ya da bir CDI kullanarak bu yapıyı kurabilirsiniz. Web servis modlü ise bu API üzeirnden veritabanı ile haberleşmelidir. Neyse daha fazla kafa karıştırmamak için biz API modülü kullanmayacağız.

1.1.1 Ana Projenin Yaratılması

Projenin iki farklı modülden oluşacağını söyledik. Tamam fakat bu iki modülü kapsayan başka bir yapı olmadan, bu iki modülü yönetmek zor olacaktır. Bundan dolayı maven bize Parent Pom kavramını sunuyor. Peki bu parant pom napıyor? Parent pom bu iki modülü ve bu iki modülün ortak bağımlılıklarını yönetiyor. Aynı zamanda Release çıkarırken işimizi kolaylaştırıyor. Özetle yazacağımız kod satırı sayısını azalttığı gibi, çıkacak üründe oluşacak kütüphane ve bağımlılık kargaşasını önlüyor.

Parent Pom’u aşağıdaki özelliklerde yaratıyoruz.

  • Group Id: bahadirakin-tutorial
  • Artifact Id: rest-tutorial
  • Version: 1.0.0.1-SNAPSHOT
  • Archetype: maven-archetype-quickstart
  • Package: com.bahadirakin.rest

Aslında burada archetype olarak ne seçtiğiniz çok önemli değil. Sonuçta ana projemizi oluştururken bazı değişiklikler yapacağız. İlk olarak Eclipse altında yarattığınız projenizde, pom.xml dosyanızı açın. Overview sekmesinden Packaging kısmını pom olarak değiştirin. Burdan sonra tek yapmamız gereken tüm projeler için ortak olacak, bağımlılıkları, build komutlanırı, raporlama komutlarını girmek. Biz ilk başta öngördüklerimizi gireceğiz ardından yeri geldikçe ortak kullandığımız kütüphaneleri dönüp ekleyeceğiz.

1.1.1.1 Bagımlılıklar

İlk önce proje genelinde kullanacağımızı düşündüğümüz bağımlılıkları ekleyelim. Tabi bu bağımlılıkları istediğimiz zaman gelip değiştirebiliriz. Bağımlılıkları eklemek için aşağıdakileri, dependencies tabının altına kopyalamaniz yeterli olacaktır.

1.1.1.2 Build Eklentileri

Projemizde, maven-sunfire-plugin, maven-compiler-plugin ve maven-eclipse-plugin eklentilerini Build için kullanacağız. Bu eklentileri ise aşağıdaki gibi projenize ekleyebilirisniz. Built eklentilerinin ne olduğunu ve ne işe yaradıklarını ise maven eklentilerini anlattığım bu makalemdenöğrenebilirsiniz.

1.1.1.2 Raporlama Eklentileri

Projemizde, maven-pmd-plugin, maven-surefire-report-plugin, maven-javadoc-plugin, maven-plugin-plugin ve maven-jxr-plugin eklentilerini kullanacağız. Bu eklentileri ise aşağıdaki gibi projenize ekleyebilirisniz. Raporlama eklentilerinin ne olduğunu ve ne işe yaradıklarını ise maven eklentilerini anlattığım bu makalemden öğrenebilirsiniz.

1.1.2 Veritabanı Projesinin Yaratılması

Ana projemizi yarattıktan sonra sıra Veritabanı Porjesinin yaratılmasına geldi. Projelerin hepsini en başta yaratıyorum ki daha sonra bir karışıklık çıkmasın. Eğer sizde, projenizde ne yapacağınızı kafanızda netleştirdiyseniz, ne tür projelerin yaratılması gerektiğini en baştan biliyor olmalısınız. Ana projei yaratırken paketleme türünü pom yapmıştık. Eğer dikkat ettiyseniz, Overview sekmesindeki modules kısmı yeni modüller alabilecek hale gelmiş durumda. Bu sebepten, şimdi yapılması gereken buraya yeni modüllerin eklenmesi. Bunun için modules kısmında sağ taraftaki Createbutonuna basıyoruz. Ardından projemizi aşağıdaki özelliklerde oluşturuyoruz.

  • Group Id: bahadirakin-tutorial
  • Artifact Id: rest-db
  • Version: 1.0.0.1-SNAPSHOT
  • Archetype: maven-archetype-quickstart
  • Package: com.bahadirakin.rest

Projenizi yaratırken dikkat ettiyseniz, bazı alanları değiştiremiyorsunuz. Bu alanlar ana projeden gelen verileri göstermektedir. Hatta yaratılan projede, versiyon ve group numarasını belirtmenize gerek yoktur. Sadce ana projeninkini belirtmeniz yeterlidir. Zaten m2e bu konuda size bir uyarı verecektir.

1.1.3 Web Servis Projesinin Yaratılması

Şimdi ise sırada RESTful web servisinin bulunacağı projenin yaratılması var. Bunun için yine aynı şekilde ana porjedeki pom.xml dosyasını açıyoruz. Ardından overview sekmesine geliyoruz. Burdan ise modules alanına gelip Create butonuna basıyoruz. Açılan ekrandaki yönergeleri takip edip aşağıdaki özelliklerde bir proje yaratıyoruz.

  • Group Id: bahadirakin-tutorial
  • Artifact Id: rest-main
  • Version: 1.0.0.1-SNAPSHOT
  • Archetype: maven-archetype-webapp
  • Package: com.bahadirakin.rest

Burada dikkat ettiyseniz kullandığımız Archetype değişti.

1.2 Veritabanının Tasarlanması

Veritabanı tahmin edebileceğiniz üzer iki farklı tablodan oluşacak. Bunlardan biri User tablosu. Bizim örnek projemizdeki apartmanda oturan her bir kişiyi temsil edecek. Diğeri ise Car tablosu. Apartamda oturan bir kişiye ait aracı temsil edecek.Bunun için öncelikle veritabnaı şemamızı oluşturuyoruz. Ben genel olarak MySql ortamında çalıştığım için örneğimide MySQL üzerinden yapacağım. Siz istediğini veritabanını seçmekte özgürsünüz. Kullanacağımız şema dbrest olsun.

1.2.1 User Tablosunun Oluşturulması

User tablosunu aşağıdaki gibi oluşturuyoruz.

1.2.2 Car Tablosunun Oluşturulması

Car tablosundaki her araç bir kullanıcıya ait olmalı. Bunun için Car tablosu ile User tablosu arasında 1->N bir ilişki olmalıdır. Car tablosunu bu özelliklerle aşağıdaki gibi oluşturuyoruz.

Böylelikle, projemizi hazırlamış olduk. Eğer proje hazırlama sırasında hata ile karşılaştıysanız, buradan bana bildirebilirsiniz. Büyük olasılıkla projenin ayarlarını değiştirirken eclipse projesini güncellemenizi isteyecektir. Eğer hata görürseniz, projenin üzerine sağ tıklayın maven menüsü altından Update Project Configuration seçeneğini seçin.

Proje ayarlarını doğru olarak yapıp yapmadığınızdan emin olman için, ana projenin klasöründe “mvn clean package” komutunu çalıştırabilirsiniz. Eğer tüm modüller için SUCCESS dönüyorsa, projeniz başarılı demektir.

Projeleri yaratırken sorun yaşadıysanız, proje yapısına Gir Repo’sundan bakabilirsiniz.

End Of Line