2013-06-13 13 views
5

Welchen idiomatischen Weg bietet die Bereitstellung der REST-fähigen JSON-API in Java? Verwenden Sie JAX-WS- und XML-Annotationen (@ XmlElement usw.)? Wie serialisieren Sie annotierte Objekte zu JSON (mit Jackson oder einer ähnlichen Bibliothek)? Wie trennen Sie Domänenobjekte von Objekten, die an die API gesendet werden?REST-konforme JSON-API in Java bereitstellen

Ich kenne Java, ich möchte, dass Sie mich auf gute Ressourcen und Best Practices zu diesen Themen hinweisen.

Vielen Dank!

+0

JAX-WS ist über SOAP, JAX- * RS * ist über REST. –

+1

Vielleicht "[Trikot] (https://jersey.java.net/)" ist ein gutes Keyword für den Anfang mit Ihnen. – Fildor

+0

@Tichodroma Danke, es gibt so viele Akronyme in Java Welt :) –

Antwort

3

Ich habe glücklich Jersey/JAX-RS verwendet, aber ich würde Sie Spring MVC 3, nicht nur für den Rest vorschlagen api-Unterstützung, aber auch für andere interessante Dinge wie IoC oder Bohnen, die sich als nützlich erweisen könnten.

Hier ist ein Link, wo verweisen: http://blog.springsource.org/2009/03/08/rest-in-spring-3-mvc/

Btw, ich habe Jackson mit Frühling als Parser verwendet. :)


Ein Stück Code (im Grunde markieren Sie Ihre Bohne, wie Sie gesagt haben, mit @XmlRootElement und verwenden @Path die API zu markieren)

JAX-RS

Bohne:

@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 
    } 
} 

Frühling

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

Danke! Die andere Sache ist, wie Sie Domänenobjekte von Objekten trennen, die API ausgesetzt sind? Wie würden Sie Version API? –

+1

Normalerweise würde ich das Domain-Objekt in ein "Model" -Paket legen; Wenn Sie ein bestimmtes Objekt für Ihre API haben, platzieren Sie sie unter dem gleichen Paket der API. Für die Versionierung wäre es am besten, immer mit dem Versionsnamen zu beginnen, wie/api/v1/{myApi}. :) – Enrichman

2

Ich würde einfach Play verwenden, um mir eine Menge Arbeit zu sparen, die bereits getan wurde. Der Link ist für Play 1.2 und während die aktuelle Version 2.1 ist, sollte es auch dafür geeignet sein.

2
+0

Ich bin in Server-Seite der Sache interessiert. Nicht viel Client-Seite. –

+0

@JakubKulhan Siehe den 3. Link. Sie haben dort ein voll funktionsfähiges REST-Server-Jersey-Beispiel mit Tomcat als Server und Android auf Client-Seite. – Bevor

+0

Ah, danke! Die andere Sache ist die Kopplung von Modellobjekten und Objekten, die in der API verfügbar sind.Momentan wurde das Projekt sehr eng an Paare übergeben, die in der API ihren internen Objekten ausgesetzt sind. Das Brechen der API ist fast sicher, wenn sich etwas ändert. Wie man sie entkoppelt? Zwei separate Objekthierarchien? Momentan würde es einfach alles neu schreiben. Aber in Zukunft könnten sich diese Hierarchien ändern. –

Verwandte Themen