Spring Boot - 構(gòu)建優(yōu)雅的Restful API

SpringBoot是搭建微服務(wù)的利器,那么微服務(wù)于微服務(wù)之間如果交互調(diào)用?RPC是一種,但是Restful風(fēng)格的Http請求也是其中一種祠挫。

什么是Restful

REST(英文:Representational State Transfer,簡稱REST)描述了一個架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng)悼沿,比如 web 應(yīng)用程序等舔。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一糟趾。在目前主流的三種Web服務(wù)交互方案中慌植,REST相比于SOAP(Simple Object Access protocol,簡單對象訪問協(xié)議)以及XML-RPC更加簡單明了义郑,無論是對URL的處理還是對Payload的編碼蝶柿,REST都傾向于用更加簡單輕量的方法設(shè)計和實現(xiàn)。值得注意的是REST并沒有一個明確的標(biāo)準(zhǔn)非驮,而更像是一種設(shè)計的風(fēng)格交汤。-- 摘自百度百科

環(huán)境工具

  • JDK1.8
  • MySQL5.7
  • Postman
  • IDEA
  • Maven3

當(dāng)前使用的Spring Boot的版本為1.5.8.RELEASE

創(chuàng)建項目

IDEA -> New -> Project -> Spring Initializr -> 填寫Group和Artifact -> Next -> 選擇Web,勾選Web劫笙;選擇SQL芙扎,勾選MyBatis和MySQL -> Next -> Finish

創(chuàng)建相應(yīng)包、類和文件

需要創(chuàng)建一些包填大、類和相應(yīng)的文件

com.roachfu.tutorial
    controller
        DemoController.java
    entity
        Demo.java
    mapper
        DemoMapper.java
    service
        impl
            DemoServiceImpl.java
        DemoService.java
    SpringBootRestfulApplication.java

Restful 風(fēng)格

我們知道Http是有很多種請求方式的:
GET戒洼、HEADPOST允华、PUT圈浇、PATCH寥掐、DELETEOPTIONS磷蜀、TRACE召耘。

我們常用的有POSTDELETE蠕搜、PUT怎茫、GET收壕,分別對應(yīng)我們的增刪改查妓灌。

  • GET /users:獲取用戶列表
  • GET /users/{uid} 獲取某個用戶信息
  • POST /users 新增一個用戶
  • PUT /users/{uid} 修改某個用戶信息
  • DELETE /users/{uid} 刪除某個用戶

更多資料請看RESTful API 設(shè)計指南

application.properties配置

設(shè)置了上下文路徑,MyBatis配置以及連接MySQL數(shù)據(jù)庫

server.context-path=/tutorial

mybatis.type-aliases-package=com.roachfu.tutorial.entity
mybatis.configuration.map-underscore-to-camel-case=true

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.56.2:3306/spring_boot?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=Fanshu_123456

DemoController

@RestController
@RequestMapping("/demos")
public class DemoController {

    @Resource
    private DemoService demoService;

    @PostMapping
    public int add(@RequestBody Demo demo){
        return demoService.save(demo);
    }

    @GetMapping
    public List<Demo> queryList(){
        return demoService.getList();
    }

    @GetMapping("/{id}")
    public Demo queryOne(@PathVariable("id")Integer id){
        return demoService.getOne(id);
    }

    @PutMapping("/{id}")
    public int update(@PathVariable("id")Integer id, @RequestBody Demo demo){
        demo.setId(id);
        demo.setUpdateTime(new Date());
        return demoService.update(demo);
    }

    @DeleteMapping("/{id}")
    public int delete(@PathVariable("id")Integer id){
        return demoService.delete(id);
    }
}
  • @GetMapping 等價于 @RequestMapping(method = RequestMethod.GET)
  • @GetMapping("/{id}") 等價于 @RequestMapping(value = "/{id}", method = RequestMethod.GET)
  • @PostMapping 等價于 @RequestMapping(method = RequestMethod.POST)

以此類推蜜宪。

DemoServiceImpl

@Service
public class DemoServiceImpl implements DemoService {

    @Resource
    private DemoMapper demoMapper;

    @Override
    public List<Demo> getList() {
        return demoMapper.selectList();
    }

    @Override
    public Demo getOne(Integer id) {
        return demoMapper.selectOne(id);
    }

    @Override
    public int save(Demo demo) {
        return demoMapper.insert(demo);
    }

    @Override
    public int update(Demo demo) {
        return demoMapper.update(demo);
    }

    @Override
    public int delete(Integer id) {
        return demoMapper.delete(id);
    }
}

至于entity虫埂,mapper等在前面的教程中已經(jīng)有展示過了,也可以查看項目源碼

演示結(jié)果

由于直接在瀏覽器中輸入URL圃验,請求只支持GET請求掉伏,這樣就無法看到其他請求方式的效果。
所以我們要借助Postman來進(jìn)行測試澳窑。需要設(shè)置content-typeapplication/json

  • 運行SpringBootRestfulApplication.java中的main方法斧散。
  • 打開Postman,并設(shè)置對應(yīng)的方法摊聋,例如用POST請求新增一個Demo
新增一個Demo
  • 測試其他的方法并查看結(jié)果
GET http://localhost:8080/tutorial/demos
GET http://localhost:8080/tutorial/demos/1
PUT http://localhost:8080/tutorial/demos/1
DELETE http://localhost:8080/tutorial/demos/1

好吧鸡捐,優(yōu)雅的Restful API 我們就搞定了

項目源碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市麻裁,隨后出現(xiàn)的幾起案子箍镜,更是在濱河造成了極大的恐慌,老刑警劉巖煎源,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件色迂,死亡現(xiàn)場離奇詭異,居然都是意外死亡手销,警方通過查閱死者的電腦和手機(jī)歇僧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锋拖,“玉大人馏慨,你說我怎么就攤上這事」糜纾” “怎么了写隶?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長讲仰。 經(jīng)常有香客問我慕趴,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任冕房,我火速辦了婚禮躏啰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耙册。我一直安慰自己给僵,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布详拙。 她就那樣靜靜地躺著帝际,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饶辙。 梳的紋絲不亂的頭發(fā)上蹲诀,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天,我揣著相機(jī)與錄音弃揽,去河邊找鬼脯爪。 笑死,一個胖子當(dāng)著我的面吹牛矿微,可吹牛的內(nèi)容都是我干的痕慢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼涌矢,長吁一口氣:“原來是場噩夢啊……” “哼掖举!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒿辙,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤拇泛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后思灌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體俺叭,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年泰偿,在試婚紗的時候發(fā)現(xiàn)自己被綠了熄守。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡耗跛,死狀恐怖裕照,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情调塌,我是刑警寧澤晋南,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站羔砾,受9級特大地震影響负间,放射性物質(zhì)發(fā)生泄漏偶妖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一政溃、第九天 我趴在偏房一處隱蔽的房頂上張望趾访。 院中可真熱鬧,春花似錦董虱、人聲如沸扼鞋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽云头。三九已至,卻和暖如春转锈,著一層夾襖步出監(jiān)牢的瞬間盘寡,已是汗流浹背楚殿。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工撮慨, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脆粥。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓砌溺,卻偏偏與公主長得像,于是被迫代替她去往敵國和親变隔。 傳聞我的和親對象是個殘疾皇子规伐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)匣缘,斷路器猖闪,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • Spring的模型-視圖-控制器(MVC)框架是圍繞一個DispatcherServlet來設(shè)計的,這個Servl...
    alexpdh閱讀 2,638評論 0 3
  • 1肌厨、Spring MVC請求流程 (1)初始化:(對DispatcherServlet和ContextLoderL...
    拾壹北閱讀 1,945評論 0 12
  • 文/ZYRzyr原文鏈接:http://www.reibang.com/p/e907595e9d1d 本文提綱一培慌、...
    ZYRzyr閱讀 1,784評論 0 49
  • 最近兩天本來就感冒,然而還被蹬被子凍醒柑爸,每天被子在地上也是醉了吵护,什么時候?qū)W的。 一開始沒印象表鳍,是在老家馅而,先去了小麗...
    沂尾魚閱讀 174評論 0 0