RESTful Web Servisleri ve MVC ile Farkı
Herkese merhaba! Bu yazımda, RESTful Web Servislerini ve MVC modeli ile farkı hakkında konuşacağız.
RESTful Web Servisleri
RESTful Web Servisleri, çeşitli platformlar ve programlama dilleri arasında veri alışverişi sağlamak için kullanılır ve HTTP protokolünü kullanarak verileri sunar. Spring Boot, REST API’lerinin geliştirilmesini kolaylaştıran bir dizi araç ve kütüphane sağlar.
Temel Kavramlar ve Bileşenler
- Model: RESTful mimarisinde her şey bir “kaynak” olarak düşünülür. Bir kaynak, veriye veya işlevselliğe erişim sağlayan herhangi bir nesne olabilir. Örneğin, bir kullanıcı, fotoğraf, sayfa veya hizmet bir kaynak olabilir. Her kaynak genellikle bir URI (Uniform Resource Identifier) ile tanımlanır, böylece ağ üzerinden kolayca adreslenebilir ve erişilebilir.
- Service: Servis katmanı, modelle controller arasında bir köprü görevi görür ve uygulamanın iş mantığını yürütür. Bu katman, veritabanı işlemleri, iş kuralları uygulama, hesaplamalar gibi daha karmaşık işlemleri gerçekleştirir. Controller’dan gelen çağrıları alır, gerekli işlemleri yapar ve sonuçları geri döndürür.
- Controller (RestController): Spring’de, RESTful servisler genellikle
@RestController
annotation'ı ile işaretlenmiş sınıflar aracılığıyla yaratılır. Bu sınıflar, HTTP isteklerini alır ve JSON, XML gibi formatlarda yanıt verir.@RequestMapping
veya türevleri olan@GetMapping
,@PostMapping
,@PutMapping
, ve@DeleteMapping
gibi annotation'lar, istek yollarını ve HTTP metodlarını tanımlar. Aşağıda bir controller örneği yer almaktadır.
package com.example.controller;
import com.example.model.Book;
import com.example.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/books")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping
public List<Book> getAllBooks() {
return bookService.findAllBooks();
}
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
return bookService.findBookById(id)
.map(ResponseEntity::ok)
.orElseGet(() -> ResponseEntity.notFound().build());
}
@PostMapping
public Book createBook(@RequestBody Book book) {
return bookService.saveBook(book);
}
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book bookDetails) {
return bookService.findBookById(id)
.map(book -> {
book.setTitle(bookDetails.getTitle());
book.setAuthor(bookDetails.getAuthor());
Book updatedBook = bookService.saveBook(book);
return ResponseEntity.ok(updatedBook);
})
.orElseGet(() -> ResponseEntity.notFound().build());
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
return bookService.findBookById(id)
.map(book -> {
bookService.deleteBook(book.getId());
return ResponseEntity.ok().<Void>build();
})
.orElseGet(() -> ResponseEntity.notFound().build());
}
}
ResponseEntity
sınıfı, Spring Framework'te HTTP yanıtlarını oluştururken kullanılan bir yapıdır. Bu sınıf, bir HTTP yanıtının içeriğini, durum kodunu ve başlıklarını içeren bir nesne döndürür.
Request Mapping, HTTP isteklerini yönlendirmek için @RequestMapping
veya türevleri olan @GetMapping
, @PostMapping
, @PutMapping
, ve @DeleteMapping
gibi annotation'lar kullanılır. Bu annotation'lar, istek yollarını ve HTTP metodlarını tanımlar.
RESTful Web Servislerinin Özellikleri
1.Stateless (Durumsuzluk) : Her bir istek, işlenmesi için gerekli olan tüm bilgileri içermelidir. Bir istekten diğerine bilgi “taşınmaz”; her istek, kimlik doğrulama bilgileri dahil olmak üzere gereken her şeyi bağımsız olarak taşır. Bu yaklaşım, sunucu tarafındaki karmaşıklığı azaltır ve uygulamaların ölçeklenmesini kolaylaştırır.
2. Cacheable (Önbelleğe Alınabilirlik): RESTful servislerden gelen yanıtlar önbelleğe alınabilir. Bu, özellikle tekrar eden veriler için veri erişim süresini azaltır ve ağ trafiğini düşürerek performansı artırır.
3. Uniform Interface (Standartlaştırılmış Arayüz): REST servisleri, standart operasyonlar kullanarak kaynaklarla etkileşime girer. Bu dört temel HTTP metodunu içerir:
- GET: Bir kaynağı almak için kullanılır.
- POST: Yeni bir kaynak oluşturmak için kullanılır.
- PUT: Var olan bir kaynağı güncellemek için kullanılır.
- DELETE: Bir kaynağı silmek için kullanılır.
Bu metodlar, RESTful servislerin farklı platformlar ve diller arasında kolayca entegre edilmesini sağlar.
4. Resource-Based (Kaynak Tabanlı): Kaynaklar , URI’ler ile tanımlanır ve HTTP metodları ile manipüle edilir. Örneğin, bir kullanıcıyı temsil eden bir kaynak https://example.com/users/123
adresinde bulunabilir.
RESTful Web Servisleri ve MVC (Model-View-Controller)
RESTful web servisleri ve MVC (Model-View-Controller) mimarisi arasında hem benzerlikler hem de önemli farklar bulunmaktadır. İkisi de yazılım geliştirme süreçlerinde kullanılan yapısal desenlerdir, ancak farklı amaçlara hizmet ederler.
Benzerlikler
- Katmanlı Yapı: Hem RESTful servisler hem de MVC mimarisi, uygulamayı mantıklı katmanlara ayırma prensibine dayanır. MVC’de model, view ve controller; RESTful mimarisinde ise genellikle model, controller ve service katmanları kullanılır.
- Ayrımlılık ve Modülerlik: Her iki mimari de, uygulamanın farklı bileşenlerini birbirinden bağımsız olarak geliştirebilmek için ayrımlılığa ve modüler yapıya büyük önem verir.
Farklar
Temel Amaç ve Kullanım Alanları:
- MVC: Genellikle kullanıcı arayüzleri ile etkileşimli web uygulamaları geliştirmek için kullanılır. MVC, kullanıcı girdilerini alır, bunları işler ve sonuçları bir arayüz aracılığıyla kullanıcıya sunar.
- RESTful Servisler: Genellikle sistemler arası iletişim ve veri alışverişi için kullanılır. REST, uygulamalar arası veri transferi için standart bir yöntem sağlar ve genellikle JSON veya XML gibi formatlar kullanılarak gerçekleştirilir.
View Katmanı:
- MVC: View, kullanıcıya gösterilen sonuçları formatlamak için vardır. Bu mimaride, veriler kullanıcıya HTML formunda sunulabilir.
- RESTful Servisler: Tipik olarak bir “view” katmanı yoktur. Servisler, istemcilere ham veri (JSON, XML) sağlar. İstemci bu verileri alır ve kullanıcıya uygun bir formatda sunmak üzere işler.
Kullanıcı Etkileşimi:
- MVC: Doğrudan son kullanıcı ile etkileşimde bulunur.
- RESTful Servisler: Genellikle API üzerinden diğer uygulamalarla etkileşimde bulunur, doğrudan kullanıcı etkileşimi yoktur.
Durum Yönetimi:
- MVC: Kullanıcı oturumları gibi durum bilgilerini yönetebilir. Örneğin, bir kullanıcının alışveriş sepeti bilgileri oturum boyunca saklanabilir, böylece kullanıcı site içinde gezinirken sepete ürün ekleyip çıkarabilir.
- RESTful Servisler: Tamamen durumsuzdur; yani her HTTP isteği önceki veya sonraki isteklerden bağımsız tüm gerekli bilgileri içermelidir. Kimlik doğrulama bilgileri, kullanıcı kimliği gibi bilgiler her istekle birlikte gönderilir, bu da sunucunun her isteği bağımsız olarak işlemesini sağlar. Bu yapı, sunucu kaynaklarını daha verimli kullanmayı ve ölçeklenebilirliği artırmayı mümkün kılar.
Sonuç olarak, MVC ve RESTful mimarileri, bazı yapısal benzerlikler paylaşsalar da, farklı ihtiyaç ve senaryolara yönelik olarak tasarlanmışlardır. RESTful servisler daha çok veri odaklı ve servisler arası iletişim için uygundur, oysa MVC, kullanıcı odaklı ve etkileşimli web uygulamaları için idealdir. Bu nedenle, projenin gereksinimlerine bağlı olarak hangi mimarinin daha uygun olduğuna karar vermek önemlidir.
Okuduğunuz için teşekkür ederim 😊 Happy coding!!!