服務器可能支持資源獲取,創(chuàng)建,更新和刪除。
服務器允許單次請求,更新多個資源,如下所述。多個資源更新必須完全成功或者失敗,不允許部分更新成功。
任何包含內(nèi)容的請求,必須包含Content-Type:application/vnd.api+json請求頭。
支持資源創(chuàng)建的服務器,必須支持創(chuàng)建單獨的資源,可以選擇性支持一次請求,創(chuàng)建多個資源。
向表示待創(chuàng)建資源所屬資源集的URL,發(fā)出POST請求,創(chuàng)建一個或多個資源。
創(chuàng)建單獨資源的請求必須包含單一主要資源對象。
例如,新photo可以通過如下請求創(chuàng)建:
POST /photos
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"photos": {
"title": "Ember Hamster",
"src": "http://example.com/images/productivity.png"
}
}
創(chuàng)建多個資源的請求必須包含主要主要資源集合。
例如,多個photos通過如下請求創(chuàng)建:
POST /photos
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"photos": [{
"title": "Ember Hamster",
"src": "http://example.com/images/productivity.png"
}, {
"title": "Mustaches on a Stick",
"src": "http://example.com/images/mustaches.png"
}]
}
服務器依據(jù)HTTP semantics規(guī)范,響應成功的資源創(chuàng)建請求。
當一個或多個資源創(chuàng)建成功,服務器返回201 Created狀態(tài)碼。
響應必須包含Location頭,用以標示請求創(chuàng)建所有資源的位置。
如果創(chuàng)建了單個資源,且資源對象包含href鍵,Location URL必須匹配href值。
響應必須含有一個文檔,用以存儲所創(chuàng)建的主要資源。如果缺失,客戶端則判定資源創(chuàng)建時,傳輸?shù)奈臋n未經(jīng)修改。
HTTP/1.1 201 Created
Location: http://example.com/photos/550e8400-e29b-41d4-a716-446655440000
Content-Type: application/vnd.api+json
{
"photos": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"href": "http://example.com/photos/550e8400-e29b-41d4-a716-446655440000",
"title": "Ember Hamster",
"src": "http://example.com/images/productivity.png"
}
}
服務器可能使用其它HTTP錯誤狀態(tài)碼反映錯誤??蛻舳吮仨氁罁?jù)HTTP規(guī)范處理這些錯誤信息。如下所述,錯誤細節(jié)可能會一并返回。
請求創(chuàng)建一個或多個資源時,服務器可能接受客戶端生成IDs。IDs必須使用"id"鍵來指定,其值必須正確生成,且為格式化的UUID。
例如:
POST /photos
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"photos": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"title": "Ember Hamster",
"src": "http://example.com/images/productivity.png"
}
}
支持資源更新的服務器必須支持單個資源的更新,可以選擇性的支持單次請求更新多個資源。
向表示單獨資源或多個單獨資源的URL發(fā)出PUT請求,即可進行資源更新。
為更新單獨資源,向表示資源的URL發(fā)出PUT請求。請求必須包含一個頂層資源對象。
例如:
PUT /articles/1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"articles": {
"id": "1",
"title": "To TDD or Not"
}
}
向表示多個單獨資源(不是全部的資源集合)的URL發(fā)出PUT請求,即可更新多個資源。請求必須包含頂層資源對象集合,且每個資源具有“id"元素。
例如:
PUT /articles/1,2
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"articles": [{
"id": "1",
"title": "To TDD or Not"
}, {
"id": "2",
"title": "LOL Engineering"
}]
}
要更新資源的一個或多個屬性,主要資源對象應該只包括待更新的屬性。資源對象缺省的屬性將不會更新。
例如,下面的PUT請求,僅會更新article的title和text屬性。
PUT /articles/1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"articles": {
"id": "1",
"title": "To TDD or Not",
"text": "TLDR; It's complicated... but check your test coverage regardless."
}
}
單對象關聯(lián)更新,可以在PUT請求資源對象中包含links鍵,從而與其它屬性一起更新。
例如,下面的PUT請求將會更新article的title和author屬性:
PUT /articles/1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"articles": {
"title": "Rails is a Melting Pot",
"links": {
"author": "1"
}
}
}
若要移除單對象關聯(lián),指定null作為值即可。
另外,單對象關聯(lián)也可以通過它的關聯(lián)URL訪問。
向關聯(lián)URL發(fā)出帶有主要資源的POST請求,即可添加單對象關聯(lián)。
例如:
POST /articles/1/links/author
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"people": "12"
}
向關聯(lián)URL發(fā)出DELETE請求,即可刪除單對象關聯(lián)。例如:
DELETE /articles/1/links/author
更新多對象關聯(lián),可以在PUT請求中資源對象包含links鍵,從而與其它屬性一起更新。
例如,下面PUT請求完全替換article的tags。
PUT /articles/1
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"articles": {
"id": "1",
"title": "Rails is a Melting Pot",
"links": {
"tags": ["2", "3"]
}
}
}
若要移除多對象關聯(lián),指定空數(shù)組[]為值即可。
在分布式系統(tǒng)中,完全替換一個數(shù)據(jù)集合并不總是合適。替換方案是允許單獨的添加或移除關聯(lián)。
為促進細化訪問,多對象關聯(lián)也可以通過關聯(lián)URL訪問。
向關聯(lián)URL發(fā)出帶有主要資源的POST請求,即可添加多對象關聯(lián)。
POST /articles/1/links/comments
Content-Type: application/vnd.api+json
Accept: application/vnd.api+json
{
"comments": ["1", "2"]
}
向關聯(lián)URL發(fā)出DELETE請求,即可刪除多對象對象關聯(lián)。例如:
DELETE /articles/1/links/tags/1
向關聯(lián)URL發(fā)出DELETE請求,即可刪除多個多對象對象關聯(lián)。例如:
DELETE /articles/1/links/tags/1,2
如果更新成功,且客戶端屬性保持最新,服務器必須返回204 No Content狀態(tài)碼。適用于PUT請求,以及僅調整links,不涉及其它屬性的POST, DELETE請求。
如果服務器接受更新,但是在請求指定內(nèi)容之外做了資源修改,必須響應200 OK以及更新的資源實例,像是向此URL發(fā)出GET請求。
服務器使用其它HTTP錯誤狀態(tài)碼反映錯誤??蛻舳吮仨氁罁?jù)HTTP規(guī)范處理這些錯誤信息。如下所述,錯誤細節(jié)可能會一并返回。
向資源URL發(fā)出DELETE請求即可刪除單個資源。
DELETE /photos/1
服務器可以選擇性的支持,在一個請求里刪除多個資源。
DELETE /photos/1,2,3
如果刪除請求成功,服務器必須返回204 No Content 狀態(tài)碼。
服務器使用其它HTTP錯誤狀態(tài)碼反映錯誤??蛻舳吮仨氁罁?jù)HTTP規(guī)范處理這些錯誤信息。如下所述,錯誤細節(jié)可能會一并返回。