restful etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
restful etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

JAX-RS (RETURNING JSON RESPONSE)

   Arkadaşlar merhaba.Bu yazımızda response mesajımızın nasıl json formatında  döndürüleceğine bakacağız.Customer adında bir entity sınıfımız olacak.Getter ve setter metodlarımız ile verilerimizi kontrol edeceğiz.CustomerDataService adındaki sınıfımızdan gelen veriyi restful web servisimizde json formatında response edeceğiz.Veri sıkıntısı çekmemek için javanın data factory kütüphanesini kullanacağız.CustomerDataService sınıfımızda datafactory'den aldığımız verileri bir List'e dolduracağız.Daha sonra web servisimizde bu verileri json formatında döndüreceğiz.Burada kullanacağımız  ek açıklama @Produces(üretmek).Hazır olun JSON üreteceğiz :)Şimdide kodlarımıza ve çıktımıza göz atalım.






İYİ ÇALIŞMALAR...


Bu arada JAX-RS yazılarımda kaynak olarak https://www.logicbig.com 'u kullanıyorum.Çok iyi bir site bakmanızı tavsiye ederim.Kod örnekleri oradan.Kendi kodumuzu yazamazmıyız yazarız fakat bende yeni yeni başladığım için şimdilik kendi yazdıkları kodlardan gidiyoruz.Konularda ilerledikçe kendi uygulamalarımızı geliştireceğiz.İlk projemizi http methodlarının hepsini öğrendikten sonra,hepsini kullanabileceğimiz bir proje geliştireceğiz.Sağlıcakla kalın... 

API İLE WEB SERVİSİ ARASINDAKİ FARKLAR

      API (Application Programming Interface) kısaca bir uygulamanın belirtilen işlevlerinin başka bir uygulama içerisinde kullanılması.Yani iki uygulama arasında bir görevi görür.Web servisi ise ağ üzerindeki iki makine üzerindeki etkileşimi kolaylaştırır.Bir web servisi genellikle(RESTful'da yok) web hizmeti açıklama dilinde (WSDL) makine ile işlenebilir biçimde tasvir edilen bir arabirime sahip olacak şekilde tasarlanmış.Bildiğiniz gibi en yaygın kullanılan protokol HTTP.Web servislerinde iletişim olarak REST,SOAP ve XML-RCP kullanılır.API uygulamalar arasında etkileşimi başlatmak için herhangi bir iletişim aracını kullanır.En önemli noktalardan bir taneside budur.Örneğin, sistem çağrıları Linux çekirdeği API'sı tarafından kesmeler kullanılarak çağrılıriWeb servisi, HTTP'ye sarılmış bir API'dır.API, etkileşimi kolaylaştırmak bir yazılım programının eksiksiz bir kurallar ve teknik özellikler kümesinden oluşur. Bir Web hizmeti, eksiksiz bir teknik özellikler kümesini içermeyebilir ve bazen tam bir API'den mümkün olabilecek tüm görevleri gerçekleştiremeyebilir.API'ler aşağıdakileri içeren çeşitli yollarla açığa çıkabilir: C / C ++ programlama dilinde COM nesneleri, DLL ve .H dosyaları, Java'da JAR dosyaları veya RMI,  HTTP üzerinden JSON, vb. Web'de API'yi açığa çıkarmak için servis bir ağ üzerinden gerçekleştirlimesi zorunludur.


  Özetlemek gerekirse:

1)Her Web servisi bir API'dir fakat her API bir web servisi olmak zorunda değildir.

2)Web servisleri,bir API'nin gerçekleştireceği tüm işlemleri gerçekleştiremeyebilir.

3)Bir Web hizmeti sadece üç kullanım şekli kullanır: SOAP, REST ve XML-RPC
API iletişim için herhangi birini kullanabilir.

4)Bir Web servisinin her zaman için bir ağ'a ihtiyacı olurken bir API'nin
çalışması için ağ'a ihtiyacı yoktur gerekmez.




Kaynak
http://www.differencebetween.net/technology/internet/difference-between-api-and-web-service/



İYİ ÇALIŞMALAR...






JAX-RS (REGEX && RETURNING RESPONSE)

     Bugünkü yazımızda REGEX kullanmayı ve kullanıcıya değişik response mesajları döndürmeyi öğreneceğiz.Önceki yazılarımızda response olarak hep bir string mesajı döndürdük.Hatalı bir istekte glassfish bize 404 not found mesajını döndürüyor.Bugün yapacağımız örnekte kullanıcıdan belli bir kurala göre orderId ve itemId isteyeceğiz.Bu kurala uyarsa 200/OK yanıtı,uymaz ise 400 bad request yanıtını göndereceğiz.Daha sonra programımızı çalıştırıp wireshark üzerinden pakelerimizi inceleyeceğiz.Hadi başlayalım.Meşhur class'ımız ApplicationConfig herzaman ki yerini almış durumda :).OrderService classımıza bakalım.Daha sonra paketlerimizi inceleyelim.









 Wireshark'ın genel görünümü


İlk isteğimiz formatımıza uygun olduğu için OK mesajı ikinci isteğimiz ise uygun olmadığı için BAD REQUEST mesajını aldık.Wireshark ağınızda akan paketleri inceleyebilirsiniz.Bir sonraki yazımızda görüşmek üzere.Sağlıcakla kalın...

JAX-RS (@QueryParam&@DefaultValue)

     Herkese merhaba.Bu yazımızda @QueryParam ek açıklamasını öğreneceğiz.Bir önceki yazılarımızda belirttiğimiz @PathParam açıklamasının yetersiz olduğunu düşünmüşler ki böyle bir açıklama daha ekleme ihtiyacı duymuşlar :)Ya da kullanıcıya daha geniş bir kullanım alana sunmak.
GET/api/bagiscilar diye yapılan bir istekte bize bağışçıların tümünün döneceğini öğrenmiştik.Fakat kullanıcının bunu daha fazla sınırlayabildiğini de biliyoruz.Örneğin 3 id numarasına sahip bagışcı.Peki ya biz Hatay'daki AB+ kan grubuna sahip bağışçıları istiyoruz.Aklınıza GET/api/bagiscilar/Hatay/ABRH+ gelmis olabilir.Fakat bu isteği çok daha fazla uzatabilir.Mesela Hatay'daki 25 yaşüstü erkek ve A RH+ kan grubuna sahip bagışçıları getir deyince kaç türlü kombinasyon çıktığını düşünün :)İşte bu durumlarda yardımımıza @QueryParam yetişiyor.Yazdığımız query string'e göre istenilen veriyi çekiyor.Şimdi örneğimize geçelim.Örneğimizdeki sorgu GET/api/order?startPage=10&&pageSize=20 gibi.Bu çok daha fazla uzayabilir.Herzamanki gibi ApplicationConfig classımız aynı şekilde görevine hazır bir şekilde projemizde yerini almış durumda :)Daha sonra yazdığımız orderService classımızda kullandığımız @QueryParam ve @DefaultValue açıklamalarına dikkat edelim.@DefaultValue belirtilen isime ait her hangi bir veri girilmezse o alanın hangi değere sahip olacağını belirtiyor.Kodlarımızı inceleyip uygulamamızı çalıştıralım.



Bir sonraki yazımızda görüşmek dileğiyle.İyi çalışmalar.

JAX-RS (@ApplicationPath,@Path,@PathParam)

     Bu yazımızda kendi rest servislerimizi java ile nasıl kodlayacağımızı öğreneceğiz.İlk projemiz olduğu için herşeyi göstermek istiyorum.

    Java da iki tür web servis bulunur.

1)JAX-RS (JAVA API FOR RESTful SERVICES)
2)JAX-WS(JAVA API FOR XML WEB SERVICES)

Bizler RESTful web servisleri yazacağızBu servislerimiz  yazarken kullanabileceğimiz kütüphaneler ise

1)Jersey
2)RESTEasy
3)ApacheCXF
4)Restlet

Bizler rest servislerimizi yazarken Jersey kütüphanesinden faydalanacağız.İleride diğer kütüphaneleri de kullanıp hangisinin nerede daha avantajlı olduğuna hep birlikte karar vereceğiz.Hadi başlayalım.


    Projelerimizi Apache Maven kullanarak yazacağız.İleride birçok kütüphane kullanacağız ve bu kütüphaneleri tek tek indirip projemize jar dosyası olarak eklemek yerine, eklemek istediğimiz kütühanenin bağımlılığını (dependencies) buradan bulup pom.xml dosyasına ekleyeceğiz .Maven bu kütüphaneleri projemize ekleyecek.Daha sonra bir web servisi yazdığımız için bir server'a ihtiyacımız var.Herhangi bir local server işinizi görecektir.Ben payara server kullanıyorum.Ben projelerimi NetBeans üzerinde geliştiriyorum.Sizler Eclipse,Intellij,NetBeans veya dilediğiniz bir IDE üzerinde geliştirebilirsiniz.

İlk olarak bir maven web application oluşturuyoruz.

Projemize isim verip hangi server üzerinde çalışacağını belirledikten sonra projemizi oluşturmuş oluyoruz.

      

Daha sonra Project Files klasöründe bulunan pom.xml dosyasına Jersey bağımlılıklarını ekliyoruz.

ApplicationConfig adında bir java sınıfı oluşturuyoruz.Bu sınıf yazdığımız servisin yolunu gösterecek ve yazdığımız servisi buradan kontrol edeceğiz.Birden fazla web servisi yazmanız gerekiyor olabilir ve bu servisler birbiri ile bağlantı halinde olabilir.Bu sınıfımızda @ApplicationPath ek açıklamasını(annotation) kullanacağız.Burada bizim root path'imiz bulunacak ve Application sınıfını extend etmeliyiz.Bu şekilde...

Bu aşamadan sonra web servisimizi yazmaya başlayabiliriz.Burada dikkat etmenizi istediğim yerler olacak.Bunlardan ilk'i servisimizin yaptığı işi path'ler ile yazarken isimlendirmeye çok dikkat etmeniz.Bu isimlendirmeleri yaparken örneğin http://localhost:8080/api/orders tüm siparişleri göstermesi.http://localhost:8080/api/orders/{orderId}(buraya herhangi bir id değeri gelecek) dediğinde ise girilen id numarasına ait sipariş gelmelidir.Anlatmak istediğim şey siz RESTful ile bir web servisi yazacağınızda bu servisi kullanacak olan insanın herhangi bir dokümantasyon olmadan çok rahat bir şekilde kullanabilmesi gerekiyor.Bu yüzden isimlendirmelere çok dikkat etmeliyiz.Şimdi servisimizi yazmaya başlayalım.Başlangıç olarak böyle bir servis yazalım.http://localhost:8080/api/me/gokhan dediğimizde bize cevap olarak Hoşgeldin GOKHAN desin.Hadi başlayalım.ApplicationConfig sınıfının bulunduğu package'a MerhabaService adında bir sınıf oluşturalım.Sınıfımızı oluşturduktan sonra @Path("/me") açıklamasıyla sınıfımızın yolunu belirliyoruz.Bu aşamadan sonra fonksiyonlarımızı yazmaya başlayacağız.Bir önceki yazımızda HTTP request metodlarından bahsetmiştik.Şimdilik sadece @GET açıklamasını kullanacağız.String değer döndüren getMerhaba adında bir fonksiyon yazalım.Bu fonksiyona @GET methodu ile erişilecek ve @Path("/{name}") kullanıcı tarafından girilecek.Sınıfımızın yolunu belirlerken herhangi birşey kullanmadığımız için GET isteğinde direkt me diye geçmeli
http://localhost:8080/api/me/kullanıcı-tarafından-girilen-isim daha sonra fonksiyonumuz Merhaba girilen isim şeklinde bir değer döndüreceği için bu değeri parametre olarak almamız gerekiyor bunun içinde @PathParam("name") açıklmasını kullanıyoruz.Geriye aldığımız string değerini toUpperCase() fonksiyonuyla büyütüp döndürmek.





İYİ ÇALIŞMALAR


REST MİMARİSİ VE RESTful WEB SERVİSLERİ

     REST (Representational State Transfer) Türkçe anlamıyla Temsili Durum Transferi olarak adlandırılan,web protokolleri ve teknolojilerini kullanan bir dağıtık sistemdir.Peki dağıtık sistem nedir ? Dağıtık sistem,bilgisayarın veya sunucuların birbirleriyle bir bütün olarak çalışmalarına denir.REST,bir veri transfer yöntemidir.HTTP üzerinden çalışan REST,basit sorgular ile verilere kolay erişim sağlamakla beraber hızlıdır.REST,bu verileri XML veya JSON formatında taşır.Çoğu zaman JSON tercih edilir.Bunun nedeni JSON'un XML'e göre insanlar tarafından daha basit okunabilmesi ve verileri daha küçük boyutlarda tutabilmesidir.


   RESTful web servisleri ise REST standartlarına uygun olarak yazılan web servislerine denir.Bu yazımızdan sonra JAX-RS ile kendi web servislerimizi nasıl yazacağımızı öğreneceğiz.REST standartlarına uygun yazılan web servislerine RESTful demiştik.Peki nedir bu web servisleri ? Web servisleri,HTTP protokolü ile hizmet veren uygulamalardır.Yazılan metodlar bir sunucu üzerinde çalıştırıldıktan sonra bir response mesajı üretir.Yani siz bir request mesajına karşılık bir response mesajı alırsınız.Biz bu servisleri yazarken istemcinin verilere hızlı ve kolay bir şekilde ulaşmasını sağlarız.Örnek olarak ben size RESTful bir web servisi yazarım.Bu servis size güncel hava durumu bilgilerini  sunar.Sizde yaptığınız HTTP request mesajları ile bu verileri anlık olarak çekersiniz.4 tip HTTP istek metodu vardır.Bunlar GET,POST,PUT ve DELETE.RESTful servislerde 


  1. GET=veri getirme
  2. POST=veri ekleme
  3. PUT=veri güncelleme
  4. DELETE=veri silme 
olarak kullanılır.Siz bu isteklerden birini yaparsınız ve size bir response mesajı döner ve bu response mesajlarının birer durum kodu olur.Bu durum kodları ise client'ı bilgilendirmek içindir.HTTP durum kodlarını buradan inceleyebilirsiniz.Wireshark uygulaması ile HTTP request ve response paketlerinin yapılarını şekilde görüldüğü gibidir.

       Elimizde kan bağışı yapmak isteyen insanların bulunduğu bir veritabanımızın olduğunu varsayalım.Bu bilgilerin bir RESTful web servisi ile erişime açık olduğunu varsayalım.Biz bu servise yapacağımız bir HTTP isteği ile kan bağışçılarının isimlerini çekebiliriz.Bu bağışçılara yenilerini ekleyebilir,silebilir veya güncelleyebilir.Örneğin bu şekilde yapılan bir istek
"GET/bagisci/3" (URI-Uniform Resource Identifier) şekilinde 3 numaralı id'ye sahip bağışçının bilgilerini getirir veya GET/bagisci?sehir=Ankara(QueryString) gibi bir sorgu Ankarada bulunan bağışçıların listesini getirir.Gördüğünüz gibi çok esnek,genişletilebilir,rahat ve hızlı bir kullanıma sahip.REST ve RESTful kavramlarını kısaca öğrenmiş olduk.



İYİ ÇALIŞMALAR...












Spring Boot Uygulamasını Heroku üzerinde Deploy Etme

Bu yazımızda sizlere spring boot ile yazılmış basit bir Rest api'nin heroku üzerinde nasıl deploy edebileceğimizi göstereceğim. Önce ...