2016-05-25 36 views
3

我有一個實體Temperature用於收集對象的RESTful URL

我的網址設計如下:

GET  /api/temperatures/new 
GET  /api/temperatures/{id}/edit 
GET  /api/temperatures 
POST  /api/temperatures 
PUT  /api/temperatures/{id} 
DELETE /api/monitoring/temperatures/{id} 

我想一次建立多個溫度(溫度的集合) - 是那裏的網址使用方面進行任何約定?

到目前爲止,我想出了以下內容:

POST /api/monitoring/temperatures/collection 
GET /api/monitoring/temperatures/cnew 

我認爲必須有這樣的慣例已經所以想查你。

+0

爲什麼不使用'POST'將溫度數組發送到'/ api/temperature'端點? –

回答

0

HTTP方法GET不適合創建或編輯資源 - /api/temperatures/new/api/temperatures/{id}/edit。 HTTP GET用於在不改變服務器狀態的情況下獲取信息。你應該use POST or PUT

如果你想創建多個溫度,你應該使用

POST /api/monitoring/temperatures 

和消費對象的JSON或XML列表。

Java示例:

@POST 
@Path("/temperatures") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response postTemperatures(Temperatures temperatures){ 
    // process and save 
} 

@XmlRootElement 
public class Temperatures { 

    public List<Temperature> temperatures; 

    Temperatures(){} 
} 
3
GET  /api/temperatures # Getting all resources 
POST /api/temperatures # Create new resource 
GET  /api/temperatures/<id> # Get a single resource 
PUT  /api/temperatures/<id> # Edit all fields 
PATCH /api/temperatures/<id> # Edit some fields 
DELETE /api/temperatures/<id> # Delete a resource 

這些是在URL的菲爾丁的描述在他的論文REST。您不應該描述URL中的終結點,特別是在正確使用時,HTTP動詞提供大量信息。請注意,REST架構風格比JSON over HTTP更重要。通用連接器,組件和無狀態服務器的分離是RESTful應用程序的關鍵組件。

注:大多數人可能不會實現PUT和PATCH。 PUT將會很好,但爲了完整性我將它包含在內。

作爲對您的評論的迴應,如果您指的是使用一個POST請求創建多個資源,則不需要新的URL。您的應用程序應該能夠在同一端點處理{temp: 45, date: ...}[{temp: 45, date: ...}, {temp: 50, date: ...}]

+0

謝謝@IanAuld你有什麼建議嗎? – Mick

+0

建議做什麼?如果您需要創建多個新資源,則需要發送多個POST或能夠處理包含新資源數組的POST請求。 – IanAuld

+0

太棒了 - 現在你會在第二個場景中發佈什麼網址? – Mick

0

您可以通過溫度,而不是一個單一的入口陣列發送更新單篇文章的多個條目,

POST  /api/temperatures { [{...},{...}] } 

但你的API端點結構可以簡化一點。

理想情況下,您希望爲所有API資源提供簡單的一致接口。

我會親自簡化​​:

GET  /api/temperatures/new 
GET  /api/temperatures/{id}/edit 
GET  /api/temperatures 
POST  /api/temperatures 
PUT  /api/temperatures/{id} 
DELETE /api/monitoring/temperatures/{id} 

GET  /api/temperatures   // Get all temperatures 
POST  /api/temperatures   // Send in array of new entries to update 
GET  /api/temperatures/{id}  // Read a specific temperature 
PUT  /api/temperatures/{id}  // Update a specific temperature 
DELETE /api/temperatures/{id}  // Delete a specific temperature 

這給出了一個一致的接口的API映射到CRUD接口的所有溫度相關的調用。

如果沒有上下文,很難確切知道/ api/temperature/new的用法,但我會考慮在調用中使用參數來細化響應。

例如

/api/temperatures?age=new  // Get new temps 

這將允許您使用通用結構以後添加不同類型的標準。