倉庫資源

基礎

Spring Data REST 的核心功能是為 Spring Data 儲存庫匯出資源。因此,要檢視並可能自定義匯出方式的核心構件是儲存庫介面。考慮以下儲存庫介面

public interface OrderRepository extends CrudRepository<Order, Long> { }

對於此儲存庫,Spring Data REST 在 /orders 處公開了一個集合資源。路徑是根據所管理域類的未大寫、複數形式的簡單類名派生的。它還在 URI 模板 /orders/{id} 下為儲存庫管理的每個專案公開了一個專案資源。

預設情況下,與這些資源互動的 HTTP 方法對映到 CrudRepository 的相應方法。有關更多資訊,請參閱集合資源專案資源部分。

儲存庫方法公開

為某個儲存庫公開哪些 HTTP 資源主要由儲存庫的結構決定。換句話說,資源公開將遵循您在儲存庫上公開的方法。如果您擴充套件 CrudRepository,您通常會公開公開我們可以預設註冊的所有 HTTP 資源所需的所有方法。下面列出的每個資源都將定義需要存在哪些方法,以便為每個資源公開特定的 HTTP 方法。這意味著,不公開這些方法的儲存庫(透過根本不宣告它們或顯式使用 @RestResource(exported = false))將不會在這些資源上公開這些 HTTP 方法。

有關如何單獨調整預設方法公開或專用 HTTP 方法的詳細資訊,請參閱自定義支援的 HTTP 方法

預設狀態碼

對於公開的資源,我們使用一組預設狀態碼

  • 200 OK:用於純 GET 請求。

  • 201 Created:用於建立新資源的 POSTPUT 請求。

  • 204 No Content:對於 PUTPATCHDELETE 請求,當配置設定為不對資源更新返回響應體時 (RepositoryRestConfiguration.setReturnBodyOnUpdate(…))。如果配置值設定為包含 PUT 的響應,則更新返回 200 OK,透過 PUT 建立的資源返回 201 Created

如果配置值 (RepositoryRestConfiguration.returnBodyOnUpdate(…)RepositoryRestConfiguration.returnBodyCreate(…)) 被顯式設定為 null(這是它們的預設值),則使用 HTTP Accept 頭的存在來確定響應程式碼。有關此內容的更多資訊,請參閱集合專案資源的詳細描述。

資源可發現性

HATEOAS 的核心原則是資源應該透過釋出指向可用資源的連結來發現。在 JSON 中表示連結有幾個相互競爭的事實標準。預設情況下,Spring Data REST 使用 HAL 來渲染響應。HAL 定義連結包含在返回文件的屬性中。

資源發現從應用程式的頂層開始。透過向部署 Spring Data REST 應用程式的根 URL 發出請求,客戶端可以從返回的 JSON 物件中提取一組連結,這些連結表示客戶端可用的下一級資源。

例如,要發現應用程式根目錄中有哪些資源可用,請向根 URL 發出 HTTP GET,如下所示

curl -v https://:8080/

< HTTP/1.1 200 OK
< Content-Type: application/hal+json

{ "_links" : {
    "orders" : {
      "href" : "https://:8080/orders"
    },
    "profile" : {
      "href" : "https://:8080/api/alps"
    }
  }
}

結果文件的屬性是一個物件,它由表示關係型別的鍵組成,幷包含 HAL 中指定的巢狀連結物件。

有關 profile 連結的更多詳細資訊,請參閱應用級配置檔案語義 (ALPS)

集合資源

Spring Data REST 公開了一個集合資源,其名稱取自匯出儲存庫處理的域類的未大寫、複數形式。資源名稱和路徑都可以透過在儲存庫介面上使用 @RepositoryRestResource 進行自定義。

支援的 HTTP 方法

集合資源支援 GETPOST。所有其他 HTTP 方法都會導致 405 Method Not Allowed

GET

透過其 findAll(…) 方法返回儲存庫服務的所有實體。如果儲存庫是分頁儲存庫,我們會在必要時包含分頁連結和額外的頁面元資料。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • findAll(Pageable)

  • findAll(Sort)

  • findAll()

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

引數

如果儲存庫具有分頁功能,則資源接受以下引數

  • page:要訪問的頁碼(0 索引,預設為 0)。

  • size:請求的頁面大小(預設為 20)。

  • sort:一系列排序指令,格式為 ($propertyname,)+[asc|desc]?。

自定義狀態碼

GET 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 findAll(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中不存在。

支援的媒體型別

GET 方法支援以下媒體型別

  • application/hal+json

  • application/json

GET 方法支援用於發現相關資源的單個連結

  • search:如果後端儲存庫公開查詢方法,則會公開一個搜尋資源

HEAD

HEAD 方法返回集合資源是否可用。它沒有狀態碼、媒體型別或相關資源。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • findAll(Pageable)

  • findAll(Sort)

  • findAll()

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

POST

POST 方法從給定的請求體建立一個新實體。預設情況下,響應是否包含正文由請求傳送的 Accept 標頭控制。如果傳送了,則建立響應正文。如果沒有,則響應正文為空,並且可以透過遵循 Location 響應標頭中包含的連結來獲取建立的資源的表示。此行為可以透過相應配置 RepositoryRestConfiguration.setReturnBodyOnCreate(…) 來覆蓋。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • save(…)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

自定義狀態碼

POST 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 save(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中根本不存在。

支援的媒體型別

POST 方法支援以下媒體型別

  • application/hal+json

  • application/json

專案資源

Spring Data REST 將單個集合專案作為集合資源的子資源公開。

支援的 HTTP 方法

專案資源通常支援 GETPUTPATCHDELETE,除非顯式配置阻止(詳見“關聯資源”)。

GET

GET 方法返回單個實體。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • findById(…)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

自定義狀態碼

GET 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 findOne(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中不存在。

支援的媒體型別

GET 方法支援以下媒體型別

  • application/hal+json

  • application/json

對於域型別的每個關聯,我們都會公開以關聯屬性命名的連結。您可以透過在屬性上使用 @RestResource 來自定義此行為。相關資源屬於關聯資源型別。

HEAD

HEAD 方法返回專案資源是否可用。它沒有狀態碼、媒體型別或相關資源。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • findById(…)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

PUT

PUT 方法用提供的請求體替換目標資源的狀態。預設情況下,響應是否包含正文由請求傳送的 Accept 標頭控制。如果請求標頭存在,則返回響應正文和 200 OK 的狀態碼。如果不存在標頭,則響應正文為空,成功請求返回 204 No Content 的狀態。此行為可以透過相應配置 RepositoryRestConfiguration.setReturnBodyOnUpdate(…) 來覆蓋。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • save(…)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

自定義狀態碼

PUT 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 save(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中根本不存在。

支援的媒體型別

PUT 方法支援以下媒體型別

  • application/hal+json

  • application/json

PATCH

PATCH 方法與 PUT 方法類似,但部分更新資源狀態。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • save(…)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

自定義狀態碼

PATCH 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 save(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中不存在。

支援的媒體型別

PATCH 方法支援以下媒體型別

DELETE

DELETE 方法刪除公開的資源。預設情況下,響應是否包含正文由請求傳送的 Accept 標頭控制。如果請求標頭存在,則返回響應正文和 200 OK 的狀態碼。如果不存在標頭,則響應正文為空,成功請求返回 204 No Content 的狀態。此行為可以透過相應配置 RepositoryRestConfiguration.setReturnBodyOnDelete(…) 來覆蓋。

用於呼叫的方法

如果存在以下方法(降序),則使用它們

  • delete(T)

  • delete(ID)

  • delete(Iterable)

有關方法預設公開的更多資訊,請參閱儲存庫方法公開

自定義狀態碼

DELETE 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:如果 delete(…) 方法未匯出(透過 @RestResource(exported = false))或儲存庫中不存在。

關聯資源

Spring Data REST 為每個專案資源的所有關聯公開子資源。資源的名稱和路徑預設為關聯屬性的名稱,可以透過在關聯屬性上使用 @RestResource 進行自定義。

支援的 HTTP 方法

關聯資源支援以下媒體型別

  • GET

  • PUT

  • POST

  • DELETE

GET

GET 方法返回關聯資源的狀態。

支援的媒體型別

GET 方法支援以下媒體型別

  • application/hal+json

  • application/json

PUT

PUT 方法將給定 URI 指向的資源繫結到關聯資源(參見支援的媒體型別)。

自定義狀態碼

PUT 方法只有一個自定義狀態碼

  • 400 Bad Request:當為一對一關聯提供多個 URI 時。

支援的媒體型別

PUT 方法僅支援一種媒體型別

  • text/uri-list:指向要繫結到關聯的資源的 URI。

POST

POST 方法僅支援集合關聯。它向集合中新增一個新元素。

支援的媒體型別

POST 方法僅支援一種媒體型別

  • text/uri-list:指向要新增到關聯的資源的 URI。

DELETE

DELETE 方法解除關聯。

自定義狀態碼

POST 方法只有一個自定義狀態碼

  • 405 Method Not Allowed:當關聯為非可選時。

搜尋資源

搜尋資源返回儲存庫公開的所有查詢方法的連結。查詢方法資源的路徑和名稱可以透過在方法宣告上使用 @RestResource 進行修改。

支援的 HTTP 方法

由於搜尋資源是隻讀資源,因此它僅支援 GET 方法。

GET

GET 方法返回指向各個查詢方法資源的連結列表。

支援的媒體型別

GET 方法支援以下媒體型別

  • application/hal+json

  • application/json

對於儲存庫中宣告的每個查詢方法,我們都會公開一個查詢方法資源。如果資源支援分頁,則指向它的 URI 是一個包含分頁引數的 URI 模板。

HEAD

HEAD 方法返回搜尋資源是否可用。404 返回碼錶示沒有查詢方法資源可用。

查詢方法資源

查詢方法資源透過儲存庫介面上的單個查詢方法執行公開的查詢。

支援的 HTTP 方法

由於查詢方法資源是隻讀資源,因此它僅支援 GET

GET

GET 方法返回查詢結果。

引數

如果查詢方法具有分頁功能(在指向資源的 URI 模板中指示),則資源接受以下引數

  • page:要訪問的頁碼(0 索引,預設為 0)。

  • size:請求的頁面大小(預設為 20)。

  • sort:一系列排序指令,格式為 ($propertyname,)+[asc|desc]?。

支援的媒體型別

GET 方法支援以下媒體型別

  • application/hal+json

  • application/json

HEAD

HEAD 方法返回查詢方法資源是否可用。

© . This site is unofficial and not affiliated with VMware.