10 dk okuma

Java'da Web Servis Geliştirme: JAX-RS ve JAX-WS

12 Ağustos 202314:19
Java Web Servis Geliştirme
Java Web Servis Geliştirme

Günümüzde, yazılım geliştirme projelerinde web servisler hayati bir rol oynamaktadır. Java platformu, bu alanda geliştiricilere iki güçlü araç sunar: JAX-RS ve JAX-WS. Bu yazıda, bu iki API'yi ayrıntılı olarak inceleyeceğiz, farklarını ve kullanım alanlarını ele alacağız.

Başlamadan önce: API nedir?

API (yani Application Programming Interface) farklı yazılımların birbirleriyle iletişim kurmasını sağlayan bir arayüzdür. Basitçe ifade etmek gerekirse, bir uygulamanın diğer bir uygulamadaki özellikleri kullanabilmesini sağlayan bir köprüdür.

Bir uygulama bir diğer uygulamadaki bir özelliği kullanmak istediğinde, API sayesinde bu özellik kullanılabilir hale gelir. Örneğin, bir mobil uygulama harita servisini kullanmak istediğinde, harita sağlayıcısının API’si aracılığıyla bu hizmete erişir. Böylece, API’ler, uygulama geliştiricilerinin kodlarını yeniden kullanmalarına ve kaynaklarını daha verimli bir şekilde yönetmelerine olanak tanır.

Benzer şekilde, bir web sitesi, bir başka web sitesindeki haberleri veya hava durumu bilgilerini göstermek istediğinde, ilgili sitenin API’si sayesinde bu verilere kolayca erişebilir.

Bu konuda daha detaylı bilgi edinmek için serinin bir önceki yazısı SOAP ve REST API: Nedir, Farklılıklar, Avantajlar ve Dezavantajlar yazıma göz atmanızı öneririm.


JAX-RS Nedir?

JAX-RS (Java API for RESTful Web Services), Java ile RESTful web servisler oluşturmak için kullanılan bir araçtır. REST (Representational State Transfer), web servislerin hafif, esnek ve ölçeklenebilir olmasını sağlayan bir mimari tarzdır. JAX-RS, bu tarzı Java uygulamalarına entegre etmeyi kolaylaştırır ve geliştiricilere RESTful web servisleri oluşturma ve kullanma imkanı sunar.

JAX-RS, Java sınıflarını HTTP protokolü üzerinden iletişim kurabilen web servislerine dönüştürür. Bir JAX-RS uygulaması, RESTful servislerin tanımlanması için genellikle Java sınıflarından oluşur. Bu sınıflar, belirli HTTP istekleri için işlemleri gerçekleştiren metotlar içerir. JAX-RS, bu metotları belirli HTTP metodlarına (GET, POST, PUT, DELETE vb.) eşler ve gelen isteklere göre ilgili işlemleri gerçekleştirir.

Örnek: E-Ticaret Platformu

Örneğin, bir e-ticaret uygulaması düşünelim. Müşterilerin ürünleri listelemek, sipariş vermek veya hesaplarını yönetmek için kullandığı bir API sağlamamız gerekiyor.

1. Ürünleri Listeleme:

Müşterilerin tüm ürünleri listelemek için bir ProductResource sınıfı oluşturabiliriz. Bu sınıf, HTTP GET isteklerini işleyen bir metot içerebilir. Müşteriler bu metodu çağırarak mevcut ürünleri alabilirler.

java
1import javax.ws.rs.*;
2import javax.ws.rs.core.MediaType;
3import java.util.List;
4
5// Ürünleri listelemek için kullanılacak olan RESTful servis
6@Path("/products")
7public class ProductResource {
8
9    // GET isteğini işleyen metot
10    @GET
11    @Produces(MediaType.APPLICATION_JSON)
12    public List<Product> getProducts() {
13        // Gerçekleştirilecek işlemler
14        return productService.getAllProducts(); // Ürünleri veritabanından al ve JSON formatında döndür
15    }
16}

2. Sipariş Verme:

Müşterilerin sipariş vermesi için bir OrderResource sınıfı oluşturabiliriz. Bu sınıf, HTTP POST isteklerini işleyen bir metot içerebilir. Müşteriler bu metodu kullanarak yeni bir sipariş verebilirler.

java
1import javax.ws.rs.*;
2import javax.ws.rs.core.MediaType;
3
4// Siparişleri işlemek için kullanılacak olan RESTful servis
5@Path("/orders")
6public class OrderResource {
7
8    // POST isteğini işleyen metot
9    @POST
10    @Consumes(MediaType.APPLICATION_JSON)
11    @Produces(MediaType.APPLICATION_JSON)
12    public Order placeOrder(Order newOrder) {
13        // Gerçekleştirilecek işlemler
14        return orderService.processOrder(newOrder); // Yeni siparişi işle ve onayla, ardından oluşturulan siparişi döndür
15    }
16}

Bu kod örnekleri, bir e-ticaret uygulaması için temel RESTful servisleri tanımlamaktadır. ProductResource sınıfı, müşterilerin tüm ürünleri almasını sağlayan bir servis sağlar. OrderResource sınıfı ise müşterilerin yeni sipariş oluşturmasını sağlayan bir servistir.

Her iki sınıf da, @Path anotasyonu ile isteğin hangi URL'ye yönlendirileceğini belirtirken, @GET ve @POST anotasyonları, sırasıyla HTTP GET ve POST isteklerini işler. @Produces ve @Consumes, bu metotların hangi medya türlerini üretebileceğini ve tüketebileceğini (Request-Response) belirtir.

Bu senaryoda JAX-RS, RESTful web servislerin geliştirmeyi oldukça kolaylaşır ve bu da uygulamaların daha modüler, esnek ve ölçeklenebilir olmasını sağlar. Ayrıca, JAX-RS spesifikasyonunun temel amacı, RESTful web servis geliştirmeyi geçmişte olduğundan daha kolay hale getirmektir. Java EE platformunun bir parçası olarak, kodunuz tüm Java EE uyumlu sunucular arasında taşınabilir hale gelir. Bu da, uygulamanızı farklı sunucular arasında rahatlıkla hareket ettirebilmeniz anlamına gelir ve geliştirme sürecinizi önemli ölçüde kolaylaştırır.

JAX-WS Nedir?

JAX-WS (Java API for XML Web Services), Java platformunda XML tabanlı web servislerinin geliştirilmesini sağlayan bir API'dir. Bu API, geliştiricilere web servislerini oluşturma, yayınlama ve tüketme süreçlerinde standart bir yol sunar. XML tabanlı web servisleri, uygulamalar arasında iletişim kurmak için kullanılan bir standarttır ve farklı platformlar arasında uyumluluğu artırır.

JAX-WS, özellikle SOAP (Simple Object Access Protocol) tabanlı web servislerinin geliştirilmesini kolaylaştırır. SOAP, XML tabanlı mesajları kullanarak farklı sistemler arasında iletişim kurmayı sağlayan bir protokoldür. Bu protokol, güvenilirlik, güvenlik ve mesaj yönlendirme gibi özellikler sağlar.

JAX-WS, Java EE (Enterprise Edition) platformunun bir parçasıdır ve bu nedenle Java EE uyumlu sunucularda kolayca kullanılabilir. Bu da, geliştiricilerin uygulamalarını farklı sunucular arasında taşımasını ve dağıtmasını kolaylaştırır.

JAX-WS, Java sınıflarını ve veri tiplerini SOAP mesajlarına ve XML belgelerine otomatik olarak dönüştürerek, web servisler arasında iletişimi sağlar. Bu da, istemcilerin uzak bir sunucudaki hizmetlere erişmesine ve hizmet sağlayıcılarınının istemcilere yanıt vermesine olanak tanır. JAX-WS, WSDL (Web Services Description Language) belgelerini kullanarak servis arayüzlerini tanımlar ve SOAP mesajları için uygun XML şemalarını oluşturur.

Örnek: E-Ticaret Platformu

Örneğin, bir e-ticaret uygulaması düşünelim. Müşterilerin ürünleri listelemek, sipariş vermek veya hesaplarını yönetmek için kullandığı bir web servis sağlamamız gerekiyor.

1. Ürünleri Listeleme

Müşterilerin tüm ürünleri listelemek için bir ProductCatalog servisi oluşturabiliriz. Bu servis, bir WSDL belgesi kullanarak tanımlanabilir ve müşteriler bu servisi kullanarak mevcut ürünleri alabilirler.

java
1import javax.jws.WebMethod;
2import javax.jws.WebService;
3import java.util.List;
4
5@WebService
6public interface ProductCatalog {
7    @WebMethod
8    List<Product> getAllProducts();
9}
java
1import javax.jws.WebService;
2import java.util.List;
3
4@WebService(endpointInterface = "ProductCatalog")
5public class ProductCatalogImpl implements ProductCatalog {
6
7    // Örnek veritabanı bağlantısı
8    private ProductDatabase productDatabase;
9
10    public ProductCatalogImpl() {
11        this.productDatabase = new ProductDatabase();
12    }
13
14    public List<Product> getAllProducts() {
15        // Ürünleri veritabanından çek ve döndür
16        return productDatabase.getAllProducts();
17    }
18}
java
1import javax.xml.bind.annotation.XmlRootElement;
2
3public class Product {
4    private int id;
5    private String name;
6    private double price;
7
8    // Getter ve Setter metotları
9}
java
1import java.util.ArrayList;
2import java.util.List;
3
4public class ProductDatabase {
5    public List<Product> getAllProducts() {
6        // Gerçekleştirilecek işlemler
7        // Örnek: Veritabanından tüm ürünleri al ve döndür
8        return new ArrayList<>(); // Örnek olarak boş bir liste döndürüldü
9    }
10}

2. Sipariş Verme

java
1import javax.jws.WebMethod;
2import javax.jws.WebService;
3
4@WebService
5public interface OrderService {
6    @WebMethod
7    Order placeOrder(Order newOrder);
8}
java
1import javax.jws.WebService;
2
3@WebService(endpointInterface = "OrderService")
4public class OrderServiceImpl implements OrderService {
5
6    // Örnek veritabanı bağlantısı
7    private OrderDatabase orderDatabase;
8
9    public OrderServiceImpl() {
10        this.orderDatabase = new OrderDatabase();
11    }
12
13    public Order placeOrder(Order newOrder) {
14        // Yeni siparişi işle ve onayla, ardından oluşturulan siparişi döndür
15        return orderDatabase.processOrder(newOrder);
16    }
17}
java
1import javax.xml.bind.annotation.XmlRootElement;
2
3public class Order {
4    private int orderId;
5    private int productId;
6    private int quantity;
7
8    // Getter ve Setter metotları
9}
java
1public class OrderDatabase {
2    public Order processOrder(Order newOrder) {
3        // Gerçekleştirilecek işlemler
4        // Örnek: Yeni siparişi işle ve onayla, ardından oluşturulan siparişi döndür
5        return new Order(); // Örnek olarak boş bir sipariş döndürüldü
6    }
7}

Bu örnekte, JAX-WS (Java API for XML Web Services) kullanılarak SOAP (Simple Object Access Protocol) tabanlı web servislerinin geliştirilmesi için gerekli olan sınıflar bulunmaktadır. Bu sınıflar, bir e-ticaret uygulamasında ürünleri listelemek ve sipariş vermek gibi temel işlemleri gerçekleştirmek için kullanılabilir.

ProductCatalog ve OrderService interfaceleri, web servislerinin işlevselliğini tanımlar. Bu interfaceler, servislerin dış dünyaya sunduğu yöntemleri belirtir. @WebService anotasyonu ile işaretlenen bu interfaceler, JAX-WS tarafından bir web servisi olarak algılanır. @WebMethod anotasyonu ise bir metodun web servisi tarafından kullanılabilir olduğunu belirtir.

ProductCatalogImpl ve OrderServiceImpl sınıfları, interfaceleri uygular ve gerçek iş mantığını içerir. Bu sınıflar, web servislerinin işlevselliğini gerçekleştiren metodları içerir. @WebService(endpointInterface = "InterfaceAdi") anotasyonu, bir sınıfın belirli bir interface'i uyguladığını belirtir. Bu sayede JAX-WS, ilgili arabirime sahip sınıfları web servisi olarak tanır. Product ve Order sınıfları ise ilgili veri yapılarını temsil eder.

Product ve Order sınıfları, ilgili veri yapılarını temsil eder. Bu sınıflar genellikle XML olarak serileştirilebilir hale getirilir ve web servisleri arasında veri taşımak için kullanılır. @XmlRootElement anotasyonu, bir sınıfın XML olarak serileştirilebileceğini belirtir. Bu sayede JAX-WS, ilgili sınıfları XML formatında taşıyabilir.

Java EE nedir?

Yazımın bu anına kadar birkaç kez Java EE'ye değindim, şimdi gelin bakalım neymiş bu Java Enterprise Edition.

Java Enterprise Edition (Java EE), büyük ve karmaşık iş uygulamaları geliştirmek için kullanılan bir platformdur. Java EE, işletmelerin ihtiyaç duyduğu çeşitli özellikleri ve işlevleri sağlayarak, geliştiricilere büyük ölçekli projelerde yardımcı olur.

Java EE, işletmelerin büyük ve karmaşık projelerini geliştirmesine yardımcı olur çünkü:

Kolaylıkla ölçeklenebilir: Java EE, büyük yük altında bile stabil bir şekilde çalışabilir ve daha fazla kullanıcıya veya daha fazla veriye hizmet edebilir.

Güvenilir ve dayanıklıdır: Java EE, iş uygulamalarının güvenilirliğini ve dayanıklılığını sağlamak için bir dizi önlem içerir.

Zengin bir API setine sahiptir: Java EE, birçok farklı ihtiyaca yönelik olarak geliştirilmiş API'ler sağlar. Veritabanı erişimi, web servisleri, güvenlik, mesajlaşma ve daha fazlasını içerir.

Java EE'nin içerdiği başlıca bileşenler şunlardır:

Servlets ve JSP: Web uygulamalarının geliştirilmesinde kullanılan temel teknolojilerdir.

EJB (Enterprise JavaBeans): Dağıtık iş mantığını geliştirmek için kullanılır.

JPA (Java Persistence API): Veritabanı işlemlerini kolaylaştıran bir API'dir.

JMS (Java Message Service): Farklı uygulamalar arasında mesaj alışverişi sağlar.

Ve tabii JAX-WS ve JAX-RS: Web servislerinin geliştirilmesi için kullanılan API'lerdir, bu yazının da ana konusu.


Sonuç

Sonuç olarak, yazılım geliştirme projelerinde web servislerinin hayati bir rol oynadığını göz önünde bulundurmalıyız. Java platformu, bu alanda geliştiricilere JAX-RS ve JAX-WS gibi güçlü araçlar sunmaktadır. JAX-RS ve JAX-WS farklı amaçlar için kullanılır ve belirli kullanım senaryolarında avantaj sağlarlar. JAX-RS, RESTful web servislerinin oluşturulması için ideal bir çözümdür, zira hafif, esnek ve ölçeklenebilir REST mimarisini Java uygulamalarına entegre etmeyi kolaylaştırır. Öte yandan, JAX-WS SOAP tabanlı web servislerinin geliştirilmesini sağlar ve bu da güvenilir, güvenli ve platformlar arası iletişim için etkili bir yol sunar.

Bu yazımı beğendiyseniz diğer yazılarıma da göz atmanızı öneririm. Bir başka yazıda görüşmek üzere, hoşça kalın. 🚀


Referanslar

Burke, B. (2009). RESTful Java with JAX-RS.

The Java API for RESTful Web Services (JAX-RS) - Rapidly Build Lightweight Web Services, Oracle →Creating a Simple Web Service and Client with JAX-WS, Oracle →Creating a RESTful Root Resource Class, Oracle →

Bu yazıyı paylaş

Link kopyalandı!
Mustafa Kürşad Başer

Mustafa Kürşad Başer

Yazılım Mühendisi — Dijital Zanaatkâr

Karmaşık sorunlara zarif çözümler üretmekten keyif alan, tutkulu bir yazılım mühendisi. Kodlamanın ötesinde, teknoloji, sanat ve insan bilincinin kesişim noktalarını keşfetmekle derinden ilgileniyor.

© 2025 Mustafa Kürşad BAŞER. Tüm hakları saklıdır.

Çerez Tercihleri

Size daha iyi bir deneyim sunabilmek için çerezleri kullanıyoruz. Analitik ve reklam amaçlı çerezler hakkında detaylı bilgi için ayarları özelleştirebilirsiniz.