繁体   English   中英

REST-Jersey-提供跨站点访问

[英]REST - Jersey -Providing Cross Site Access

我想我正在尝试就我正在使用的REST API做出一些设计选择。

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

-使用Jersey,我可以通过使用@Produces("application/javascript")注释我的方法并返回JSONWithPadding的实例来提供JSONP响应。 像这样:

    @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 (实例化JSONWithPadding(response, callback)时,Jersey引发异常。

因此,我猜测如果需要将元信息返回给客户端,则需要设计自己的响应类版本吗?

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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM