1. 程式人生 > >使用Spring Boot設計和實現REST API

使用Spring Boot設計和實現REST API

REST端點用於整合應用程式或伺服器端向客戶端提供服務。在本文中,將介紹基於CRUD的SpringBoot來設計和實現REST端點。

假設有一個客戶資料,我將建立一個相應的Spring REST Controller來訪問客戶資料。為了簡單起見,我將只關注控制器類而不是整個spring應用程式。可以在github中下載完整的專案。

這是一個CRUD應用程式,因此控制器將有四種基本方法來支援獲取,儲存,更新和刪除操作。所有這些操作都將適用於客戶資料。下面是控制器類的框架。

@RestController
@RequestMapping("/customers")
public class CustomerController {
    @Autowired
    private CustomerRepository customerRepository;  
    //get, save, update and delete 方法
}

客戶資源的所有端點都以/ customers開頭。

設計和實施端點

端點應簡短易用。例如,為了通過Id獲取客戶,我們可以使用/ customers / {id}這樣的端點。

但是像/ customers / getCustomerById,其URL中含有操作動詞是錯誤的,因為通過Id獲取客戶是一個操作,我們可以使用HTTP方法實現此操作,因此放在URL中是多餘的,它使URL複雜化。

HTTP提供了各種可用於簡化端點的方法。HTTP提供了一些標準方法,如GET,PUT,POST或OPTIONS等。所有這些方法都有助於設計簡單的REST端點,因為這是標準的,所以每個人都可以理解它們。

GET

GET方法用於訪問資源。要根據ID獲取客戶記錄,我們可以使用/ customers / {id}等端點。以下是此終點的實現。

@RequestMapping(value = {"/{id}"})
ResponseEntity byId(@PathVariable String id){
    if(!customerRepository.existsById(id))
        return new ResponseEntity<>(HttpStatus.NOT_FOUND); // HTTP 404

    return new ResponseEntity<>(customerRepository.findById(id).get(), HttpStatus.OK); // HTTP 200
}

當客戶端請求無效或不存在的“id”時,我們可以使用標準HTTP響應程式碼,而不是使用自定義正文或錯誤訊息進行響應。HTTP響應程式碼是REST中用於通知處理狀態的標準方式。有許多類別的程式碼可用,這裡是關於這些程式碼的一些資訊的連結。

  • 404 - 未找到:如果資料儲存中沒有“id”,則使用此HTTP程式碼是合適的。請注意,此HTTP程式碼是一個標準程式碼,表示沒有找到任何資料,因此客戶端可以理解這一點,而不會在響應正文中提供任何額外資訊。
  • 200 - 確定:已成功處理請求。

POST

此方法用於建立新資料記錄。此請求的端是/ customers。資料作為正文的一部分發送,因此不需要請求引數。

@RequestMapping(value = {""}, method = RequestMethod.POST)
ResponseEntity<?> save(@RequestBody Customer customer){
    if(customer == null)
        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400
    if(customerRepository.existsById(customer.getId()))
        return new ResponseEntity(HttpStatus.CONFLICT); // HTTP 409

    Customer cust = customerRepository.save(customer);
    return new ResponseEntity<>(cust, HttpStatus.CREATED); // HTTP 201
}
  • 400 - BAD REQUEST:如果請求為null,則通知客戶端請求不正確。
  • 409 - 衝突:如果新客戶的ID已經存在於資料儲存中,那麼它就是衝突請求。
  • 201 - 建立:所有驗證都成功,資料將插入到儲存中。

PUT

此方法允許使用者更新現有資料記錄。此請求的端點是/ customers,資料作為正文的一部分發送,因此不再需要請求引數。

@RequestMapping(value = {""}, method = RequestMethod.PUT)
ResponseEntity<?> update(@RequestBody Customer customer){
    if(customer == null)
        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400
    if(!customerRepository.existsById(customer.getId()))
        return new ResponseEntity(HttpStatus.BAD_REQUEST); // HTTP 400

    return new ResponseEntity<>(customerRepository.save(customer), HttpStatus.CREATED); // HTTP 201
}
  • 400 - BAD REQUEST:如果正文是空的,或者客戶在資料儲存中不可用。
  • 201 - 建立:沒有用於更新的標準HTTP程式碼,因此我們可以使用201進行更新。

DELETE

此方法應用於刪除請求。此請求的端點是/ customers / {id}。請求中的指定ID將從儲存中刪除。

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
ResponseEntity<Object> delete(@PathVariable String id){
    if(!customerRepository.existsById(id))
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST); // HTTP 400

    customerRepository.deleteById(id);
    return new ResponseEntity<>(HttpStatus.NO_CONTENT); // HTTP 204
}
  • 400 - BAD REQUEST:如果資料儲存中不存在id,那麼這是一個錯誤的請求。
  • 204 - NO CONTENT:刪除後資料將不可用,因此在這種情況下204是合適的。我們也可以考慮使用200。

歡迎大家加入粉絲群:963944895,群內免費分享Spring框架、Mybatis框架SpringBoot框架、SpringMVC框架、SpringCloud微服務、Dubbo框架、Redis快取、RabbitMq訊息、JVM調優、Tomcat容器、MySQL資料庫教學視訊及架構學習思維導圖