7.2.1 Điều chỉnh đường dẫn tài nguyên và tên quan hệ
Thực ra, Spring Data REST cũng cung cấp cho bạn một endpoint để làm việc với tacos. Nhưng dù Spring Data REST có thông minh đến đâu, đôi khi nó lại tỏ ra hơi kém tuyệt vời trong cách nó hiển thị endpoint cho tacos.
Khi tạo các endpoint cho các repository của Spring Data, Spring Data REST cố gắng chuyển danh từ của lớp entity thành số nhiều. Với entity Ingredient, endpoint là /data-api/ingredients. Với entity TacoOrder, nó là /data-api/orders. Cho đến đây thì mọi thứ đều ổn.
Nhưng đôi khi, như với “taco”, nó bị vấp phải một từ và phiên bản số nhiều lại không chính xác. Hóa ra, Spring Data REST đã chuyển “taco” thành “tacoes”, vì vậy để gửi yêu cầu lấy tacos, bạn phải chấp nhận điều này và gửi request đến /data-api/tacoes, như sau:
$ curl localhost:8080/data-api/tacoes
{
"_embedded" : {
"tacoes" : [ {
"name" : "Carnivore",
"createdAt" : "2018-02-11T17:01:32.999+0000",
"_links" : {
"self" : {
"href" : "http://localhost:8080/data-api/tacoes/2"
},
"taco" : {
"href" : "http://localhost:8080/data-api/tacoes/2"
},
"ingredients" : {
"href" : "http://localhost:8080/data-api/tacoes/2/ingredients"
}
}
}]
},
"page" : {
"size" : 20,
"totalElements" : 3,
"totalPages" : 1,
"number" : 0
}
}Bạn có thể đang tự hỏi làm sao tôi biết rằng “taco” lại bị chuyển sai thành “tacoes”. Hóa ra, Spring Data REST cũng cung cấp một tài nguyên gốc (home resource) liệt kê các liên kết đến tất cả các endpoint được hiển thị. Chỉ cần gửi một yêu cầu GET đến đường dẫn gốc của API là bạn sẽ thấy như sau:
$ curl localhost:8080/api
{
"_links" : {
"orders" : {
"href" : "http://localhost:8080/data-api/orders"
},
"ingredients" : {
"href" : "http://localhost:8080/data-api/ingredients"
},
"tacoes" : {
"href" : "http://localhost:8080/data-api/tacoes{?page,size,sort}",
"templated" : true
},
"users" : {
"href" : "http://localhost:8080/data-api/users"
},
"profile" : {
"href" : "http://localhost:8080/data-api/profile"
}
}
}Như bạn có thể thấy, tài nguyên gốc hiển thị các liên kết cho tất cả entity của bạn. Mọi thứ có vẻ ổn, ngoại trừ liên kết đến tacoes, nơi mà cả tên quan hệ và URL đều bị plural hóa kỳ lạ từ “taco.”
Tin tốt là bạn không cần phải chấp nhận sự kỳ quặc nhỏ này của Spring Data REST. Bằng cách thêm annotation đơn giản sau vào lớp Taco, bạn có thể điều chỉnh cả tên quan hệ lẫn đường dẫn:
@Data
@Entity
@RestResource(rel="tacos", path="tacos")
public class Taco {
...
}Annotation @RestResource cho phép bạn đặt bất kỳ tên quan hệ và đường dẫn nào bạn muốn cho entity. Trong trường hợp này, bạn đang đặt cả hai thành "tacos". Giờ đây khi bạn yêu cầu tài nguyên gốc, bạn sẽ thấy liên kết đến tacos với cách plural hóa chính xác, như hình dưới:
"tacos" : {
"href" : "http://localhost:8080/data-api/tacos{?page,size,sort}",
"templated" : true
},Điều này cũng giúp điều chỉnh đường dẫn endpoint để bạn có thể gửi yêu cầu đến /data-api/tacos để làm việc với các tài nguyên taco.
Nói đến việc điều chỉnh, hãy cùng xem cách bạn có thể sắp xếp (sort) kết quả từ các endpoint của Spring Data REST.
