簡體   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