2013-06-13 4 views
5

JavaでRESTful JSON APIを提供する慣習的な方法は何ですか? JAX-WSとXMLアノテーション(@XmlElementなど)を使用していますか?注釈付きオブジェクトをJSONにシリアル化するにはどうしたらいいですか?ドメインオブジェクトとAPIに送信されるオブジェクトをどのように分離しますか?JavaでRESTful JSON APIを提供

私はJavaを知っています。これらのトピックについての良いリソースとベストプラクティスを教えてください。

ありがとうございました!

+0

JAX-WSはSOAPについてです、JAX-RS * *は、RESTについてです。 –

+1

「[jersey](https://jersey.java.net/)」は、あなたのために始めてよいキーワードです。 – Fildor

+0

@Tichodromaありがとう、Javaの世界には多くの略語があります:) –

答えて

3

を私は喜んジャージー/ JAX-RSを使用しているが、私はSpring MVCの3、残りのためだけでなく、あなたをお勧めしますapiのサポートだけでなく、IoCやBeanのような興味深いものが役に立つかもしれません。ここで

参照するためのリンク:http://blog.springsource.org/2009/03/08/rest-in-spring-3-mvc/

はところで、私はパーサとして春とジャクソンを使用しました。 :)


コードのビット(基本的にあなたが言ったように@XmlRootElementで、あなたの豆をマークし、APIをマークするために@Pathを使用)

JAX-RS

豆:

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

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

ありがとう!もう一つは、ドメインオブジェクトをAPIに公開されているオブジェクトからどのように分離するかです。どのようにAPIをバージョンアップしますか? –

+1

私は通常、ドメインオブジェクトを "モデル"パッケージに入れます。 APIの特定のオブジェクトをAPIの同じパッケージの下に置きます。バージョン管理では、/ api/v1/{myApi}のように常にバージョン名で起動するのがベストプラクティスです。 :) – Enrichman

2

私はすでにPlayを使用して、すでに完了している多くの作業を節約します。 リンクはPlay 1.2用で、現在のバージョンは2.1ですが、それにも適合しているはずです。

2

Android、JBoss、Tomcatを使用していても、ジャージーとジャクソンの経験があります。参照:

http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/

または

An Android REST Client and Tomcat REST Webservice

+0

私は物事のサーバー側に興味があります。あまりクライアント側ではありません。 –

+0

@JakubKulhan 3番目のリンクを参照してください。サーバーとしてTomcatを使用し、クライアント側にAndroidを備えた完全なRESTサーバーJerseyの例があります。 – Bevor

+0

ああ、ありがとう!もう一つは、モデルオブジェクトとAPIで公開されたオブジェクトの結合です。現在、私はプロジェクト内のオブジェクトにAPIで公開されているものを非常に緊密に結合していました。 APIの破棄は、何かが変化したときにほぼ確実です。それらを切り離す方法は? 2つの別個のオブジェクト階層?現在は、すべてをもう一度書き直すだけです。しかし、将来、この階層は変わるかもしれません。 –

関連する問題