JAX RS – 01 – Hello JAX-RS & RESTful

Acknowledgments

Hamd alemlerin Rabbi olan, insana bilmedigini ogreten Allah’a mahsustur.
Allemel insâne mâ lem ya’lem.
Alak /5

JAX-RS egitim yazi dizisinden herkese merhaba.
Bu bolumde JAX-RS ve RESTful kavramlarina giris yapacagiz.
Faydali olmasi dileklerimle.

Web Service nedir ?

Web Service kavrami “self explanatory/ açıklama gerektirmeyecek kadar açık” bir isme sahiptir.
Web/Internet uzerinde calisan , HTTP protokolu ile iletisim kurabilecegimiz hizmetler/uygulamalardir.

Web Service’leri farkli uygulamalarin birlikte calismalarina olanak saglar. (interoperating)
Farkli uygulamalar , farkli programlama dilleri ya da frameworklerini kullansalar bile bu birlikte calisma prensibini (interoperating) Web Service’ler ile saglayabilirler.

Java EE Tutorial’da Web Service icin su aciklama yer almaktadir ;

Web services are client and server applications that communicate over the World Wide Web’s (WWW) HyperText Transfer Protocol (HTTP). As described by the World Wide Web Consortium (W3C), web services provide a standard means of interoperating between software applications running on a variety of platforms and frameworks.

What Are Web Services?

Java da 2 tip Web Service bulunmaktadir.

  • JAX-RS
  • JAX-WS

JAX-RS

JAX-RS , Java API for RESTful Web Services anlamina gelmektedir.

RestEasy Reference Guide ;
JAX-RS 2.0 (JSR-339) and JAX-RS 2.1 (JSR-370), are JCP specifications that provide 
a Java API for RESTful Web Services over the HTTP protocol.

JSR (Java Specification Request) arasinda JAX-RS ‘in spect’ine ulasabilirsiniz.
JSR 339: JAX-RS 2.0: The Java API for RESTful Web Services
JSR 370: JAX-RS 2.1: The Java API for RESTful Web Services

JSR’lar bir urun degildir , specification/sartname/kurallar butunudur. JAX-RS de bir urun degildir. Cesitli JAX-RS urunleri/implementation;

REST

REST kavrami Roy Fielding’in 2000 yilinda yayinladigi doktora tezinden gelmektedir.
Architectural Styles and the Design of Network-based Software Architectures.
REST , Representational State Transfer anlamina gelmektedir.

REST kavrami protokola ozgu degildir , bununla birlikte HTTP uzerinde REST kavrami aklimiza gelecektir.

HTTP request/response tabanli stateless/durumsuz bir protokoldur.
Daha fazla bilgi icin Servlet&JSP bolumune goz atabilirsiniz.

Servlet & JSP – 01 – Giris ve Temel Kavramlar

HTTP is a synchronous request/response-based application network protocol 
used for distributed, collaborative, document-based systems. 
It is the primary protocol used on the Web.

REST , architectural style/mimari yaklasim/desing concept’ti , bir teoridir.
Resource-oriented architecture(ROA) stili software architecture’dir.
REST mimarisi genel olarak WebService’ler ile iliskilendirilir.

https://tr.wikipedia.org/wiki/REST
https://en.wikipedia.org/wiki/Representational_state_transfer

RESTful Architectural Principles

REST prensiplerini saglayan sistemler, RESTful olarak isimlendirilir.
RESTful sistemler icin bazi kisitlamalar/constraints vardir;

  • Client-Server system
  • Stateless
  • Cacheable
  • Layered system, support scability
  • URI accessible

https://tr.wikipedia.org/wiki/REST

Addressability/Addressable resources

Addressability /Adreslenebilirlik ,kaynaklara (resources) unique/essiz bir identifier/belirtec ile ulasilabilir olmasi anlamina gelmektedir.
Her resource/kaynak , URI (Uniform Resource Identifier) ile adreslenir.

RESTful resource (kaynak) , adreslenebilir (addressable) ozellige sahip herhangi bir sey olabilir.

each resource must be addressable via a URI (Uniform Resource Identifier).
Addressability is the idea that every object and resource in your system 
is reachable through a unique identifier. 

REST dunyasinda , “addressability”, URI’lar ile yonetilir.
Browser’imiza bir istek gonderdigimizde, bu bir URI a karsilik gelecektir.

In the REST world, addressability is managed through the use of URIs. 
When you make a request for information in your browser, you are typing in a URI.

Uniform Resource Identifier  anlamina gelmektedir.
What is the difference between URI, URL and URN?

Genel format ;

scheme://host:port/path?queryString#fragment

scheme ;  kullanilan protocol’dur. http , https , ftp gibi protocoller olabilir. RESTful web serviceler icin http ya da https protokollerini kullaniriz.

host ;  DNS adi ya da IP Adresi olabilir , optional olarak port kullanilabilir.
Daha sonrasinda path ve query parametreleri yer almaktadir.

http://example.com/customers?lastName=Erguder&zipcode=34000

URI adresinde tum karakterlere izin verilmez. Bazi karakterler encoded olmalidir.
a–z, A–Z, 0–9, ., -, *, _ gibi karakterler ayni kalmaktadir , ornegin bosluk karakteri encode edilmektedir.

Representation-Oriented

Web service’e cesitli client/istemciler ulasacaktir ve istekte bulunacaktir. (request resources)
Kaynaklar/resources , ozellesmis URI araciligiyla Addressable ozellige sahip olmalidir.

Each service is addressable through a specific URI and representations 
are exchanged between the client and service. 

Representation’lar client-server arasinda exchange edilir.
Ornegin bir HTTP GET isteginde(request) bulundugumuzda ilgili kaynagin/resource mevcut durumununun/current state , representation’ini aliriz/receive.

Bir HTTP POST isteginde(request) bulundugumuzda , server’da yer alan kaynagin representation’ini degistirebiliriz.

Bu representation’lar ; XML(Extensible Markup Language ), JSON (JavaScript Object Notation) , YAML gibi formatlar olabilir.

The Uniform , Constrained Interface

Uniform , “tekdüze , tekbiçimli” gibi anlamlara gelmektedir.
Constrained Interface , kısıtlanmış bir giriş noktası/arabirim/uç olarak düşünebiliriz.

Yani bu su anlama gelmektedir , HTTP nin desteklemis oldugu metotlar kumesi sinirlidir
GET , POST , PUT , DELETE …

Boylece URI bilgisinde herhangi bir “action” parametresi gondermemiz ve bu parametreye gore akis kontrolu yapmamiza gerek yoktur.

This means that you don’t have an “action” parameter in your URI and use only 
the methods of HTTP for your web services. 

GET
GET , read-only bir operation’dir. Server/Sunucudan bir resource/kaynak isteginde bulundugumuzda kullanilmaktadir.
Idempotent ve safe bir metottur.

Idempotent kelimesinin turkce karsiligi ; “eşgüçlü” anlamina gelmektedir. (tureng.com)
Bu kavrami acacak olursak ;

Bir islem/istek/operation yaptigimizda , bu islemi/operasyonu kac defa uyguladigimizin bir onemi yok sonuc her zaman ayni olmaktadir.

Idempotent means that no matter how many times you apply the operation, 
the result is always the same

Mesela elimizde soyle bir metot olsun , bu metotu ne kadar cagirsak cagiralim sonuc hep ayni olacaktir yani 10 degeri donecektir.
Iste bu Idempotent kavramini ifade etmektedir.

public int getNumber() {
	return 10;
}
Idempotent means that no matter how many times you apply the operation, 
the result is always the same.

POST
POST , HTTP metotlari arasindaki non-idempotent ozellige sahiptir ve non-idempotent olan tek HTTP metodudur.

Non-idempotent kavramini daha iyi anlamak icin ;

getNumber metodu her cagrildiginda bir sonuc farkli olacak ve number’in degeri 1 artacaktir.
Yani burada islemi/operasyonu kac defa uyguladigimiz onemlidir her defasinda sonucu degistirecektir.
Dolayisiyla bu kavram non-idempotent kavramini ifade etmektedir.

private int number = 0;

public int getNumber(){
	return ++number;
}

POST , create resource islemi/operasyonu icin kullanilmaktadir.

PUT
PUT istegi genel olarak update/guncelleme islemi amaciyla kullanilmaktadir. Bununla birlikte create/olusturma islemi de yapilabilir.
PUT metodu , POST metodunun aksine idempotent bir ozellige sahiptir. Yani PUT metodunun bir den fazla cagrilmasi server’da herhangi bir etkiye neden olmaz.
Ornegin bir word dosyasinda calistigimizda bir kere ctrl+s ile kaydetme islemi yaptiktan sonra , degisiklik yapmadan tekrar tekrar ctrl+s ye bastigimizda bu bir anlam ifade etmez.

POST means “create new” as in “Here is the input for creating a user, create it for me”.

PUT means “insert, replace if already exists” as in “Here is the data for user 5”.

http://restcookbook.com/HTTP%20Methods/put-vs-post/

https://stackoverflow.com/questions/630453/put-vs-post-in-rest

DELETE
DELETE , remove resource islemi/operasyonu icin kullanilmaktadir.
Idempotent ozellige sahiptir.

HEAD
HEAD , GET metoduna benzemektedir.
Fark olarak response body donmez bunun yerine sadece response code ve header bilgileri donecektir.

OPTIONS
OPTIONS metodu/istegi , server tarafindan hangi HTTP metotlar destekleniyor bunun bilgisini donecektir.

Communicate Statelessly

Stateless , Server’da client’a ait bir session bilgisi tutulmaz.
Server sadece kaynaklari/resources tutar ve yonetir.

 I don’t mean that your applications can’t have state. 
 In REST, stateless means that there is no client session data stored on the server. 

Stateless/durumsuz , Session , stateful gibi kavramlari anlamak icin ;
Servlet & JSP – 14 – Session – 01

HATEOAS

HATEOAS , Hypermedia As The Engine Of Application State olarak ifade edilmektedir.
Bir RESTFul uygulama mimarisi kisitlamasidir (constraint)

HATEOAS (Hypermedia as the Engine of Application State) 
is a constraint of the REST application architecture.

HATEOAS kavrami ; RESTful web service’in extra olarak bilgi sunmasi ve boylece tek bir giris noktasindan sonra uygulamada yapabilecegimiz isleri kolayca gormemiz ve yapmamiza olana saglar.

The idea of HATEOAS is that your data format provides extra information 
on how to change the state of your application. 
Hypermedia is a document-centric approach with added support for 
embedding links to other services and information within that document format.

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6 Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *