天天看點

淺談REST架構風格

現如今微服務如日中天,那麼大家有沒有想過各個微服務之間是怎麼調用資料亦或是怎麼互動的呢?當然方式有很多,但今天所說的REST風格被業界推薦為微服務之間互動的首選方式(小編還是非常喜歡這種方式的)。廢話不多講,下面就說說REST風格到底是個神馬東東。–讀《深入淺出 Sping Boot》有感

REST簡介

REST(Representational State Transfer)又被喚作表現層狀态轉換。它涉及到三個重要名詞:

  • 資源

    所謂資源簡單講就是服務所能提供的資料,可以是實體資料也可是媒體類型,圖檔、PDF、文本等

  • 表現層

    何為變現層?簡單說就是将資料以某種方式展現給使用者,或者給客戶傳回一張圖檔等等動作稱之為表現,通常是已JSON或XML形式展現資料

  • 狀态轉換

    狀态轉換就是對資料進行一系列的操作,因為資源本身并非一塵不變,随着需求的變化而變化。一個資源可能會随着需求的變化而經曆一個資源建立、修改、查詢、删除等過程,REST風格正是基于HTTP協定運作的,HTTP協定又被稱為無狀态協定,是以資源的變化需要在服務端完成。

REST風格之RUI設計

在做這個之前有必要清楚Http協定的7種常用動作:GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS

# 以id為編碼 擷取商品資訊
GET  /goods/1
# 擷取多個商品資訊
GET  /goods/{goodName}/{note}
# 建立商品資訊
POST  /goods/{goodName}/{price}/{note}
# 修改商品資訊
PUT  /goods/{goodName}/{price}/{note}
# 修改商品部分
PATCH  /goods/{goodName}/{note}
# 删除某個商品資訊
DELETE  /goods/2
           

REST風格端點

# 建立一個商品實體類
 public class goods{
    private Long id;
    private String goodsName;
    private Double price;
    private String note;
    
    public Long getId(){
        return id;
    }
    public void setId(Long id){
        this.id = id;
    }
    public String getGoodsName(){
        return goodsName;
    }
    public void setGoodsName(String goodsName){
        this.goodsName = goodsName;
    }
    public Double getPrice(){
        return price;
    }
    public void setPrice(Double price){
        this.price = price;
    }
    public String getNote(){
        return note;
    }
    public void setNote(String note){
       this.note = note;
    }
}
           
# 控制器
@Controller
public class GoodsController{
    /**
     *REST風格 擷取商品的GET請求方式
     **/
     @GetMapping(value="/goods/{id}")
     @ResponseBody
    public Goods getGoods(@Pathvariable("id") Long id){
        Goods goods = goodsService.getGoods(id);
        return goods;
    } 
    /**
     *REST風格 PUT請求修改商品資訊
     **/
     @GetMapping(value="/goods/{id}")
     @ResponseBody
    public Goods getGoods(@Pathvariable("id") Long id,@RequestBody Goods goods){
        Goods goods = goodsService.getGoods(id);
        goods.setId(id);
        goodsService.update(goods);
        return goods;
    } 
    /**
     *REST風格 使用HTTP的DELETE請求删除商品資訊
     **/
     @GetMapping(value="/goods/{id}")
     @ResponseBody
    public String getGoods(@Pathvariable("id") Long id){
        int status = goodsService.deleteGoods(id);
        String result = "";
        if(status=0){
            result = "操作成功";
        }else{
            result = "操作失敗";
        }
        return result;
    } 
}
           

以上是我對REST風格的簡單認識,希望能給您提供些許幫助!謝謝支援!!

2019-03-27 23:30:34 星期三

繼續閱讀