簡體   English   中英

Jersey RESTful Services:資源和響應

[英]Jersey RESTful Services: Resources & Responses

我看到很多基於澤西島的Web服務由1個以上的WebResources組成,這些WebResources有1個以上的端點/方法,如下所示:

package com.myws.fizz;
public class FizzResource {
    @GET
    @Path("/fizz/{id}")
    public Response getFizzById(@PathParam("id") Long id) {
        // ...etc.
    }

    @GET
    @Path("/fizz")
    public Fizz getFizzByFoo(Foo foo) {
        // ...etc.
    }
}

package com.myws.buzz;
public class BuzzResource {
    @POST
    @Path("/buzz")
    public Response createBuzz(Buzz buzz) {
        // ...etc.
    }
}
  • 我對澤西島認為的“資源”感到困惑。 “資源”和數據庫之間是否存在關系? 一張桌子? 一個POJO?
  • 你什么時候Response對POJO的Response 看看我上面的2個getFizz方法。 我何時返回Fizz ,何時返回Response

術語“資源”並不僅僅是澤西島術語,因為它是一個REST術語。 在處理REST時,我們有資源表示 資源可以是任何東西,在這種情況下,它是位於服務器上的某個對象,具有URL位置。 當客戶端請求資源時,我們會發回它的表示。 你問:

“資源”和數據庫之間是否存在關系? 一張桌子? 一個POJO?

可能是一個數據庫(這是一件事)。 我們可以簡單地將其表示為具有數據庫名稱的JSON對象。 也可能是一張桌子(這是一件事)。 我們可以將它表示為具有名稱和列名稱的JSON對象。 可以是表中的一行,我們可以使用JSON對象來表示該行,其中列名稱作為鍵,行值作為JSON值。 它可以是一個網頁,一個圖像,等等。 所以希望你明白資源可以是任何東西 我們發回的是它的代表。

但術語資源不僅限於將某些內容返回給客戶端請求。 客戶端還可以我們發送資源的表示,例如創建新資源(POST)或更改現有資源(PUT)。 客戶端可以在我們的數據庫中向我們發送行(資源)的JSON表示。

你什么時候Response對POJO的Response 看看我上面的2個getFizz方法。 我何時返回Fizz ,何時返回Response

返回Response允許您微調Response 當客戶提出請求時,他們總是會收到回復。 響應具有標頭和實體主體。 當資源方法的返回類型是Fizz ,您說實體主體類型將是Fizz類型。 當方法返回時,實際發生的事情是Fizz對象不會直接返回給請求客戶端,而是全部。 在幕后,它被包含在一個Response ,並被發送回客戶端。 框架將設置合適的標頭。

因此,無論我們決定返回Response還是Fizz ,它都會被包含在Response 就像我說的,當我們返回一個Response ,它允許我們微調Response ,添加我們自己的頭文件,狀態代碼等。 例如,假設有人POST 你可以做點什么

@POST
@Path("/buzz")
@Produces(...)
public Response createBuzz(Buzz buzz, @Context UriInfo uriInfo) {
    int buzzID = // create buzz and get the resource id
    UriBuilder builder = uriInfo.getAbsolutePathBuilder();
    builder.path(Integer.toString(buzzId));  // concatenate the id.
    return Response.created(builder.build()).build();
}

基本上它的作用是創建資源,比如在數據庫中,我們得到一個返回id。 我們可以使用id連接到id的URI,這將是新的資源位置。 Response.created(...)表示狀態代碼應為201 Created ,並且我們傳遞給created方法的值是新創建的資源的位置。 此位置將設置為響應中的Location標頭。 因此,我們可以說POST請求的路徑是http://blah.com/buzz 我們將發回是http://blah.com/buzz/100 ,其中100buzzId ,而這個完整的URL是我們將如何訪問這些資源的嗡嗡聲說用GET requesst與注釋資源法說@GET @PATH("/buzz/{id}")

GET ,通過Response ,我們可以做到

Fizz newFizz = fizzService.getFizz();
return Response.ok(newFizz).build();  // sends the Fizz as the entity body

這與從方法中返回newFizz實際上並沒有多大區別,因為我們沒有對Response執行任何特殊操作。 我們只是說狀態代碼應該是200 OK並附加實體主體。 這是成功的GET請求通常會發生的情況。 因此,如果我們只是在成功獲取GET的情況下返回Fizz而不是Response ,則框架將隱式附加200 OK狀態。

就個人而言,由於微調因素,我更願意返回Responses

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM