Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • Spring Core
  • Spring Örnekleri
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Spring Boot

Spring Boot Dersleri : HATEOAS Nedir? HATEOAS Uygulama Örneği Kullanımı

Paylaş

Spring Boot Dersleri‘ne devam ediyoruz.

İçindekiler

  • Nedir?
  • Örnek Uygulama

Nedir?

Spring Boot projelerimizde kullandığımız Rest işlemlerinde kullanımı ve dökümante edilmesini sağlayan Hypermedia As The Engine Of Application State‘un kısaltması olan HATEOAS‘ı bu yazıda inceleyeceğiz.

Bir rest servisinin response üzerinden tüm içerik bilgilerini görebildiğimiz başka bir kaynağa ya da dökümana gerek kalmadan kullanabilmeye olanak sağlayan bir araçtır. Örnek verecek olursam bir kişinin kaydını getirmek için rest üzerinden gelen cevabın içerisinde o restin diğer yapabileceği tüm yeteneklerinde görülebileceği bir yapı sağlamaktadır. Projemizde başka Rest işlemleri eklediysek silme, güncelleme gibi işlemleri yapabilmek için hangi rest yolunun kullanılması gerektiği gibi bilgileri görüntüler.

Spring Boot içerisinde HATEOAS kullanmak için Maven bağımlılığını kullanarak ekleyebiliriz.

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>

Spring Boot Rest projesi için HATEOAS’ı kullanarak bir proje yapalım.

Örnek Uygulama

Bir öğrenci uygulaması yapalım. Öğrenci bilgilerini getiren ve silme işlemini gerçekleştiren bir Spring Boot Rest uygulaması yapacağız.

Maven bağımlılığı kullanarak projeyi geliştireceğiz. Gerekli olan bağımlılıklarımızın yer aldığı pom.xml dosyamız aşağıdaki gibi olacak.

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.1.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.hateoas</groupId>
    <artifactId>spring-hateoas</artifactId>
    <version>0.25.0.RELEASE</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.plugin</groupId>
    <artifactId>spring-plugin-core</artifactId>
    <version>1.2.0.RELEASE</version>
  </dependency>

Maven bağımlılığımız bu şekildedir.

Öğrenci classımızı oluşturalım.

@Entity
public class Student extends ResourceSupport {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long studentId;
    private String firstName;
    private String lastName;

    public Student() {
    }

    public Student(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public Long getStudentId() {
        return studentId;
    }

    public void setStudentId(Long studentId) {
        this.studentId = studentId;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) { this.firstName = firstName; }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

Student Controllerimizi oluşturalım. Controllerimiz RestControllerimiz yapısında olacak.

@RestController
public class StudentController {

    @Autowired
    StudentService studentService;

    @GetMapping(value = "/student/{id}", produces = {"application/hal+json"})
    public Resource<Student> getStudent(@PathVariable(value = "id", required = true) Long id) {
        Student student = studentService.getStudentById(id)
        student.add(linkTo(methodOn(StudentController.class).getStudent(id)).withSelfRel().withType("GET"));
        return new Resource<Student>(student);
    }

    @GetMapping(value = "/student", produces = {"application/hal+json"})
    public Resources<Student> getStudents() {

        List<Student> students = studentService.getAllStudent();
        for (Student student : students) {
            Long studentId = student.getStudentId();
            student.add(linkTo(methodOn(StudentController.class).getStudent(studentId)).withRel("get_student").withType("GET"));
            student.add(linkTo(methodOn(StudentController.class).deleteStudent(studentId)).withRel("delete_student").withType("DELETE"));
        }

        Link link = linkTo(methodOn(StudentController.class).getStudents()).withSelfRel().withType("GET");
        return new Resources<Student>(students, link);
    }

    @DeleteMapping(value = "/student/{id}", produces = {"application/hal+json"})
    public Resource<Student> deleteStudent(@PathVariable(value = "id", required = true) Long id) {

        Optional<Student> student = studentService.getStudentById(id);

        studentService.deleteStudentById(id);
        Student student = new Student();
        student.add(linkTo(methodOn(StudentController.class).getStudents()).withRel("get_students").withType("GET"));
        return new Resource<Student>(student);
    }
}

RestControllerimiz’e HATEOAS yeteneklerini controllerimizde kullanarak ekliyoruz.

student.add(linkTo(methodOn(StudentController.class).getStudent(studentId)).withRel("get_student").withType("GET"));
student.add(linkTo(methodOn(StudentController.class).deleteStudent(studentId)).withRel("delete_student").withType("DELETE"));

Yukarıdaki satırlar Rest servisimizinden HATEOAS özelliğini kullanarak Rest servisimizin özelliklerini tanımlayarak istek yapacak kişiye bu bilgilerin gönderilmesini sağlamaktayız. Bu satırları açıklayayım.

methodOn: Gelen isteğin kullanılacağı class ve hangi metodun hangi parametre alarak işlem yapacağını belirtir.

with_rel: Metod ile ilgili referans tanımlaması yapılır.

withType: Hangi Rest tipinde olduğunun tanımı yapılmaktadır.İstek yapan kişiye bilgi vermek için kullanılır.

Sonuç olarak cevap olarak dönen rest servisinde şu şekilde bilgiler gözükür.

"studentList": [
            {
                "studentId": 1,
                "firstName": "Burak",
                "lastName": "KUTBAY",
                "_links": {
                    "get_student": {
                        "href": "http://localhost:8080/student/1",
                        "type": "GET"
                    },
                    "delete_student": {
                        "href": "http://localhost:8080/student/1",
                        "type": "DELETE"
                    }
                }
            },
        ]
    },
    "_links": {
        "self": {
            "href": "http://localhost:8080/students",
            "type": "GET"
        }
    }
}

Bilgileri istek yapana gözükerek dökümantasyonu oluşmaktadır.
 

Önceki Ders: Context Path Değiştirmek Spring Boot Dersleri Sonraki Ders:

 

Tags:

spring boot derslerispring derslerispring HATEOASspring HATEOAS uygulama örneğispring rest HATEOAS

Paylaş

Diğer Yazılar

Spring Dersleri
Previous

Spring Boot Dersleri : Context Path Değiştirmek

javb
Next

Java 8 Date , Time API Kullanım Uygulama Örneği

Next
javb
11 Aralık 2018

Java 8 Date , Time API Kullanım Uygulama Örneği

Previews
09 Ekim 2018

Spring Boot Dersleri : Context Path Değiştirmek

Spring Dersleri

2 Comments

  1. hkm dedi ki:
    10 Şubat 2019, 14:53

    Merhabalar hocam . bende Spring öğrenmek istiyorum. yalnız şu an sadece JavaSE bilgim mevcut JavaEE ne geçerken direk Spring ile mi başlamak lazım yoksa jsp ile mi ? . nasıl bir yol çiz meliyim ?

    Cevapla
    1. Ali Bey dedi ki:
      16 Mayıs 2020, 14:05

      jsp ile başlamana gerek yok.
      Spring Boot ile başlayabilirsin. Öğrenmesi, kullanması(configuration) oldukça basit.

      Cevapla

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Spring Data Redis Cache Kullanım Örneği

Spring Boot Data Redis Nedir? Distributed Cache Kullanımı

Spring Boot Dersleri

Spring Boot Projelerinde Tomcat Yerine Jetty Kullanmak

Spring Boot Dersleri Rest Template

Spring Boot RestTemplate Nedir ve Kullanımı

Spring Boot Dersleri

Spring Boot Transaction, Isolation, Propagation ve RollBack

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Amazon Web Services
Vue.js
Gradle
Node.js
Android
Struts
Röportaj
Spring Data
Redis
Spring Cloud Stream
XCode
Debezium
Mikroservis Mimarisi
Video
Spring Native
iPhone Uygulama Geliştirme
Objective C
JPA
Spring Security
PostgreSQL
Apache Kafka
Git
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
RabbitMQ
PrimeFaces
JDBC
Spring Jdbc Template
Spring
Spring MVC
Manset
Google
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
Microsoft
Tanıyalım
Veritabanı
Java SE
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • Spring Core
  • Spring Örnekleri
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale