0

我不是很喜歡REST風格的Web服務,我對如何正確實現REST風格的工作在Spring Boot應用(Spring MVC是同樣的事情)的服務中存在以下疑問。如何正確實現使用Spring MVC Boot的RESTful WS體系結構?

所以基本上我有一些控制器類是這樣的:

@RestController 
@RequestMapping("/RoomMedia") 
public class RoomMediaController { 

    private static final Logger log = LoggerFactory.getLogger(RoomMediaController.class); 

    @Autowired 
    private RoomMediaService roomMediaService; 

    public RoomMediaController() { 
     log.debug("RoomMediaController init"); 
    } 


    @RequestMapping(value = "getAllImagesByRoomId", 
      method = RequestMethod.GET, 
      produces = MediaType.APPLICATION_JSON_VALUE) 
    public ResponseEntity<List<byte[]>> getAllImagesByRoomId(Long roomId) throws DataAccessException { 

     log.debug("getAllImagesByRoomId START"); 

     List<byte[]> result = roomMediaService.getRoomImageListById(roomId); 

     log.debug(result.toString()); 

     log.debug("getAllImagesByRoomId END"); 

     return ResponseEntity.ok(result); 

    } 
} 

我認爲,如果也基本思路是REST風格等,所以不能算一個真正的REST風格的WS。

我認爲主要的問題是關係到端點:在getAllImagesByRoomId()方法處理HTTP GET對這樣的URL請求:/RoomMedia/getAllImagesByRoomId roomId = 7

從什麼我已經明白閱讀一些教程,這不是RESTful風格的,因爲我要訪問的資源沒有通過參數,我必須做些事情是這樣的:

/RoomMedia /圖片/ 7

它是我的推理是否正確?

而且我認爲,以前的方法是相當的實現也簡單:這個方法返回關聯於具有ID = 7(這是關係到酒店的應用程序)的房間的所有圖像的列表。

從我所瞭解的邏輯來看,它也是RESTful原則。

以下方式組織好嗎?

做一個GET請求是這樣的:

  • /RoomMedia/7 /圖像/:我以獲得相關聯的具有ID = 7房間中的所有圖像的列表如URI(或者更好地處理像/7/RoomMedia/Images/?的路徑)。

  • /RoomMedia/7 /圖像/ 1我獲得與ID = 1相關聯具有ID = 7房間中的圖像。

這些推理是正確的還是我錯過了什麼?

回答

0

你的設想是正確的。你提出的哪種映射方法正在取消你的模型。 Martin Fowler的有大約Richardson Maturity Model這是歸結爲一個不錯的文章:

  • 1級剷球使用分而治之,打破了龐大的服務端點分解成多個資源處理複雜的問題。
  • 2級引入了一組標準的動詞,以便我們以相同的方式處理類似的情況,消除不必要的變化。
  • 3級引入了發現性,提供了一種使協議更加自我記錄的方法。

爲你的項目,你可以使用jhipster,因爲它爲您提供最好的彈簧與角下一個REST-FUL設計。

0

網址不得包含動詞。動詞由方法提供,在你的情況下 - 驚喜,驚喜 - GET。

ByRoomId也沒有意義,因爲這就是?roomId=所說的。

這留下了AllImages,其中All是多餘的。

其中導致網址/RoomMedia/Images?roomId=7。不清楚的是RoomMediaImages之間的關係,如果有的話。如果RoomMedia指的是一個房間,那麼你的建議/RoomMedia/7/Images/將是正確的。

/RoomMedia/7/Images/1是有問題的。它應該是/Images/1。這與ID爲1的圖像在哪個房間無關。

當您設計REST API時,首先要考慮要公開的所有資源及其關係。之後,網址會自動顯示出來,可以這麼說。