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

Type and hit Enter to search

  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / 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

Toggle
  • 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 ?

    Yanıtla
    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.

      Yanıtla

Bir yanıt yazın Yanıtı iptal et

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Chaos Monkey Spring Boot Uygulama Ornegi

Chaos Monkey Nedir? #1 Uygulamanızın Sınırlarını Test Edin

TestContainers Nedir Spring Boot MongoDB Uygulama Örneği

TestContainers ile Spring Boot & MongoDB Test İşlemleri

Spring Boot Dersleri @ConditionalOnExpression Uygulama Ornegi

Spring Boot @ConditionalOnExpression Nedir? Uygulama Örneği

Spring Boot Dersleri Content Negotiation Uygulama Örneği

Spring Boot Content Negotiation XML – JSON Uygulama Örneği

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

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

Link

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

Kategori

Cloud
Node.js
Java 24
Android
Struts
Röportaj
Gradle
Amazon Web Services
Vue.js
Video
Redis
Spring Boot 3.0
Debezium
Mikroservis Mimarisi
Spring Native
Spring Cloud Stream
Etkinlikler
XCode
JPA
Objective C
iPhone Uygulama Geliştirme
PostgreSQL
Spring Security
MongoDB
Java 21
Spring Data
Apache Kafka
Yaptığım Projeler
Servlet
Git
Maven
Design Patterns
DevOps
Linux
Spring Jdbc Template
RabbitMQ
JDBC
PrimeFaces
Manset
Google
Spring
Spring MVC
Spring Cloud
OCA Java SE 8
Quarkus
Spring Core
Microsoft
Veritabanı
Java SE
Tanıyalım
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
  • Etkinliklerim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • JSP
  • Java 21
  • Java 8
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale