Bu yazımda bir Jersey
implementationu olan JAX-RS ile RESTful webservislerinin nasıl
geliştirildiğinden bahsedeceğim.
Rest(Representational
State Transfer) : REST ,
SOAP gibi bir servisdir.REST in SOAP dan en önemli farkı XML ve
JSON formatı ile mesaj yollayıp geri alıyor olabilmesidir.REST ,
HTTP protokolü üzerinden GET,POST,PUT veya DELETE komutlarını
kullanarak isteklerini bildirir.Şimdi bu komutlara bir göz atalım.
GET : Sunucuda
bulunan kaynağı(resource) almak için kullanılır.Bu metod ile
resource değişmez.Bir nevi select görevi görür.
POST : Yeni bir
kaynak(resource) oluşturmaya yarar.Bir nevi insert görevi görür.
PUT : Mevcut bir kaynağı
değiştirmek-güncellemek için kullanılır.Bir nevi update görevi
görür.
DELETE : Mevcut bir
kaynağı silmek için kullanılır.
Java da Jersey ileJAX-RS
Kullanımı
Java'nın REST desteği JSR
(Java Spesification Request) 311 aracılığıyla olur. İşte bu JSR
311 özelliği JAX-RS(Java API for RESTful Web Services) diye
bilinir.
Jersey : Jersey bir JSR
311 implementationudur.Bu implementation Restful web servisleri için
bir kütüphane sağlar.
Jersey hem server hem de
client tarafında iletişim kurmamızı sağlar. URL aşağda ki
gibidir;
http://your_domain:port/display-name/url-pattern/path_from_rest_class
Bu servlet gelen HTTP
requestlerini analiz eder ve bunlara uygun bir response için uygun
classı seçer.
JAX-RS , JAXB ' ye alternatif
olarak JSON ve XML formatlarının ikisini de destekler.
@Produces(MediaType.TEXT_PLAIN[,
more-types]) : Mime türünün belirlememize yarar.Gelen
data GET metodu ile alınan datadır.Bu tür ayrıca
“application/xml” ya da “application/json” da
olabilir.Yanda ki kısımda “text/plain” örnek
olarak kullanılmıştır.
@Consumes(type[,
more-types]) : Alınan kaynağın mime type ını belirlemek için
kullanırız.
@PATH(your_path)
: URL + /your_path.Aşağıda ki örnek gibidir.
http://your_domain:port/display-name/url-pattern/path_from_rest_class
Jersey
kütüphanelerini
buradan
indirebilirsiniz.
Aşağıda
ki örnekler Jersey kullanarak XML ve Json formatında RestFul
webservis yazılışını göstermektedir.
Java classlarımızı yazmaya başlamadan önce açtığımız
Dynamic Web Projesinde ki web.xml dosyamıza aşağıda ki gibi
eklemeler yapmamız lazım.
web.xml
<?xml
version="1.0"
encoding="UTF-8"?>
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID"
version="3.0">
<display-name>KutuphaneOtomasyonu</display-name>
<servlet>
<servlet-name>Jersey
REST Service</servlet-name>
<servlet- class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.mesutemre.kitaplarJAXRS</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey
REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
KitaplarRestModel.java
@XmlRootElement(name
= "kitap")
public
class
KitaplarRestModel {
private
Integer kitapID;
private
String kitapad;
private
String yazarad;
private
String kitaptur;
private
String kitapdurum;
public
Integer getKitapID() {
return
kitapID;
}
public
void
setKitapID(Integer kitapID) {
this.kitapID
= kitapID;
}
public
String getKitapad() {
return
kitapad;
}
public
void
setKitapad(String kitapad) {
this.kitapad
= kitapad;
}
public
String getYazarad() {
return
yazarad;
}
public
void
setYazarad(String yazarad) {
this.yazarad
= yazarad;
}
public
String getKitaptur() {
return
kitaptur;
}
public
void
setKitaptur(String kitaptur) {
this.kitaptur
= kitaptur;
}
public
String getKitapdurum() {
return
kitapdurum;
}
public
void
setKitapdurum(String kitapdurum) {
this.kitapdurum
= kitapdurum;
}
}
Yukarıda
yazdığımız POJO , XML ve JSON elde etmek için kullanacağımız
POJO dur.
Artık
Resource dosyalarımızı yazabiliriz.
KitaplarRestResource.java
@Path("/kitaplar")
public
class
KitaplarRestResource {
@GET
@Produces(MediaType.TEXT_XML)
public
List<KitaplarRestModel> getKitaplarBrowser() {
return
findAllBooks();
}
@GET
@Produces({
MediaType.APPLICATION_XML,
MediaType.APPLICATION_JSON
})
public
List<KitaplarRestModel> getKitaplar() {
return
findAllBooks();
}
@GET
@Path("kitapsayisi")
@Produces(MediaType.TEXT_PLAIN)
public
String getCount() {
return
String.valueOf(findAllBooks().size());
}
private
List<KitaplarRestModel> findAllBooks() {
List<KitaplarRestModel>
kitapRestList = new
ArrayList<KitaplarRestModel>();
List<Kitaplar>
kitapList = new
ArrayList<Kitaplar>();
try
{
KitaplarFacade service = (KitaplarFacade) new
InitialContext()
.lookup("kitapservice");
kitapList = service.findAllKitaplar();
for
(int
i = 0; i < kitapList.size(); i++) {
KitaplarRestModel
krm = new
KitaplarRestModel();
krm.setKitapID(kitapList.get(i).getKitapID());
krm.setKitapad(kitapList.get(i).getKitapad());
krm.setYazarad(kitapList.get(i).getYazarad());
krm.setKitaptur(kitapList.get(i).getKitaptur());
krm.setKitapdurum(kitapList.get(i).getKitapdurum());
kitapRestList.add(krm);
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
kitapRestList;
}
}
Burada
findAllBooks() metodu ile DB deki kitap listesini çekiyoruz.Çektikten
sonra kendi POJO typında bir List dolduruyoruz.
Yukarda
ki URL'i tarayıcımıza yapıştırdığımız zaman bize XML
formatında bir sayfa açacaktır.
<kitaplarRestModels>
<kitap>
<kitapID>12</kitapID>
<kitapad>Java
Server Pages</kitapad>
<kitapdurum>Rafta</kitapdurum>
<kitaptur>Bilgisayar</kitaptur>
<yazarad>Mimar
ASLAN</yazarad>
</kitap>
....
JSON
formatında bir servis elde etmek için resource classımız aşağıda
ki gibi olur.
KitaplarRestResourceJSON.java
@Path("/kitaplarjson")
public
class
KitaplarRestResourceJSON {
@GET
@Produces(MediaType.APPLICATION_JSON
+ ";charset=utf-8")
public
List<KitaplarRestModel> getKitaplarJson() {
return
findAllBooks();
}
}
http://localhost:9090/KutuphaneOtomasyonu/rest/kitaplarjson
Yukarıda ki URL ise bize JSON
formatında kitap listemizi gösterir.
Hiç yorum yok:
Yorum Gönder