[英]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.