簡體   English   中英

JAX-RS中方法類型的最佳實踐

[英]Best practices for method types in JAX-RS

有關JAX-RS中方法類型的最佳實踐是什么?

我對以下方法感興趣:GET,POST,PUT和DELETE。

我可能的方法:

GET - 總是返回一個回復。

@GET
@Path("/path/{something}")
public T getT() {
    ...
    return t;          // t - instance of T
}

POST

@POST
@Path("/path")
public T/void createOrUpdate() {
    ...
    return t;          // t - instance of T
}

問:返回整個創建的資源或僅返回“ACK響應”還是使用void方法更好? 那個用作GET的POST(當我們想避免URL長度限制時)?

@PUT
@Path("/path")
public T/void createOrUpdate() {
    ...
    return t;          // t - instance of T
}

問:是不是最好有一個方法或創建/更新的資源或不同的反應創造/更新或只是一個ACK響應響應

刪除

@DELETE
@Path("/path/{something}")
public T/void deleteT() {
    ...
    return t;          // t - instance of T
}

問:最好是使用void方法還是返回已刪除的資源或返回ACK響應

總是有T = javax.ws.rs.core.Response (當使用T時)可以嗎?

我看見了:

  • Lars Vogel使用GET - T,POST - void,PUT - T,DELETE - void
  • Oracle使用GET - T,POST - T / void,DELETE - void

JAX-RS是使用Java開發RESTful Web服務的規范。 Java EE中包含一個參考實現,但由於它是一個規范,因此可以編寫其他框架來實現規范,包括Jersey,Resteasy等。

這樣的JAX-RS沒有為REST API的返回類型和響應代碼制定任何指導原則。 但是,REST標准中有一些指導原則(這些不是硬性規則和快速規則),您可能需要遵循這些指南:

Method                  GET     
Successful Response     RETURN the resource with 200 OK  
Failure Response        RETURN appropriate response code

Method                  POST  
Successful Response     RETURN the link to the newly created resource in Location response  header with 201 status code  
Failure Response        RETURN appropriate response code

Method                  PUT  
Successful Response     RETURN the updated resource representation with 200 OK or return nothing with 204 status code   
Failure Response        RETURN appropriate response code

Method                  DELETE  
Successful Response     RETURN nothing with 200 or 204 status code  
Failure Response        RETURN appropriate response code

實際上,POST適用於創建資源。 應在Location響應頭中返回新創建的資源的URL。 PUT應該用於完全更新資源。 請理解這些是設計RESTful API時的最佳實踐。 這樣的HTTP規范不限制使用PUT / POST,但有一些限制來創建/更新資源。 看一下Twitter REST API最佳實踐 ,總結了RESTful API的最佳實踐。

這個答案不正確/最新。 請檢查@ROMANIA_engineer答案。

你永遠不應該回歸虛空。 最佳做法是始終返回javax.ws.rs.core.Response 但請注意,即使您使用void定義webresource,您的服務器也會返回HTTP響應。

POSTPUT ,最好返回修改后的資源,包括其id。 一些前端框架和/或中間件將使用它來將資源與您的服務器同步(例如,參見Backbone Model )。

DELETE ,它取決於您嘗試實現的操作。但通常ACK就足夠了。

注意:無論如何,無論您返回什么,都不要忘記尊重您的安全政策!


響應@Atul:當您從客戶端發送HTTP請求或從服務器發送HTTP響應時,某些數據可能會受到保護。 作為實例:

  • 在用戶更新(用戶名,密碼或其他任何內容)上,不要在HTTP響應中返回用戶密碼。
  • 用戶登錄時,最好使用HTTPS協議,不要以明文形式發送密碼
  • 等等

我試一試並說“沒有最好的做法”。 這是因為底層協議(HTTP)實際上在任何情況下都有返回值(例如200-OK,500-Internal Error ...),除非您的服務也應該遵循斷開的連接。

由於您沒有按照自己的規則實施HTTP協議,而是自己設計的服務,沒有最佳做法,您必須以最適合您日常業務的方式定義“您的協議”。

例如,當涉及到刪除操作時,調用者可能根本不對響應感興趣,或者期望您像堆棧一樣工作並在調用時返回“刪除/刪除”元素。 由您自己決定最適合您的需求。

暫無
暫無

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

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