如何设计一个优雅的RESTFUL的接口

一 、引入

设计接口是我们开发人员的日常操作。当我们把接口交给前端人员时,是否有种拔剑出鞘的错觉。毕竟交付接口,我们的开发工作就阶段性完成了。不过,如果我们没有一个接口设计规范的时候,结果会怎样呢?我们来张图感受一下。

二、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 "删除一个列表";
    }
}

原文地址:https://blog.51cto.com/14230003/2470879

时间: 2024-11-05 23:29:51

如何设计一个优雅的RESTFUL的接口的相关文章

【Java&Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

Spring Boot 2.x (十):构建优雅的RESTful接口

RESTful 相信在座的各位对于RESTful都是略有耳闻,那么RESTful到底是什么呢? REST(Representational State Transfer)表述性状态转移是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是RESTful.需要注意的是,REST是设计风格而不是标准.REST通常基于使用HTTP,URI,和XML(标准通用标记语言下的一个子集)以及HTML(标准通用标记语言下的一个应用)这些现有的广泛流行的协议和标准. 也许这段话有些晦涩难懂,换个角度

Swift是一个提供RESTful HTTP接口的对象存储系统

Swift是一个提供RESTful HTTP接口的对象存储系统,最初起源于Rackspace的Cloud Files,目的是为了提供一个和AWS S3竞争的服务. Swift于2010年开源,是OpenStack最初的两个项目之一.然而,在国内OpenStack圈里,不太能够听到关于Swift的声音,究其原因正如本系列的第一篇<文件系统vs对象存储——选型和趋势>)中所说的,RESTful HTTP接口的对象存储,主要为互联网应用服务,而OpenStack厂商最关心的传统行业的用户目前能够应用

如何正确合理的设计一个接口项目

时间:2013-10-08 11:43 来源:wangpeng047 作者:wangpeng047 首先,我这里说明接口,不是代码里的接口,而是接口项目,如果想错了就不用往下看了. 在手机广泛流行的今天,手机应用也随之越来越多,而且成长的速度也非常快.手机应用软件开发实现方式同普通PC软件一样,也分为BS和CS方式.而采用CS方式,在服务器端大多采用接口的形式提供数据交互(主流数据交互方式有:Json.WebService等),今天要说的就是如何设计接口. 接口作为连通客户端与数据库进行数据流通

如何设计一个良好的接口

在设计接口时,有很多因素要考虑,如接口的业务定位,接口的安全性,接口的可扩展性.接口的稳定性.接口的跨域性.接口的协议规则.接口的路径规则.接口单一原则. 接口过滤和接口组合等诸多因素,本篇文章将简要分析这些因素. 一 规范性建议 1.职责原则 在设计接口时,必须明确接口的职责,即接口类型,接口应解决什么业务问题等 2.单一性原则 在明确接口职责的条件下,尽量做到接口单一,即一个接口只做一件事,而非两件以上.很多非资深接口设计者,在设计接口时, 总认为接口所做的事越多,越牛叉,这是非常严重的错误

Java面试常问题:如何设计一个高并发系统?你该如何优雅的回答

面试原题 如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了.为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先. 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题.面试官也绝对不会这样来问你,否则他就是蠢. 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万.那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部

转:RESTful API接口设计标准及规范

引自:RESTful API接口设计标准及规范 RESTful发展背景及简介网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备…).因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致API构架的流行,甚至出现"APIFirst"的设计思想.RESTful API是目前比较成熟的一套互联网应用程序的API设计理论. REST(Representational State Transfer)表述性状态转换,RES

造轮子 | 怎样设计一个面向协议的 iOS 网络请求库

近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有例如以下几个: 怎样在任何位置发起网络请求. 表单创建. 包括请求地址.请求方式(GET/POST/--).请求头等-- 载入遮罩. 目的是堵塞 UI 交互,同一时候告知用户操作正在进行. 比方提交表单时在提交按钮上显示 "菊花",同一时候使其失效. 载入进度

造轮子 | 如何设计一个面向协议的 iOS 网络请求库

最近开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 需要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有如下几个: 如何在任意位置发起网络请求. 表单创建.包含请求地址.请求方式(GET/POST/--).请求头等-- 加载遮罩.目的是阻塞 UI 交互,同时告知用户操作正在进行.比如提交表单时在提交按钮上显示 "菊花",同时使其失效. 加载进度展示.下载上传图片