Spring Data REST'e Giriş
Spring Data REST'e Giriş

1. Genel Bakış

Bu makale, Spring Data REST'in temellerini açıklayacak ve basit bir REST API oluşturmak için nasıl kullanılacağını gösterecektir.

Genel olarak, Spring Data REST, Spring Data projesinin üzerine inşa edilmiştir ve Spring Data depolarına bağlanan hiper medyaya dayalı REST web servislerinin oluşturulmasını kolaylaştırır - tümü HAL'ı sürüş hiper medya türü olarak kullanır.

Genellikle bu tür görevlerle ilişkili birçok manuel işi ortadan kaldırır ve web uygulamaları için temel CRUD işlevselliğini uygulamayı oldukça basit hale getirir.

2. Maven Bağımlılıkları

Basit uygulamamız için aşağıdaki Maven gerekli bağımlılıkları :

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId
    <artifactId>spring-boot-starter-data-rest</artifactId></dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>

Bu örnek için Spring Boot kullanmaya karar verdik, ancak klasik Spring de iyi çalışacak. Ekstra kurulumlardan kaçınmak için H2 gömülü veritabanını kullanmayı da seçtik, ancak örnek herhangi bir veritabanına uygulanabilir.


3. Uygulamanın Yazılması

Web sitemizin bir kullanıcısını temsil etmek için bir etki alanı nesnesi yazarak başlayacağız:

@Entity
public class WebsiteUser {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    private String name;
    private String email;

    // standard getters and setters
}

Her kullanıcının bir adı, e-postası ve otomatik olarak oluşturulmuş bir kimliği vardır. Şimdi basit bir depo yazabiliriz:

@RepositoryRestResource(collectionResourceRel = "users", path = "users")
public interface UserRepository extends PagingAndSortingRepository<WebsiteUser, Long> {
    List<WebsiteUser> findByName(@Param("name") String name);
}

Bu, WebsiteUser nesneleriyle çeşitli işlemleri gerçekleştirmenize izin veren bir arayüzdür. Ayrıca, belirli bir ada göre bir kullanıcı listesi sağlayacak özel bir sorgu tanımladık.

@RepositoryRestResource ek açıklaması isteğe bağlıdır ve REST uç noktasını özelleştirmek için kullanılır. Atlamaya karar verirsek, Spring "/ users" yerine "/ websiteUsers" da otomatik olarak bir uç nokta oluşturur.

Son olarak, uygulamayı başlatmak için standart bir Spring Boot ana sınıfı yazacağız:

@SpringBootApplication
public class SpringDataRestApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringDataRestApplication.class, args);
    }
}
Bu kadar! Artık tamamen işlevsel bir REST API'ye sahibiz. Eylem halindeyken bir göz atalım.


4. REST API'ye erişim
Uygulamayı çalıştırıp bir tarayıcıda http: // localhost: 8080 / adresine gidersek, aşağıdaki JSON'u alacağız:

{
  "_links" : {
    "users" : {
      "href" : "http://localhost:8080/users{?page,size,sort}",
      "templated" : true
    },
    "profile" : {
      "href" : "http://localhost:8080/profile"
    }
  }
}
Gördüğünüz gibi, kullanılabilir bir "/ users" uç noktası var ve zaten "? Page", "? Size" ve "? Sort" seçeneklerine sahip.

Ayrıca, uygulama meta verilerini sağlayan standart bir "/ profile" uç noktası vardır. Yanıtın REST mimari tarzının kısıtlamalarını takip edecek şekilde yapılandırıldığına dikkat etmek önemlidir. Özellikle, tek tip bir arayüz ve kendi kendini tanımlayan mesajlar sağlar. Bu, her mesajın, mesajın nasıl işleneceğini açıklamak için yeterli bilgi içerdiği anlamına gelir.

Henüz uygulamamızda hiç kullanıcı yok, bu nedenle http: // localhost: 8080 / users'a gitmek sadece boş bir kullanıcı listesi gösterecektir. Kullanıcı eklemek için curl kullanalım.


$ curl -i -X POST -H "Content-Type:application/json" -d '{  "name" : "Test", \ 
"email" : "[email protected]" }' http://localhost:8080/users
{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

Cevap başlıklarına da bir göz atalım:

HTTP/1.1 201 Created
Server: Apache-Coyote/1.1
Location: http://localhost:8080/users/1
Content-Type: application/hal+json;charset=UTF-8
Transfer-Encoding: chunked

Döndürülen içerik türünün "application / hal + json" olduğunu fark edeceksiniz. HAL, API'nizdeki kaynaklar arasında tutarlı ve kolay bir köprü bağlantısı sağlayan basit bir formattır. Başlık ayrıca, yeni oluşturulan kullanıcıya erişmek için kullanabileceğimiz adres olan Konum başlığını da otomatik olarak içerir.

Artık bu kullanıcıya http: // localhost: 8080 / users / 1 adresinden erişebiliriz.

{
  "name" : "test",
  "email" : "[email protected]",
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/1"
    },
    "websiteUser" : {
      "href" : "http://localhost:8080/users/1"
    }
  }
}

PUT, PATCH ve DELETE isteklerini yayınlamak için curl veya başka bir REST istemcisini de kullanabilirsiniz. Spring Data REST'in HATEOAS ilkelerini otomatik olarak izlediğini unutmamak da önemlidir. HATEOAS, REST mimari tarzının kısıtlamalarından biridir ve bu, API aracılığıyla yolunuzu bulmak için hiper metnin kullanılması gerektiği anlamına gelir.

Son olarak, daha önce yazdığımız özel sorguya erişmeye çalışalım ve "test" adındaki tüm kullanıcıları bulalım. Bu, http: // localhost: 8080 / users / search / findByName? Name = test adresine giderek yapılır.

{
  "_embedded" : {
    "users" : [ {
      "name" : "test",
      "email" : "[email protected]",
      "_links" : {
        "self" : {
          "href" : "http://localhost:8080/users/1"
        },
        "websiteUser" : {
          "href" : "http://localhost:8080/users/1"
        }
      }
    } ]
  },
  "_links" : {
    "self" : {
      "href" : "http://localhost:8080/users/search/findByName?name=test"
    }
  }
}


5. Sonuç

Bu eğitici, Spring Data REST ile basit bir REST API oluşturmanın temellerini gösterdi. Bu makalede kullanılan örnek, bağlantılı GitHub projesinde bulunabilir.

içinde Muhtelif
Helm ile Kubernetes'te bir Go Uygulaması Nasıl Deploy edilir?
Helm ile Kubernetes'te bir Go Uygulaması Dağıtın