0

私が取り組んでいるRESTAPIに関して、いくつかの設計上の選択をしようとしていると思います。

-クロスサイトアクセスを提供することは良い考えですか?言い換えれば、JSONP応答を許可する必要があります。JSONPを許可しないと、ブラウザーで実行されているjavascriptクライアントがAPIにアクセスできなくなると推測しているため、JSOP応答を提供することに傾倒しています。このアイデアに賛成または反対の経験があれば、よろしくお願いします。

-Jerseyを使用すると、メソッドにaの注釈を付け、@Produces("application/javascript")のインスタンスを返すことでJSONP応答を提供できますJSONWithPadding。そのようです:

    @GET
    @Produces("application/javascript")
    @Path("{film_id}")
    public JSONWithPadding crossSitefilmWithID(
                @DefaultValue(NO_ID) @PathParam("film_id") final String filmId,
                @DefaultValue(CALLBACK) @QueryParam("callback") String callback) {
    ....
        return new JSONWithPadding(films.get(id), callback);
    }

上記の例は機能しますが、代わりにどのように返すかがわかりませんjavax.ws.rs.core.Response(Jerseyは、をインスタンス化すると例外をスローしますJSONWithPadding(response, callback)

したがって、メタ情報をクライアントに返す必要がある場合は、独自のバージョンの応答クラスを考案する必要があると思いますか?

4

1 に答える 1

0

JSONPには多くのインとアウトがあります。JSONPとは何ですか?をご覧ください。詳細については。この時点で、他のドメインからAPIへのJavaScriptアクセスを提供したい場合は、それが最適な方法です。それがあなたのアプリケーションにとって理にかなっているなら、あなた次第です。

2番目の質問に関しては、XML、JSON、およびJSONPをクライアントに提供するために常にこれを行っています。

@GET
@Path("/thing")
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON, CustomMediaTypes.APPLICATION_JSONP})
public Response doThing(@QueryParam("callback") @DefaultValue("fn") String callback) {      
  // Do the thing
  GenericEntity<MyThing> response = new GenericEntity<MyThing>(thing){};
  return Response.ok(new JSONWithPadding(response, callback)).build();
}
于 2013-03-07T02:25:19.457 に答える