Hello RESTful

Merhaba arkadaşlar, bu yazımızda RESTful’da hello diyeceğiz.

Rest ve Restful’un ne oldugunu giriş yazımızda öğrenmiştik. JAX-RS , Java için bir REST implementasyonudur(JSR 311 ). REST’in amacı kaynaklara ulaşmak ve onları kullanmaktır. Bu yüzden REST’in mimarisine bakıldığında aslında neredeyse herşeyin bir kaynak olduğu anlaşılıyor. Bu kaynaklara ise HTTP protokolleri ile erişmekteyiz. Bu kaynaklar aynı zamanda global IDs yada URIs ye sahiptir.

Restful’un farklı response tiplerini desteklediğini giriş yazısında anlatmıştım. Bugün json, xml, text ve html response tipinde Hello Restful yazdıracağız. Restful’un aslında Servlet olduğunu dile getirelim. web.xml file içerisinde yine servlet ve servlet mapping yapacağız. Extra olarak servlet tanımlarken bazı ayarları değiştireceğiz. Contaıner olarak ise Tomcat kullanacağız.

Öncelikle bir Maven projesi oluşturalım, ben pom.xml dosyasını paylaşacağım sizle;

* dependency olarak jersey-server eklememiz gerekmekte.

* Restfulun çalışma mantığı ise web.xml içerisine yazılan servlet’de bulunan package tanımları sayesinde servlet contaıner bir request geldiğinde package içerisinde ilgili url’i bulmaya çalışmasıdır.

* Mantık olarak package->class->method ile kaynaklara ulaşılır. Sınıf ve method’larda PATH annotation’u kullanarak servlet contaıner ilgili kaynağı paket içerisinde arayacaktır.

* Şimdi bir paket ve bir sınıf oluşturalım;

package -> com.restful.tutorial

class -> Hello

* Şimdi deployment descriptor(web.xml) içerisine bunu servlet olarak kayıt edelim.

* com.sun.jersey.config.property.packages parametresi Jerseyin web service classı için bakacağı paket tanımıdır.

* com.restful.tutorial paketi altındaki class’a bakalım. Dediğim gibi url pattern ile mapping ettiğimiz bir url geldiğinde init-param olarak yazdıgımız paket altında kaynak aranacaktır.

Hello.java

* Http request geldiğinde doğru class ve methodu bularak requeste cevap verir.

* Yukarıdaki sınıfa bakarsak eğer, kaynaklara Path  annotationlarıyla erişmekteyiz. Eğer birden fazla GET, POST methodumuz var ise bu annotation ile erişmeliyiz. Eğer tek GET yada POST vs. methodu varsa açıkça path vermeden de çalışabiliriz. Contaıner ilgili methoda gidecektir.

* Verdiğimiz path’ler ile ilgili kaynağa ulaşmış bulunmaktayız. Kaynaklara erişmek için url pattern ise şuna benzer olacaktır ;

* Uygulamamızda Html üreten methoda ulaşmak için url-pattern şu şekilde olacaktır;

http://wora:8080/HelloRest/rest/hello/html

* http://wora:8080/HelloRest/rest/ pathinden itibaren gelen request’ler com.restful.tutorial paketi altındaki annotationlar yardımıyla paket altında aranıcaktır.

  • wora : Domain Name
  • 8080 : Port Number
  • /HelloRest : Project Name
  • /rest : servlet url pattern
  • /hello : class annotation
  • /html : method annotation

* @GET , @Path , @Produces annotationları ile Http methodumuzun tipini, hangi url ile ulaşacağımızı ve MIME type olarak ne ürettiğimizi belirtmiş olduk. JAX-RS annotationlarına daha sonra detaylı olacak bakacağız.

* com.restful.tutorial paketi altındaki class ve methodlara ulaşmak için kullanacağımız url’ler ise şunlardır;

  • Text olarak Hello : wora:8080/HelloRest/rest/hello/text
  • Xml olarak Hello : wora:8080/HelloRest/rest/hello/xml
  • Html olarak Hello : wora:8080/HelloRest/rest/hello/html
  • Json için : wora:8080/HelloRest/rest/hello/json

* Rest servisini web browser da test etmek için Postman, Rest Client (Chrome Extension) uzantılarını kullanabilirsiniz. Local’de ise RESTClient UI yada SoapUi kullanabilirsiniz.

* Html olarak hello diyen methoda ulaşalım;

2015-01-03 23:35:10

 

 

 

 

 

 

* Kaynak kodlar : Hello Rest

* Yazımı burada sonlandırıyorum arkadaslar, bir sonraki yazıda görüşmek dileğiyle.

* Mutlu kalın, kod’la kalın ve bol bol Çay için

~ Alican Akkus

 

1861 Total Views 1 Views Today

  • Nazan

    Yazılarınız çok öğretici ve anlaşılır, bu yazınızın sonunda bahsettiğiniz POSTMAN ile http request yapma ile ilgili örnek de koyabilir misiniz ?
    Teşekkürler.

    • AlicanAkkus

      Merhaba , Chrome’a Postman’ı kurup rest servis url’ini vermeniz yeterli aslında. Yazıdaki örneği kullanarak bir tane örnek yaptım şurada; http://imgur.com/yuzjZSw
      Takıldıgınız noktaları tekrar sorabilirsiniz, tesekkürler