Java ile bir web uygulaması veya bir mikro hizmet oluşturmak istediniz mi, ancak dahil olan karmaşıklık ve yapılandırmadan bunaldınız mı? Eğer öyleyse, yalnız değilsiniz. Birçok geliştirici, sunucuyu ayarlamak, bağımlılıkları yönetmek, veritabanını yönetmek ve daha fazlası gibi web geliştirmenin zorluklarıyla mücadele ediyor.
İşte bu yüzden Spring Boot bir oyun değiştirici. Spring Boot, Java ile web geliştirmeyi basitleştiren bir çerçevedir. Otomatik yapılandırma, gömülü sunucular, başlangıç bağımlılıkları ve daha fazlası gibi özellikler sağlar. Spring Boot ile, kalıp kodlarla uğraşmak yerine iş mantığınızı yazmaya odaklanabilirsiniz.
Ancak bir web uygulaması veya mikro hizmet oluşturmak yeterli değil. Ayrıca test etmeniz de gerekiyor. Yazılımınızın kalitesini ve güvenilirliğini sağlamak için test etmek çok önemlidir. Hataları bulmanıza ve düzeltmenize, performansı iyileştirmenize ve hataları önlemenize yardımcı olur.
İşte bu noktada Apidog devreye giriyor.
Bu blog yazısında, Apidog ile bir Spring Boot API'si oluşturmayı ve test etmeyi öğreneceksiniz. Spring Boot ile basit bir RESTful API oluşturacak ve Apidog ile test edeceksiniz.
Spring Boot nedir ve neden kullanılmalı?
Spring Boot, Spring uygulamalarının geliştirilmesini basitleştiren bir çerçevedir. Spring uygulamalarını oluşturmayı, yapılandırmayı, çalıştırmayı ve dağıtmayı kolaylaştıran birçok özellik ve kural sağlar. Spring Boot kullanmanın bazı faydaları şunlardır:
- Projeniz için gerekli kitaplıkları ve sürümleri otomatik olarak ekleyen bir başlangıç bağımlılık yönetimi sistemine sahiptir.
- Uygulamanızı herhangi bir ek yapılandırma veya kurulum olmadan çalıştırmanıza olanak tanıyan bir gömülü web sunucusuna sahiptir.
- Bağımlılıklara ve ortama göre uygulamanız için en uygun ayarları algılayan ve uygulayan bir otomatik yapılandırma mekanizmasına sahiptir.
- Sağlık kontrolleri, ölçümler, günlük kaydı ve güvenlik gibi özellikleri içeren üretim için hazır bir desteğe sahiptir.
Spring Boot ile, iş mantığınızı yazmaya odaklanabilir ve çerçevenin geri kalanını halletmesine izin verebilirsiniz.

Apidog nedir ve API'nizi test etmenize nasıl yardımcı olabilir?
Apidog , API'lerinizi basit ve sezgisel bir şekilde test etmenize yardımcı olan bir araçtır. API'nize bağlanmanıza, uç noktaları keşfetmenize ve API'niz için test senaryoları oluşturmanıza ve çalıştırmanıza olanak tanır. APIdog'un bazı özellikleri şunlardır:
- API'nizle etkileşimi kolaylaştıran ve sonuçları görmenizi sağlayan bir grafik kullanıcı arayüzüne sahiptir.
- Test senaryolarınızı JavaScript ve Chai assertions kullanarak yazmanıza ve düzenlemenize olanak tanıyan bir kod düzenleyicisine sahiptir.
- Test senaryolarınızı yürüten ve her testin durumunu, çıktısını ve hatalarını gösteren bir test çalıştırıcısına sahiptir.
- Test sonuçlarınızın kapsamlı ve özelleştirilebilir bir raporunu oluşturan bir rapor oluşturucuya sahiptir.
Apidog ile, API'nizi hızlı ve güvenilir bir şekilde test edebilir ve kalitesini ve işlevselliğini sağlayabilirsiniz.

Projenin Kurulumu
İlk adım, Spring Initializr ile bir Spring Boot projesi oluşturmaktır. Spring Initializr, tercihlerinize göre sizin için temel bir proje yapısı ve yapılandırması oluşturan bir web aracıdır. Spring Initializr'ı kullanmak için şu adımları izleyin:
https://start.spring.io/ adresine gidin ve projenizin ayrıntılarını doldurun. Bu örnek için, aşağıdaki ayarları kullanacağım:
- Proje: Maven Projesi
- Dil: Java
- Spring Boot: 3.2.3
- Proje Meta Verileri:
- Grup: com.example
- Yapıt: apidog-demo
- Ad: apidog-demo
- Açıklama: Spring Boot için demo projesi
- Paket adı: com.example.apidog-demo
- Paketleme: Jar
- Java: 17
- Bağımlılıklar: Spring Web, Spring Data JPA, H2 Veritabanı

GENERATE düğmesine tıklayın ve projenizin zip dosyasını indirin.
Zip dosyasını çıkarın ve projeyi favori IDE'nizde açın.
Spring Web ve Spring Data JPA için bağımlılıkları ekleme
Sonraki adım, Spring Web ve Spring Data JPA için bağımlılıkları eklemektir. Spring Web, Spring ile RESTful API'ler oluşturmak için temel web desteğini sağlayan bir modüldür. Spring Data JPA, JPA ve Hibernate kullanarak ilişkisel veritabanlarındaki verilere erişimi ve veriler üzerinde işlem yapmayı basitleştiren bir modüldür.
Bu bağımlılıkları eklemek için, yukarıda belirtildiği gibi Spring Initializr'ı kullanabilir veya projenizin pom.xml dosyasını manuel olarak düzenleyebilir ve aşağıdaki bağımlılıkları ekleyebilirsiniz:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Uygulama özelliklerini yapılandırma
Sonraki adım, uygulama özelliklerini yapılandırmaktır. application.properties dosyası, uygulamanızın davranışını ve ayarlarını tanımlayan anahtar-değer çiftlerini içeren bir dosyadır. Bu örnek için, aşağıdaki özellikleri kullanacağız:
# Veritabanına erişmek için H2 konsolunu etkinleştirin
spring.h2.console.enabled=true
# H2 konsolunun yolunu ayarlayın
spring.h2.console.path=/h2-console
# Veritabanının URL'sini ayarlayın
spring.datasource.url=jdbc:h2:mem:testdb
# Veritabanının kullanıcı adını ayarlayın
spring.datasource.username=sa
# Veritabanının parolasını ayarlayın
spring.datasource.password=
# Veritabanının lehçesini ayarlayın
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
# SQL ifadelerini konsolda gösterin
spring.jpa.show-sql=true
# Varlık sınıflarından veritabanı şemasını oluşturun
spring.jpa.hibernate.ddl-auto=update
# API'yi belgelemek için Swagger UI'yi etkinleştirin
springdoc.swagger-ui.enabled=true
# Swagger UI'nin yolunu ayarlayın
springdoc.swagger-ui.path=/swagger-ui.html
API'yi Oluşturma
Sonraki adım, API'yi oluşturmaktır. API, Kitap adlı basit bir varlık için bir alan modeli, bir depo ve bir denetleyiciden oluşacaktır. Bir Kitap'ın şu özellikleri olacaktır: id, başlık, yazar ve fiyat.
Basit bir varlık için alan modelini ve bir depoyu oluşturma
Alan modeli, varlığın verilerini ve davranışını temsil eden bir sınıftır. Depo, JpaRepository arabirimini genişleten ve varlığın verilerine erişmek ve veriler üzerinde işlem yapmak için yöntemler sağlayan bir arabirimdir.
Kitap varlığı için alan modelini ve depoyu oluşturmak için şu adımları izleyin:
- com.example.apidogdemo.model adlı yeni bir paket oluşturun ve içinde Book.java adlı yeni bir sınıf oluşturun.
- Sınıfı, bir JPA varlığı olarak işaretlemek için @Entity ile ve veritabanındaki tablonun adını belirtmek için @Table ile açıklayın.
- Sınıfın özelliklerini tanımlayın ve sırasıyla birincil anahtarı, oluşturma stratejisini, sütun adını ve doğrulama kısıtlamasını belirtmek için @Id, @GeneratedValue, @Column ve @NotNull ile açıklayın.
- Sınıf için getter'ları ve setter'ları, oluşturucuyu ve toString yöntemini oluşturun.
Book.java sınıfı şöyle görünmelidir:
package com.example.apidogdemo.model;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
@Entity
@Table(name = "books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "title")
@NotNull
private String title;
@Column(name = "author")
@NotNull
private String author;
@Column(name = "price")
@NotNull
private BigDecimal price;
public Book() {
}
public Book(Long id, String title, String author, BigDecimal price) {
this.id = id;
this.title = title;
this.author = author;
this.price = price;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", title='" + title + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}
- com.example.apidogdemo.repository adlı yeni bir paket oluşturun ve içinde BookRepository.java adlı yeni bir arabirim oluşturun.
- Arabirimi, bir Spring Data JPA deposu olarak işaretlemek için @Repository ile açıklayın.
- JpaRepository arabirimini genişletin ve genel parametreler olarak varlık türünü ve birincil anahtar türünü belirtin.
- İsteğe bağlı olarak, varlığın verilerini sorgulamak için özel yöntemler tanımlayabilirsiniz.
BookRepository.java arabirimi şöyle görünmelidir:
package com.example.apidogdemo.repository;
import com.example.apidogdemo.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
// You can define custom methods here
}
Bir denetleyici oluşturma ve CRUD işlemleri için uç noktaları tanımlama
Denetleyici, API'nin isteklerini ve yanıtlarını işleyen bir sınıftır. Denetleyici, varlık için CRUD işlemlerinin (oluşturma, okuma, güncelleme ve silme) uç noktalarını tanımlar.
Kitap varlığı için denetleyiciyi oluşturmak ve uç noktaları tanımlamak için şu adımları izleyin:
- com.example.apidogdemo.controller adlı yeni bir paket oluşturun ve içinde BookController.java adlı yeni bir sınıf oluşturun.
- Sınıfı, JSON yanıtları döndüren bir Spring MVC denetleyicisi olarak işaretlemek için @RestController ile açıklayın.
- Uç noktaların temel yolunu belirtmek için @RequestMapping ile sınıfı açıklayın.
- @Autowired açıklaması kullanarak BookRepository örneğini ekleyin.
- @GetMapping, @PostMapping, @PutMapping ve @DeleteMapping açıklamalarını kullanarak CRUD işlemleri için uç noktaları tanımlayın ve her uç noktanın yolunu ve parametrelerini belirtin.
- Her uç nokta için yanıt verilerini ve durum kodunu sarmak için ResponseEntity sınıfını kullanın.
- Oluşturma ve güncelleme uç noktaları için istek gövdesini doğrulamak için @Valid açıklamasını kullanın.
- İstisnaları işlemek ve uygun durum kodunu ve mesajı döndürmek için @ExceptionHandler ve @ResponseStatus açıklamalarını kullanın.
BookController.java sınıfı şöyle görünmelidir:
package com.example.apidogdemo.controller;
import com.example.apidogdemo.model.Book;
import com.example.apidogdemo.repository.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
@RestController
@RequestMapping("/api/books")
public class BookController {
@Autowired
private BookRepository bookRepository;
// Get all books
@GetMapping
public ResponseEntity<List<Book>> getAllBooks() {
List<Book> books = bookRepository.findAll();
return new ResponseEntity<>(books, HttpStatus.OK);
}
// Get a book by id
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
Optional<Book> book = bookRepository.findById(id);
if (book.isPresent()) {
return new ResponseEntity<>(book.get(), HttpStatus.OK);
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Book not found");
}
}
// Create a book
@PostMapping
public ResponseEntity<Book> createBook(@Valid @RequestBody Book book) {
Book savedBook = bookRepository.save(book);
return new ResponseEntity<>(savedBook, HttpStatus.CREATED);
}
// Update a book by id
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @Valid @RequestBody Book book) {
Optional<Book> existingBook = bookRepository.findById(id);
if (existingBook.isPresent()) {
book.setId(id);
Book updatedBook = bookRepository.save(book);
return new ResponseEntity<>(updatedBook, HttpStatus.OK);
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Book not found");
}
}
// Delete a book by id
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
Optional<Book> existingBook = bookRepository.findById(id);
if (existingBook.isPresent()) {
bookRepository.deleteById(id);
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} else {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "Book not found");
}
}
// Handle the validation exceptions
@ExceptionHandler(javax.validation.ConstraintViolationException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public String handleValidationExceptions(javax.validation.ConstraintViolationException ex) {
return ex.getMessage();
}
}
Spring Boot API'sini Apidog ile test etme
Son adım, API'yi Apidog ile test etmektir. Apidog, API'lerinizi basit ve sezgisel bir şekilde test etmenize yardımcı olan bir araçtır. API'nize bağlanmanıza, uç noktaları keşfetmenize ve API'niz için test senaryoları oluşturmanıza ve çalıştırmanıza olanak tanır.
API'yi Apidog ile test etmek için şu adımları izleyin:
- Apidog'u başlatın ve Yeni Proje düğmesine tıklayarak yeni bir proje oluşturun.

- Projenizin adını ve açıklamasını girin ve Oluştur düğmesine tıklayın.

- API'nizin temel URL'sini girin ve Bağlan düğmesine tıklayın.

- API'nizin uç noktalarının listesini sol panelde görebilirsiniz. Ayrıntıları ve örnekleri sağ panelde görmek için her bir uç noktaya tıklayabilirsiniz.

- Sağ paneldeki Test Senaryoları sekmesine tıklayarak API'niz için test senaryoları oluşturabilir ve çalıştırabilirsiniz. Test senaryolarınızı JavaScript ve Chai assertions kullanarak yazmak ve düzenlemek için kod düzenleyiciyi kullanabilirsiniz.


Test senaryolarınızı yürütmek ve her testin durumunu, çıktısını ve hatalarını görmek için test çalıştırıcısını kullanabilirsiniz. Test sonuçlarınızın kapsamlı ve özelleştirilebilir bir raporunu oluşturmak için rapor oluşturucuyu kullanabilirsiniz.
Sonuç
Bu blog yazısında, Apidog ile bir Spring Boot API'si oluşturmayı ve test etmeyi öğrendiniz. Spring Boot ile basit bir RESTful API oluşturdunuz ve Apidog ile test ettiniz.
Spring Boot, Java ile web geliştirmeyi basitleştiren bir çerçevedir. Otomatik yapılandırma, gömülü sunucular, başlangıç bağımlılıkları ve daha fazlası gibi özellikler sağlar. Spring Boot ile, kalıp kodlarla uğraşmak yerine iş mantığınızı yazmaya odaklanabilirsiniz.
Apidog, API'lerinizi test etmenize ve hatalarını ayıklamanıza yardımcı olan bir araçtır. API'nize bağlanmanıza ve uç noktaları keşfetmenize, test senaryoları oluşturmanıza ve çalıştırmanıza ve raporlar oluşturmanıza olanak tanır. Apidog ile, herhangi bir kod yazmadan API'nizi daha hızlı ve kolay bir şekilde test edebilirsiniz.