mùa xuân 3,0 REST của:
Spring sử dụng chú thích dựa bộ điều khiển, có thể được sử dụng để ràng buộc một url tới một phương pháp trong điều khiển. Chú thích được sử dụng để phân biệt giữa phương thức GET và phương thức POST.
@RequestMapping(value="/hotels/{hotel}/bookings/{booking}",
method=RequestMethod.GET)
public String getBooking(@PathVariable("hotel") long hotelId,
@PathVariable("booking") long bookingId, Model model) {
Hotel hotel = hotelService.getHotel(hotelId);
Booking booking = hotel.getBooking(bookingId);
model.addAttribute("booking", booking);
return "booking";
}
Dưới mui xe, biến "khách sạn" trong chuỗi URI được chuyển đổi thành danh sách tham số, cũng như đặt trước. Spring REST cũng có thể sắp xếp các đối tượng JSON vào các lớp tùy chỉnh bằng cách sử dụng kỹ thuật tương tự này. Lưu ý rằng phương thức này được chú thích là RequestMethod.GET
, có nghĩa là nó được gọi cho các yêu cầu GET nhưng không được yêu cầu POST.
Spring 3.0 REST giúp dễ dàng tạo các dịch vụ Web RESTful bằng cách loại bỏ sự cần thiết phải phát minh lại bánh xe hoặc văn bản JSON nguyên soái/không thay đổi bằng tay từ các đối tượng Java.
Có bản trình diễn tại đây trên Blog SpringSource có tiêu đề REST In Spring MVC. Đường cong học tập thấp, nhưng việc làm demo có thể mất một chút thời gian nhờ vào sự phụ thuộc. Sau khi bạn thiết lập và có bản trình diễn làm việc, phần khó nhất sẽ kết thúc.
Để tích hợp IDE, hãy xem Spring Roo. Tôi đã không sử dụng nó, nhưng tôi đã nghe nó có một số tính năng tích hợp với Eclipse IDE để làm cho cuộc sống của bạn dễ dàng hơn.
Restlets:
Restlets được thiết kế dành riêng cho REST. Kết quả là, chi phí thấp hơn rất nhiều so với Spring 3.0. Restlets phù hợp hơn cho các trường hợp bạn không có GUI và nơi bạn không quan tâm đến MVC. Restlets có thể dễ dàng phục vụ như một máy chủ và máy khách. Nó cũng có một máy chủ nhúng mà bạn có thể chạy, giúp loại bỏ sự cần thiết của một container như Jetty hoặc Tomcat.
Tôi đã tiếp xúc rất ít với Python, nhưng từ những gì tôi đã thấy về việc triển khai khung công tác webApp của Google App Engine, khái niệm Router cảm thấy rất giống nhau. Những người có nền Python có thể tìm thấy đường cong học tập thấp hơn rất nhiều:
@Override
public Restlet createInboundRoot() {
Router router = new Router(getContext());
getConnectorService().getClientProtocols().add(Protocol.FILE);
// Serve the files generated by the GWT compilation step.
Directory dir = new Directory(getContext(), LocalReference.createFileReference(new File("war/")));
router.attachDefault(dir);
router.attach("/contacts/123", ContactServerResource.class);
return router;
}
Nó sử dụng GWT ở phía máy khách; Tôi thích lấy phần đó ra vì nó nhắc tôi quá nhiều về Java Swing. Trong khi một số người có thể thấy rằng lợi thế, sở thích cá nhân của tôi là gắn bó với các công nghệ cảm thấy giống Web hơn.
Dưới đây là ví dụ đơn giản về máy chủ REST sử dụng chế độ độc lập. Máy chủ chạy trên cổng 8182 và nó lắng nghe các yêu cầu GET. Nó có một mô hình dựa trên chú thích tương tự như khung công tác Spring REST, cũng giúp chia nhỏ các phương thức HTTP khác nhau và chỉ ra chúng theo các phương thức khác nhau trong các lớp của bạn. Đây là một "Hello World" REST của rất cơ bản Ví dụ:
public class FirstServerResource extends ServerResource {
public static void main(String[] args) throws Exception {
// Create the HTTP server and listen on port 8182
new Server(Protocol.HTTP, 8182, FirstServerResource.class).start();
}
@Get
public String toString() {
return "hello, world";
}
}
Kiểm tra các Restlet Web Site để biết thêm thông tin và ví dụ về khuôn khổ Restlets. Restlets có đường cong học tập hơi ít so với Spring vì nó được nhắm đến REST; kết quả là, nó không chứa tất cả các chức năng bổ sung đi kèm với Spring mà đôi khi có thể làm cho việc tìm kiếm câu trả lời cho một vấn đề khó khăn. Restlets chắc chắn là con đường để đi nếu bạn đang tìm kiếm thứ gì đó nhẹ.
Cả hai khung này sẽ chạy trong Tomcat, Jetty, cũng như trên Google App Engine.
áo trông rất thú vị, sẽ xem xét! cảm ơn ;-) –
Chú thích của Jersey thực sự phong phú, ít nhất so với Spring MVC 3.x.Bạn có thể áp dụng câu lệnh '@ PathParam' cho thuộc tính trong lớp' Resource' của bạn (về cơ bản tương ứng với lớp 'Controller' của Spring MVC) thay vì truyền nó qua tham số phương thức .. rất hữu ích đặc biệt nếu tất cả các API trong lớp' Resource' yêu cầu biến đường dẫn cụ thể đó. Trong Spring MVC 3.x, bạn phải đặt '@ PathVariable' là mọi phương thức trong lớp' Controller' để đạt được hiệu ứng tương tự ... hoặc ít nhất, tôi không biết làm thế nào để làm nó một cách tao nhã trong Spring MVC 3 .x. – limc