2013-06-13 53 views
5

Cách thức thành ngữ để cung cấp API JSON RESTful trong Java là gì? Bạn có sử dụng chú thích JAX-WS và XML (@XmlElement, v.v.) không? Làm thế nào để bạn serialize các đối tượng chú thích để JSON (sử dụng Jackson hoặc thư viện tương tự)? Làm thế nào để bạn tách các đối tượng miền khỏi các đối tượng được gửi ra API?Cung cấp API JSON RESTful trong Java

Tôi biết Java, tôi muốn bạn chỉ cho tôi các tài nguyên tốt và các phương pháp hay nhất về các chủ đề này.

Cảm ơn bạn!

+0

JAX-WS là về SOAP, JAX- * RS * là về REST. –

+1

Có thể "[jersey] (https://jersey.java.net/)" là một từ khóa tốt để bắt đầu với bạn. – Fildor

+0

@Tichodroma Cảm ơn bạn, có rất nhiều từ viết tắt trong thế giới Java :) –

Trả lời

3

Tôi đã sử dụng vui vẻ Jersey/JAX-RS nhưng tôi sẽ đề nghị bạn Spring MVC 3, không chỉ đối với phần còn lại api hỗ trợ mà còn cho những thứ thú vị khác như IoC hoặc đậu có thể trở nên hữu ích.

Dưới đây là một liên kết nơi để tham khảo: http://blog.springsource.org/2009/03/08/rest-in-spring-3-mvc/

Btw, tôi đã sử dụng Jackson với mùa xuân như phân tích cú pháp. :)


Một chút mã (về cơ bản đánh dấu đậu của bạn, như bạn nói, với @XmlRootElement và sử dụng để đánh dấu @Path API)

JAX-RS

đậu:

@XmlRootElement 
public class Response { 

    private String result; 
    private String message; 

    //getter and setter 
} 

api:

@Path("rest/user") 
@Produces(MediaType.APPLICATION_JSON) 
public class UserService { 

    @POST 
    @Path("/login") 
    public Response login(
     @FormParam("username") String username, 
     @FormParam("password") String password 
) { 
     // Your logic here 
    } 
} 

Xuân

api:

@Controller 
@RequestMapping("/user") 
public class UserService { 

    @RequestMapping(method = RequestMethod.POST, value="/login", headers="Accept=application/json") 
    public @ResponseBody Response login(
     @RequestParam(value = "user", defaultValue = "") String email, 
     @RequestParam(value = "password", defaultValue = "") String password, 
     HttpServletRequest request 
     ) { 
    // Your logic here 
    } 
} 
+0

Cảm ơn bạn! Điều khác là làm thế nào để bạn tách các đối tượng miền khỏi các đối tượng tiếp xúc với API? Bạn phiên bản API như thế nào? –

+1

Thông thường tôi sẽ đặt đối tượng miền trong gói "mô hình"; nếu bạn có đối tượng cụ thể cho api của bạn đặt chúng dưới cùng một gói của API. Đối với phiên bản, cách thực hành tốt nhất là bắt đầu luôn với tên phiên bản, như/api/v1/{myApi}. :) – Enrichman

2

Tôi chỉ cần sử dụng Play để tiết kiệm cho tôi rất nhiều công việc đã được thực hiện. Liên kết dành cho Play 1.2 và trong khi phiên bản hiện tại là 2.1, nó cũng phải phù hợp với điều đó.

2
+0

Tôi quan tâm đến phía máy chủ của điều. Không có nhiều khách hàng phụ. –

+0

@JakubKulhan Xem liên kết thứ 3. Bạn có một máy chủ REST làm việc đầy đủ ví dụ Jersey với Tomcat là máy chủ và Android ở phía máy khách. – Bevor

+0

Ah, cảm ơn bạn! Một thứ khác là ghép nối các đối tượng mô hình và các đối tượng được hiển thị trong API.Hiện tại dự án tôi đã được đưa ra các cặp vợ chồng rất chặt chẽ những gì được tiếp xúc trong API cho các đối tượng nội bộ của nó. Breaking của API là gần như chắc chắn khi một cái gì đó thay đổi. Làm thế nào để tách chúng ra? Hai phân cấp đối tượng riêng biệt? Hiện tại nó sẽ chỉ viết lại mọi thứ một lần nữa. Nhưng trong tương lai hệ thống phân cấp này có thể thay đổi. –

Các vấn đề liên quan