0

我想我正在尝试对我正在处理的 REST API 做出一些设计选择。

- 提供跨站点访问是个好主意吗?换句话说,我是否应该允许JSONP响应。我倾向于提供 JSOP 响应,因为我猜测如果我不允许 JSONP,那么在浏览器中运行的 javascript 客户端将无法访问我的 API。如果您有任何支持或反对这个想法的经验,我将不胜感激。

- 使用 Jersey,我可以通过使用 a 注释我的方法@Produces("application/javascript")并返回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);
    }

上面的示例有效,但我不知道如何返回 a javax.ws.rs.core.Response(当我实例化 a 时,Jersey 抛出异常JSONWithPadding(response, callback)

所以我猜如果我需要向客户端返回元信息,我需要设计自己的响应类版本吗?

4

1 回答 1

0

JSONP 有很多细节。看看JSONP 到底是什么?了解更多信息。在这一点上,如果您想从其他域提供对您的 API 的 JavaScript 访问,那么这是可行的方法。如果它对您的应用程序有意义,则取决于您。

至于第二个问题,我一直这样做是为了向客户提供 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 回答