如何设计一个优雅的RESTFUL的接口
show me the code and talk to me,做的出来更要说的明白
我是布尔bl,你的支持是我分享的动力!
一 、引入
设计接口是我们开发人员的日常操作。当我们把接口交给前端人员时,是否有种拔剑出鞘的错觉。毕竟交付接口,我们的开发工作就阶段性完成了。不过,如果我们没有一个接口设计规范的时候,结果会怎样呢?我们来张图感受一下。

二、REST
2000年,一个年轻小伙子(Roy Thomas Fielding)在他的博士论文提出了 REST。REST 是一种万维网软件架构风格。为什么说是风格不是标准呢?个人理解可能说标准就有点过分了。小伙子做不到。随后这种风格被推广开来,漂洋过海,被大众熟知。在 REST 的基础上,产生了 RESTFUL 。什么是 RESTFUL?简单的说,符合 REST 风格的接口就是 RESTFUL。
三、RESTFUL
接口各种各样。正如一千个人眼里有一千个鲁迅。RESTFUL 接口究竟长什么样子呢?
3.1 HTTP 的方法
HTTP 里面有几个基本的方法。我们利用这些约定一些规范。
| 方法 | 作用 |
|---|---|
| GET | 获取数据 |
| POST | 插入数据 |
| PUT | 更新数据 |
| DELECT | 删除数据 |
从表中,如果我们可以清楚看到当我们的接口是关于获取数据,那么我们使用 GET 方法。
如果我们可以清楚看到当我们的接口是关于插入数据,那么我们使用 POST 方法。
如果我们可以清楚看到当我们的接口是关于更新数据,那么我们使用 PUT 方法。
如果我们可以清楚看到当我们的接口是关于删除数据,那么我们使用 DELECT 方法。
3.2 名词
在上面我们已经知道接口在什么时候需要什么方法,那么我们现在来进入到设计接口的第二步。
我们看看线上网站的接口是怎么样的。

图中我们可以看到有个 v1 ,他代表的是版本号,所以我们在设计接口的时候可以在将版本号写上,用 v1、v2、v3 等表示。
我们发现他的接口都是名词。所以我们知道 RESTFUL 接口使用的是名词。比如我们设计一个获取数据的接口,我们可这样设计
/v1/list
上面接口是获取所有数据。
当我们需要列表中的一条数据,我们可以这样设计
/v1/list/1
上面接口表示获取是列表的1号数据,我们可以获取2号、3号数据等等,只要改变数字即可。
3.3 组合
结合上面两步,我们就可以设计出增删改查的 restful 接口了。
| 接口 | 方法 | 作用 |
|---|---|---|
| /v1/list | GET | 获取列表 |
| /v1/list | POST | 增加列表 |
| /v1/list | PUT | 更新列表 |
| /v1/list | DELECT | 删除列表 |
3.4 应用
以下是源码的demo
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@Slf4j
public class LsbRestfulApplication {
public static void main(String[] args) {
SpringApplication.run(LsbRestfulApplication.class, args);
}
/**
* 得到所有列表
* @return
*/
@RequestMapping(value = "/v1/list",method = RequestMethod.GET)
public String getList(){
log.info("得到列表");
return "得到列表";
}
/**
* 得到列表中的一条
* @param name
* @return
*/
@RequestMapping(value = "/v1/list/{name}",method = RequestMethod.GET)
public String getListone(@PathVariable("name") String name){
log.info("得到列表"+name);
return "得到列表"+name;
}
/**
* 往列表中的增加一条数据
* @return
*/
@RequestMapping(value = "/v1/list",method = RequestMethod.POST)
public String addList(){
log.info("增加一个列表1");
return "增加一个列表1";
}
/**
* 更新列表中的一条数据
* @return
*/
@RequestMapping(value = "/v1/list/{name}",method = RequestMethod.PUT)
public String updateListOne(@PathVariable("name") String name){
log.info("更新列表"+name);
return "更新列表"+name;
}
/**
* 删除所有列表
* @return
*/
@RequestMapping(value = "/v1/list",method = RequestMethod.DELETE)
public String delList(){
log.info("删除一个列表");
return "删除一个列表";
}
}
四、某同城交友网站
暗号:荆轲刺秦王
如何设计一个优雅的RESTFUL的接口的更多相关文章
- webview之如何设计一个优雅健壮的Android WebView?(下)(转)
转载:https://iluhcm.com/2018/02/27/design-an-elegant-and-powerful-android-webview-part-two/ (这篇文章写得有点晚 ...
- webview之如何设计一个优雅健壮的Android WebView?(上)(转)
转接:https://iluhcm.com/2017/12/10/design-an-elegant-and-powerful-android-webview-part-one/ 前言 Android ...
- 如何设计一个优雅健壮的Android WebView?(下)
转:如何设计一个优雅健壮的Android WebView?(下) 前言 在上文<如何设计一个优雅健壮的Android WebView?(上)>中,笔者分析了国内WebView的现状,以及在 ...
- 如何设计一个优雅健壮的Android WebView?(上)
转:如何设计一个优雅健壮的Android WebView?(上) 前言 Android应用层的开发有几大模块,其中WebView是最重要的模块之一.网上能够搜索到的WebView资料可谓寥寥,Gith ...
- 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...
- 设计一个高质量的API接口
参考网址:http://url.cn/5UaTeyv 前言 在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则. ...
- 如何设计一个牛逼的API接口
在日常开发中,总会接触到各种接口.前后端数据传输接口,第三方业务平台接口.一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护.这篇文章重点讨论一下提 ...
- Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!
前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...
- Spring Boot 2.x (十):构建优雅的RESTful接口
RESTful 相信在座的各位对于RESTful都是略有耳闻,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性状态转移是一组架构约束条 ...
随机推荐
- phpStudy中升级MySQL版本到5.7.17的方法步骤
http://www.jb51.net/article/120263.htm 前言 今天在工作发现一个错误,在往本地导数据表的时候老是报错: ? 1 [Err] 1294 - Invalid ON U ...
- 给websocket加入心跳包防止自动断开连接
var userId=$("#userId").val(); var lockReconnect = false; //避免ws重复连接 var ws = null; // 判断当 ...
- Vue的Router路由传参
一.文件结构 二.vue.js 打开此链接 https://cdn.bootcss.com/vue/2.6.10/vue.js 复制粘贴页面的所有内容 三.vue-router.js 打开此链接 h ...
- es6—变量的解构赋值
数组的解构赋值 ]]]]]]] = []}} = {}} = {}})]: first]: last} = arr} = {}) {}))}))}) {}))}))].]]]])})] }}} = { ...
- P1091 剧院广场
题目描述 柏林首都的剧院广场呈长方形,面积为 \(n \times m\) 平方米.在这座城市的周年纪念日之际,人们决定用方形花岗岩石板铺设广场.每块石板的大小都是 \(a \times a\) . ...
- JavaScript DOM查询,原生js实现元素子节点的获取
在网页网页开发中,经常会需要获取某个网页元素的子元素,然后对其进行事件绑定.或样式修改等行为.这些操作对于jquery来说很容易,但是对于原生js会稍微麻烦一些,这里将介绍四种方法获取元素的子元素(本 ...
- addEventListener() 方法,事件监听(去哪儿网用到过)
addEventListener() 方法,事件监听 你可以使用 removeEventListener() 方法来移除事件的监听. 语法 element.addEventListener(event ...
- 洛谷——P1540机器翻译(队列操作)
#include<bits/stdc++.h> using namespace std; int main(){ queue<int> num;//存放的内存 ]; int m ...
- vue学习笔记(二)vue的生命周期和钩子函数
前言 通过上一章的学习,我们已经初步的了解了vue到底是什么东西,可以干什么,而这一篇博客主要介绍vue的生命周期和它常用的钩子函数,如果有学过java的园友可能有接触到在学习servlet的时候学过 ...
- 聊聊多线程哪一些事儿(task)之 二 延续操作
hello,又见面啦,昨天我们简单的介绍了如何去创建和运行一个task.如何实现task的同步执行.如何阻塞等待task集合的执行完毕等待,昨天讲的是task的最基本的知识点,如果你没有看昨天的博客, ...