RESTful接口规范(带案例)

2023-11-15

 一、主要特征

以资源为基础 :Rest是web服务的一种设计思想和风格,只要符合REST原则,即为RESTful。URL只指定资源,以HTTP方法动词进行不同的操作。
统一接口: 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。换言而知,使用RESTful风格的接口但从接口上你可能只能定位其资源,但是无法知晓它具体进行了什么操作,需要具体了解其发生了什么操作动作要从其HTTP请求方法类型上进行判断。具体的HTTP方法和方法含义如下:

  • GET(SELECT):从服务器取出资源(一项或多项)。
  • POST(CREATE):在服务器新建一个资源。
  • PUT(UPDATE):在服务器更新资源(客户端提供完整资源数据)。
  • PATCH(UPDATE):在服务器更新资源(客户端提供需要修改的资源数据)。
  • DELETE(DELETE):从服务器删除资源。

URI指向资源:URI = Universal Resource Identifier 统一资源标志符,用来标识抽象或物理资源的一个紧凑字符串。URI包括URL和URN,在这里更多时候可能代指URL(统一资源定位符)。RESTful是面向资源的,每种资源可能由一个或多个URI对应,但一个URI只指向一种资源。

无状态:服务器不能保存客户端的信息, 每一次从客户端发送的请求中,要包含所有必须的状态信息,会话信息由客户端保存, 服务器端根据这些状态信息来处理请求。 当客户端可以切换到一个新状态的时候发送请求信息, 当一个或者多个请求被发送之后, 客户端就处于一个状态变迁过程中。 每一个应用的状态描述可以被客户端用来初始化下一次的状态变迁。

二、RESTful URL设计规范

URL为统一资源定位器 ,接口属于服务端资源,首先要通过URL这个定位到资源才能去访问,而通常一个完整的URL组成由以下几个部分构成:

URI = scheme "://" host  ":"  port "/" path [ "?" query ][ "#" fragment ]

scheme: 指底层用的协议,如http、https、ftp
host: 服务器的IP地址或者域名
port: 端口,http默认为80端口
path: 访问资源的路径,就是各种web 框架中定义的route路由
query: 查询字符串,为发送给服务器的参数,在这里更多发送数据分页、排序等参数。
fragment: 锚点,定位到页面的资源

从大体样式了解URL路径组成之后,对于RESTful API的URL具体设计的规范如下:

  1. 不用大写字母,所有单词使用英文且小写。
  2. 连字符用中杠"-"而不用下杠"_"
  3. 正确使用 "/"表示层级关系,URL的层级不要过深,并且越靠前的层级应该相对越稳定
  4. 结尾不要包含正斜杠分隔符"/"
  5. URL中不出现动词,用请求方式表示动作
  6. 资源表示用复数不要用单数
  7. 不要使用文件扩展名

三、案例

对应的Mapper文件为:

package com.restfuldemo.mapper;

import com.restfuldemo.pojo.Dog;
import org.apache.ibatis.annotations.*;
import java.util.List;

@Mapper
public interface DogMapper {

    @Select("select * from dog")
    List<Dog> getAllDog();

    @Select("select * from dog where id=#{id}")
    Dog getDogById(@Param("id") int id);

    @Insert("insert into dog (name,age) values (#{name},#{age})")
    boolean addDog(Dog dog);

    @Update("update dog set name=#{name},age=#{age} where id=#{id}")
    boolean updateDog(Dog dog);

    @Delete("delete  from dog where id=#{id}")
    boolean deleteDogById(int id);
}

对应controller文件为:

package com.restfuldemo.controller;

import com.restfuldemo.mapper.DogMapper;
import com.restfuldemo.pojo.Dog;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Arrays;
import java.util.List;

@RestController
public class TestController {

    @Autowired(required = false)
    DogMapper dogMapper;

    @GetMapping("dogs")
    public List<Dog> getDogs()
    {
        return  dogMapper.getAllDog();
    }

    @GetMapping("dogs/{id}")
    public Dog getDogById(@PathVariable("id") int id)
    {
        Dog dog=dogMapper.getDogById(id);
        return  dog;
    }
    @PostMapping("dogs")
    public boolean addDog(Dog dog)
    {
        return dogMapper.addDog(dog);
    }
    @PutMapping("dogs/{id}")
    public boolean updateDog(@PathVariable("id")int id,@RequestParam("name")String name,@RequestParam("age")int age)
    {

        Dog dog=dogMapper.getDogById(id);
        dog.setName(name);
        dog.setAge(age);
        return  dogMapper.updateDog(dog);
    }

    @DeleteMapping("dogs/{id}")
    public boolean deleteDog(@PathVariable("id") int id)
    {
        return  dogMapper.deleteDogById(id);
    }
}

@RestController = @Controller + @ResponseBody

使用@Controller 注解,在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。

若返回json等内容到页面,则需要加@ResponseBody注解。

使用@RestController这个注解,返回json,视图解析器无法解析jsp,html页面。

@PathVariable(路径变量)

总结

RESTful风格的API 固然很好很规范,但大多数互联网公司并没有按照或者完全按照其规则来设计,因为REST是一种风格,而不是一种约束或规则,过于理想的RESTful API 会付出太多的成本。

比如RESTful API也有一些缺点

  • 比如操作方式繁琐,RESTful API通常根据GET、POST、PUT、DELETE 来区分操作资源的动作,而HTTP Method 本身不可直接见,是隐藏的,而如果将动作放到URL的path上反而清晰可见,更利于团队的理解和交流。
  • 并且有些浏览器对GET,POST之外的请求支持不太友好,还需要特殊额外的处理。
  • 过分强调资源,而实际业务API可能有各种需求比较复杂,单单使用资源的增删改查可能并不能有效满足使用需求,强行使用RESTful风格API只会增加开发难度和成本。

所以,当你或你们的技术团队在设计API的时候,如果使用场景和REST风格很匹配,那么你们可以采用RESTful 风格API。但是如果业务需求和RESTful风格API不太匹配或者很麻烦,那也可以不用RESTful风格API或者可以借鉴一下,毕竟无论那种风格的API都是为了方便团队开发、协商以及管理,不能墨守成规。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RESTful接口规范(带案例) 的相关文章

  • centos开放端口号的常用命令

    1 开放端口 firewall cmd zone public add port 5672 tcp permanent 开放5672端口 firewall cmd zone public remove port 5672 tcp perma
  • swagger接口需要权限验证解决方案

    目录 背景 解决方案 背景 当我们在使用s w a g g e r的情况下 经常会遇到需要授权或者请求带有token才可以访问接口 这里我们就是解决授权问题 解决方案 废话不多说 我们直接给出解决方案 具体代码如下 import org s
  • get/post请求常见content-type种类

    HTTP 请求分为三个部分 状态行 请求头 消息主体 在HTTP协议的消息头中 通常使用Content Type来表示传值的内容的格式 服务端根据Content Type字段对获取消息主体的编码方式对消息解析 get 方法中 通过param
  • Node.js到底是个啥?干什么用的?优缺点是什么?

    Nodejs简介 Node js是一个Javascript运行环境 runtime 是一个可以快速构建网络服务及应用的平台 是用Javascript语言构建的服务平台 可用于后端建立服务器 Node js与Javascript的区别 nod
  • springsecurity登录后返回token字符串和刷新token代码实例

    文章目录 1 登录接口 登陆成功则返回token 2 登录方法 3 刷新token的接口 4 生成token和刷新token的工具类 1 登录接口 登陆成功则返回token yml文件 jwt tokenHeader Authorizati
  • HTTP请求中的传参方式form data、 request payload、query string parameters三者对比

    目录 一 GET请求 Query String Parameters 二 POST请求 2 1 FormData 2 2 Request Payload 补充 Post请求总结 HTTP请求中不同的请求方式和设置不同的Content Typ
  • FeignClient带文件多对象传参

    生产者 ApiOperation value 切块上传 notes 切块上传 PostMapping uploadChunk public Result uploadChunk HttpServletRequest request Chun
  • 【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

    restful是web编程里重要的概念 一种接口规范也是一种接口设计风格 设计接口 要考虑 数据返回 接收数据的方式 url 方法 统一风格 rest 表现层状态转移 web 每一类数据 资源 资源通过http的动作来实现状态转移 GET
  • HTTP的请求方式有哪些?

    一 GET方法 最常用的方法 它是发送一个请求来获取服务器上的资源 资源通过HTTP响应头和数据 如html文档 图片 样式 视频等 返回给客户端 如浏览器 二 POST方法 常用方法 用于向服务器提交数据 请求的参数要在请求体 body
  • flowable实战(三):关于流程图编辑

    发现很多人讲到flowable 就是大概讲一下整合里面一些名词之类 实操偏少 或者用一个小demo演示一下 就完了 但是一涉及到具体的业务 你会发现涉及到工作流要有多麻烦 考虑很多情况进去会涉及到条件设置 逻辑判断甚至官方提供的那么多方法你
  • 记一次Swagger页面报错/error 404的排查过程

    记一次Swagger页面报错 error 404的排查过程 使用springfox swagger ui展示的页面如下 Maven引用 使用springfox swagger ui展示的页面如下 说是没有为 error这个路径指明确定的映射
  • Java8 函数式编程

    函数式编程 这里 函数 应该理解为数学上的函数 即y f x 函数式编程的理解出发点 比如给Swing中Button添加监听器addListener Listener接口 为例 没有lambda表达式时一般都是通过匿名内部类new XXXL
  • 计算机网络八股文

    浏览器输入一个网站后 具体发生了什么 进行DNS解析操作 根据DNS解析结果查找到服务器IP地址 通过IP寻址找到服务器 并利用三次握手建立TCP连接 浏览器生成HTTP保温 发送HTTP请求 等待服务器响应 服务器处理请求 返回服务器 根
  • 关于path用变量的问题思考

    1 用go解析路由时 中间件里相对路由做统一处理 或者是对于一组路由做处理 只能挨个正则去匹配 要不就多写代码 侵入业务 2 路由不可读 命名再不规范的话 抓包也痛苦 需要看代码才能理解这个接口是做什么的 和前端对接口时 前端 接口名字是什
  • Restful风格详解

    SpringMVC Restful风格及实例 参数的转换 一 Restful风格 1 Restful风格的介绍 Restful 一种软件架构风格 设计风格 而不是标准 只是提供了一组设计原则和约束条件 它主要用于客户端和服务器交互类的软件
  • JAVA实现大文件多线程下载,提速30倍!(提供exe版)

    JAVA实现大文件多线程下载 提速30倍 前言 兄弟们看到这个标题可能会觉得是个标题党 为了解决疑虑 我们先来看下最终的测试结果 测试云盘下载的文件 46M 自己本地最大下载速度 2M 1 单线程下载 总耗时 603s 2 多线程下载 50
  • .Net Core中间件

    目录 一 什么是中间件 二 中间件的用途 三 中间件的三个概念 四 自定义中间件 五 ASP NET Core附带中间件组件 六 中间件和过滤器的区别 一 什么是中间件 在浏览网站或者使用手机App加载内容的时候 浏览器或者手机App其实在
  • 前后端交互---URL

    一 Url地址 1 url地址的概念 URL 全称是UniformResourceLocator 中文叫统一资源定位符 用于标识互联网上每个资源的唯一存放位置 浏览器只有通过URL地址 才能正确定位资源的存放位置 从而成功访问到对应的资源
  • SpringMVC注解

    注解大全 请求注解 名称 类型 位置 作用 注意点 RequestMapping save 方法注解 SpringMVC控制器方法定义上方 设置当前控制器方法请求访问路径 如果设置在类上统一设置当前控制器方法请求访问路径前缀 路径不能重复
  • Django REST framework框架,前后端分离

    介绍 Web应用前后端分离结构 Web API接口设计的RESTful风格 Django REST framework框架 1 引入Django REST framework 在本章中 我们要大家介绍为什么学习Django REST fra

随机推荐

  • 基于Prometheus的node_exporter源码编译和二次开发

    首先从GitHub上拉取node exporter源码 go get github com prometheus node exporter 在拉取过程中一般会出错 主要是由于golang官网被墙导致golang的有些工具库拉取不下来 如果
  • 【IntelliJ IDEA】编码设置终极版

    近期 团队多个小伙伴咨询 IntelliJ IDEA 乱码问题 记录一下IDEA常用的4种编码设置 一 IDEA配置文件范围 IDEA的配置有两个范围 如下图 Settings 设置当前工程配置 New Projects Settings
  • Docker安装redis并以配置文件方式启动

    关于docker安装redis 网上有各种教程 大家可自行安装 写这篇文章的目的是关于以配置文件挂载的方式启动失败的总结 一 Docker安装Redis redis版本 Redis 6 2 6 安装过程中所使用的redis版本 请自行确认
  • 标志位寄存器与CF、OF标志位的区分

    8086CPU的flag寄存器 16位 各标志位如下 这是32位EFLAG的低十六位图 但是32位与16位是一样的 只不过32位多了16位且高16位没有使用到 标志位寄存器中保存的是当前指令运算的信息状态 比如进位信息保存在CF标志位 注意
  • 微信小程序调试过程中页面加载不出来

    实习进入公司微信小程序第一个项目在调试过程中发现页面加载不出来 问题显示 module components form box date miniprogram computed js is not defined 百度搜索了一下 看到社区
  • Mongodb数据库初识

    Mongodb数据库初识 一 什么是数据库 1 标准定义 2 数据库的概念 3 数据库的简单理解 4 使用数据库的原因 普通文件系统存储大量数据的问题 数据库的高效性 二 数据库的分类 1 关系型数据库 关系型数据库定义 关系型数据库的软件
  • 1030 完美数列 (25 分)

    题目 题目链接 题解 思维 从小到大排序后 从左开始选取一个数作为 m m m 二分选取右边的数作为 M M M 时间复杂度 O
  • 计算方法——C语言实现——全主元高斯消元法求解非线性方程

    最近在上计算方法这门课 要求是用MATLAB做练习题 但是我觉得C语言也很棒棒啊 题目 高斯消元法是线性方程组的直接解法 可能会造成很大的失真 尤其是高斯顺序消元法 对方法进行改进 使每次都选取绝对值最大的元素为主元 使其为乘数的分母 控制
  • MySQL安装配置教程-win10

    一 下载MySQL Mysql官网下载地址 https downloads mysql com archives installer 选择想要安装的版本进行下载 我这是使用的是5 6 21 二 安装MySQL 选择设置类型 双击运行mysq
  • 使用flask开启一个简单的应用

    Flask是非常流行的 Python Web框架 它能如此流行 原因主要有如下几点 有非常齐全的官方文档 上手非常方便 有非常好的扩展机制和第三方扩展环境 工作中常见的软件都会有对应的扩展 自己动手实现扩展也很容易 社区活跃度非常高 微框架
  • 数据分析 —— 数据挖掘是什么、能干嘛、怎么做

    数据分析 数据挖掘 什么是数据挖掘 数据挖掘 用于寻找数据中隐含的知识 并用于产生商业价值的一种手段 为什么要做数据挖掘 技术和商业就像一对双生子 在互相促进中不断演进发展 随之而来的就是个大公司的业务的突飞猛进 也涌现出很多的新模式 使得
  • MSYS2 如何切换镜像源(附带脚本自动修改)

    这篇文章将总结 如何切换MSYS2镜像 其实比较简单 但还是记录一下吧 下面示例中附带一个脚本 这样你就不用一个个手动修改了 1 镜像服务配置文件 MSYS2 的所有镜像服务配置 都在其安装路径下的etc pacman d目录下 可以看到
  • SpringBoot设置和读取配置文件(1)

    SpringBoot配置文件是用来保存SpringBoot项目当中所有重要的数据的 比如说数据库连接信息 数据库的启动端口 如果端口被占用了 那么就可以随时修改 1 比如说我们之前再写JDBC的代码的时候 要去写链接字符串 用户名密码 之前
  • 进化计算-遗传算法之史上最全选择策略

    获取更多资讯 赶快关注上面的公众号吧 文章目录 第十九章 遗传算法 史上最全选择策略 19 1 轮盘赌选择 Roulette wheel selection 19 2 锦标赛选择 Tournament selection 19 3 截断选择
  • 研究B站个人收藏中已失效的视频

    扩展阅读 b站收藏的已经失效视频怎么才能继续看到呢 话说B站被删的视频还有机会恢复吗 还有该网址内容存在未知风险这种操作的么 研究B站已失效的视频 目录 1 前言说明 2 获取和研究网页源代码 3 获取和研究 JSON 文件 4 其他途径的
  • java的示例题3

    前言 整理一部分java的示例题型 在线编译 入口 java的System out println与System out print 浩星 CSDN博客前言 java基础知识之System out println System out pr
  • Python爬虫进阶——Scrapy框架原理及分布式爬虫构建

    1 Scrapy简介 1 1 概念 Scrapy是由Python语言开发的一个快速 高层次的屏幕抓取和web信息抓取框架 用于抓取web站点并从页面中提取结构化的数据 Scrapy用途广泛 可以用于数据挖掘 监测和自动化测试 Scrapy还
  • Ubuntu yolov5 环境配置

    查看Ubuntu版本 cat proc version Linux version 5 4 0 150 generic buildd bos03 amd64 012 gcc version 7 5 0 Ubuntu 7 5 0 3ubunt
  • git submodule的使用

    Git 工具的 submodule 功能就是建立了当前项目与子模块之间的依赖关系 子模块路径 子模块的远程仓库 子模块的版本号 添加submodule git submodule add
  • RESTful接口规范(带案例)

    一 主要特征 以资源为基础 Rest是web服务的一种设计思想和风格 只要符合REST原则 即为RESTful URL只指定资源 以HTTP方法动词进行不同的操作 统一接口 对资源的操作包括获取 创建 修改和删除 这些操作正好对应HTTP协