RESTful – 2

Standard

Netbeans ile basit bir RESTful denemesi;

– bir Web Projesi açtık
– JAX-RS 1.0 ve Jersey 1.0 kutuphanesini ekledik
– bir sinif olusturduk ve @Path(“aaa”) ile notladik.
– sinifa bir metod ekleyip @GET ile isaretledik. Bu, GET metoduyla bu kaynaga gelecek taleplere bu metodun cevap vermesini istedigimizi belirtiyor.
– sinifa bir metod ekleyip @POST ile isaretledik. Bu, POST metoduyla bu kaynaga gelecek taleplere bu metodun cevap vermesini istedigimizi belirtiyor.

@Path("/Rr") // Bu kaynaga erişecek uri ( http://..../Rr gibi olacak)
public class R {

@GET
public String getIcin(){
return "REST GET denemesi";
}

@POST
public String postIcin(){
return "REST POST denemesi";
}
}

– web.xml e

<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/rs/*</url-pattern>
</servlet-mapping>

ekledik.

index.jsp ye deneme icin iki adet form elemani ekledim.


<form method="GET" action="rs/Rr">
<input type="submit" value="GET DENE" />
</form>
<br>
<form method="POST" action="rs/Rr">
<input type="submit" value="POST DENE" />
</form>

Reklamlar

RESTful – 1

Standard

Kabaca SOAP servislerine göre uygulaması daha kolay olan, http protokolundeki komutları kullanarak web servisleri yazmamızı sağlayan bir mimari.

HTTP İstekleri

HTTP ile bir istek gonderilirken asagidakine benzer bir paket gonderiliyor.

GET /index.html HTTP/1.1
Host: http://www.tafali.net
Connection: close
User-agent: Mozilla/4.0

http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html adresinde istegin yapısını gorebiliriz.

Method SP Request-URI SP HTTP-Version CRLF

Request-URI de bir kaynak var, bu bir web sayfasi, resim, bir dosya (PDF vs) olabilir. Method da gene ayni sayfada gorebilecegimiz bir dizi tanımlı komutlar.

Method = "OPTIONS"
| "GET"
| "HEAD"
| "POST"
| "PUT"
| "DELETE"
| "TRACE"
| "CONNECT"
| extension-method
extension-method = token

yani yukaridaki ornekte /index.html kaynagi icin GET talebi gonderiliyor.

GET ve POST http protokolundeki bilgimiz en meshur metodlar. HTML kodu yazarken form tagında kullanıyoruz. Formu servera gonderirken hangi metodla ve hangi kaynaga gonderecegimizi soyluyoruz.

< form method=”post” action=”uyeKayit.php” >

Formumuzdaki bilgileri uyeKayit.php sayfasina POST metoduyla gonderecek, ve bilgilerimiz orada islenecek.


Sanırım, kabaca RESTFUL, kaynakta, request-uri nin gosterdigi yerde bir nesnemiz olması ve o nesnenin bazı metodlarinin http deki bazi metodlarla eslestirilmesiyle servis hizmeti verilmesi gibi dusunulebilir. HTTP başlığında GET metodu varsa kaynaktaki nesnenin getOgrenci() metodu, başlıkta POST varsa, createOgrenci() metodu calissin vs.. gibi.

Bir servisten isteyebileceğimiz genel işlemler olan, Oluştur ( Create ), Oku/Getir ( Read ), Güncelle ( Update ) ve Sil ( Delete ) işlemleri için sırasıyla, POST, GET, PUT, DELETE HTTP Metodları eşleştilebilir. Fakat kaynağınızdaki ( Nesne ) eşleşecek metodların içini doldurmak bize kaldığına göre istedigimiz metod için istediğimizi yaptırabiliyor olmalıyız sanırım 🙂

Hello Web Service 2

Standard

Bu sefer java kodlarımızı bir text editörde yazıyoruz. Notepad olabilir.

Merhaba.java dosyası


@WebService
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class Merhaba {

public String merhaba() {
return "Merhaba";
}
}

main metodunu iceren Calistir.java dosyamiz.


public class Calistir {

public static void main(String[] aa) throws IOException {
Endpoint endpoint = Endpoint.publish(
"http://localhost:8080/WS02/merhaba",
new Merhaba());
}
}

aslında herşeyiyle önceki yazıdakinin aynısı. Bu sefer netbeans ya da eclips yok ve ilk dosyada önceki yazıda söylediğim SOAPBinding notu var.

Komut satırından yazdığımız kodları derliyoruz. ws03 klasorune koymustum dosyaları.

javac -d blt ws03/*

blt klasörüne geçip çalıştırıyorum.

cd blt
java ws03.Calistir

Browser da wsdl dosyası geliyor.

Hello Web Service

Standard

Çok basit bir deneme:

1- Bir web projesi açtım.
2- Basit bir sınıf yazdım, içinde basit bir metod var. Farkli olarak sinifin basina @WebService ekledim.
@WebService
public class Merhaba {

public String merhaba() {
return "Merhaba";
}
}

3- Basit bir main metoduyla, yayınladım

public class Calistir {

public static void main(String[] aa) throws IOException {
Endpoint endpoint = Endpoint.publish(
"http://localhost:8080/WS02/merhaba",
new Merhaba());
}
}

ilk parametre, servisin ulasilacagi adres, kelimelerin secimi serbest. “http://localhost:8082/WS05/selam&#8221; da calismasi lazim. ikinci parametre servisin uygulandığı sınıfın bir örneği.

4- Browserda http://localhost:8080/WS02/merhaba?WSDL adresinden wsdl dosyasini gorebiliyordum.

  • Projeyi Web Application yerine Java Application yaparsak, çalıştırmayı denediğimizde
    Exception in thread “main” com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class ws03.jaxws.Add is not found. Have you run APT to generate them?
    gibi bir exception geliyor.
  • Servisin uygulandığı sınıfı yazarken @WebService notunun altına @SOAPBinding(style=SOAPBinding.Style.RPC) da eklerseniz, main normal uygulama olarak çalışıyor. Projenin de web projesi olması gerekmiyor. Yukarıdaki hata mesajını da almıyorsunuz.