Arşivler

Spring Boot RestTemplate Nedir ve Kullanımı

Spring Boot Dersleri Rest Template
Spring Boot Dersleri Rest Template

Spring Boot Dersleri‘ne devam ediyorum.

Bu yazıda RestTemplate’nin ne olduğuna ve hangi amaçlarda kullanacağımızı anlatacağım.

RestTemplate Nedir?


Spring projelerimizde HTTP isteklerini yapıp yönetebileceğimiz Spring Boot Web kütüphanesinin içerisinde yer alan bir yapıdır. Bu sayede bir client olarak bir servisten veri çekebiliriz.

Özellikleri


  • getForObject
  • getForEntity
  • postForEntity
  • postForObject

Örnek


Projemiz için elimizde Ricky and Morty dizisinin Rest API’si bulunmakta.

https://rickandmortyapi.com/api/characterCode language: JavaScript (javascript)

Yukarıkadaki API’dan dizideki karakterlerin verilerini çeken bir uygulama yapalım.

Maven bağımlılığımız aşağıdaki gibi olacaktır.

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <version>1.18.22</version>
</dependency>
Code language: HTML, XML (xml)

Sadece Spring’in web kütüphanesi yeterli ve lombok kullanıyorum.

Spring Boot uygulamamızın her yerinde RestTemplate’imizi ve Http Header’i kullanabilmemiz için bir adet instance oluşturmalıyız. Bunu da uygulamamızın çalıştırdığımız application sınıfımızın içerisinde yapalım.

@Bean
public RestTemplate restTemplate() {
  return new RestTemplate();
}

@Bean
public HttpHeaders httpHeaders() {
  return new HttpHeaders();
}Code language: PHP (php)

Entitymizi hazırlayalım. Client Apimi’ze bakarsak Karakterler için bir INFO bilgisi ve devamında RESULT dizini bulunuyor. Bunlar için ayrı ayrı entitylerimizi hazırlayalım.

@Data
public class Info {
    private Integer count;
    private Integer pages;
    private String next;
    private String prev;
}Code language: PHP (php)

Info sınıfımız tamam. Result enttiymizi yapalım.

@Data
public class Result {
    private Integer id;
    private String name;
    private String status;
    private String species;
    private String type;
    private String gender;
    private String image;
    private String url;
    private Date created;
}Code language: PHP (php)

Entitymiz hazır. Ve son olarak Character sınıfımız oluşturuyoruz.

@Data
public class Character {
    Info info;
    List<Result> results;
}
Code language: PHP (php)

API’mizden bize gerekli olan değerler bunlar. Controller’imizi oluşturalım.

@RestController
public class ApiController {

    @Autowired
    private ApiService apiService;

    @GetMapping("/")
    public ResponseEntity<Character> getCharacters() {
        Character characters = apiService.getAllCharacter();
        return new ResponseEntity<>(characters, HttpStatus.OK);
    }
}Code language: PHP (php)

Kullanıcının istek oluşturduktan sonra karşılık gelen servisi oluşturalım. Bu servisimizde API’mize bağlanacağız ve gelen datayı parse edip, bir listeye alacağız.

@Service
public class ApiService {

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private HttpHeaders httpHeaders;

    private static final String CHAHRACTER_API = "https://rickandmortyapi.com/api/character";

    public Character getAllCharacter() {

        httpHeaders.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));

        HttpEntity<String> entity = new HttpEntity<>(httpHeaders);

        ResponseEntity<Character> response = restTemplate.exchange(CHAHRACTER_API, HttpMethod.GET,
                entity, Character.class);

        return response.getBody();
    }
}Code language: JavaScript (javascript)

Servisimiz yazdık. Burada dikkat etmemiz gereken satır

restTemplate.exchange(CHAHRACTER_API, HttpMethod.GET,entity,Character.class);Code language: CSS (css)

Burada exchange metodunu kullanarak API adresimizi, header bilgimizi ve mapper etmemiz için gerekli olan tipimizi yani gelen verinin aslında Character sınıfında olacağınız belirtiyoruz.

Bu cevabının body’sinde bizim sınıfımıza göre maplenmiş veriler bulunmakta.

Postman’dan istek atalım ve sonucumuza bakalım.

blank
Spring Boot RestTemplate Örneği

Sonraki Spring Boot Derslerslerinde görüşmek üzere.


Projenin Kaynak Kodlarına Ulaş


Önceki Ders: Spring Boot Projelerinde Jackson Kullanımı
Spring Boot Dersleri
Sonraki Ders: