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);
}
}
{
"_links" : {
"users" : {
"href" : "http://localhost:8080/users{?page,size,sort}",
"templated" : true
},
"profile" : {
"href" : "http://localhost:8080/profile"
}
}
}
$ 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.