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接口规范(带案例) 的相关文章

  • 【技术分享】Lombok!代码简洁神器还是代码“亚健康”元凶?

    如果您正在阅读此文 想必您对Project Lombok已经有了一段时间的了解 您是否正准备拥抱Lombok 还是正准备将如此酷炫的项目推荐给你的团队 如果您准备那么做 不妨听听我在使用Lombok一年后的一些感受 我承认 Lombok是一
  • centos开放端口号的常用命令

    1 开放端口 firewall cmd zone public add port 5672 tcp permanent 开放5672端口 firewall cmd zone public remove port 5672 tcp perma
  • SpringBoot在一定时间内限制接口请求次数-接口防刷拦截

    前一篇文字写了springboot的注册登录接口 并且这两个接口是开放的 特别是注册接口为了防止恶意注册 需要设置拦截 需要用到的知识 注解 AOP ExpiringMap 带有有效期的映射 需要自定义注解 把注解添加到我们的接口上 定义一
  • 【自学开发之旅】Flask-restful-Jinjia页面编写template-回顾(五)

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

    import org slf4j Logger import org slf4j LoggerFactory import java io BufferedReader import java io DataOutputStream imp
  • Swagger

    第一节 Swagger 简介 1 企业开发所面临的问题 在前后端分离开发的情况下 前端开发人员经常抱怨后端开发人员给的接口文档与实际情况不一致 后端开发人员觉得编写接口文档太过于消耗精力 而且更新也不及时 以至于前后端开发人员经常出现争吵的
  • HTTP的请求方式有哪些?

    一 GET方法 最常用的方法 它是发送一个请求来获取服务器上的资源 资源通过HTTP响应头和数据 如html文档 图片 样式 视频等 返回给客户端 如浏览器 二 POST方法 常用方法 用于向服务器提交数据 请求的参数要在请求体 body
  • 详解 ElasticSearch Kibana 配置部署

    默认安装部署所在机器允许外网 SSH工具 Putty 链接 https pan baidu com s 1b6gumtsjL L64rEsOdhd4A 提取码 lxs9 Winscp 链接 https pan baidu com s 1tD
  • CaffeineCache基本使用 & SpringBoot集成缓存

    文章目录 一 常用API 1 get 2 getAll 3 refresh 二 缓存回收 清除 1 显式回收 2 隐式回收 2 1 基于容量 2 2 基于时间 2 3 基于引用 2 4 基于权重 三 刷新缓存 reload 四 监听器 五
  • Django rest_framework开发一组RESTFUL标准接口[ModelSerializer+GenericAPIView]

    Django rest framework开发一组RESTFUL标准接口 ModelSerializer GenericAPIView 不管何等复杂的业务逻辑 不管何等高效的开发框架 对后端来说最终都要落到对具体的某一个关系模型的增删改查上
  • Java8 函数式编程

    函数式编程 这里 函数 应该理解为数学上的函数 即y f x 函数式编程的理解出发点 比如给Swing中Button添加监听器addListener Listener接口 为例 没有lambda表达式时一般都是通过匿名内部类new XXXL
  • 【Spring Boot】详解restful api

    目录 1 restful api 1 1 历史 1 2 内容 1 3 传参 2 Spring Boot中的Restful Api 1 restful api 1 1 历史 RESTful API Representational State
  • @RequestHeader注解详解

    SpringMVC提供了 RequestHeader注解 可以将请求头中变量值映射到控制器的参数中 如下例子 将请求头中的变量值token映射到控制器参数token中 GetMapping checkUserLoginInfo public
  • 自定义实现OAuth2.0 授权码模式

    文章目录 OAuth2 0 授权码模式 实践 依赖知识 术语 授权码流程 认证服务器 拉起请求用户授权页面 用户手动授权 提交授权 生成code 下发Token 第三方应用 收到code并请求Token 访问受保护的资源 项目结构 Tomc
  • JAVA实现大文件多线程下载,提速30倍!(提供exe版)

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

    Charles是通过将自己设置成系统的网络访问代理服务器 使得所有的网络访问请求都通过它来完成 从而实现了网络封包的截取和分析 安装Charles 去 Charles 的官方网站 http www charlesproxy com 下载最新
  • Git首次提交代码到仓库步骤(资料)

    第一步 登陆码云 第二步 创建一个 新的项目 第三步 创建成功后到这个页面 Git 全局设置 git config global user name 意米 git config global user email 142453222851
  • SpringMVC注解

    注解大全 请求注解 名称 类型 位置 作用 注意点 RequestMapping save 方法注解 SpringMVC控制器方法定义上方 设置当前控制器方法请求访问路径 如果设置在类上统一设置当前控制器方法请求访问路径前缀 路径不能重复
  • 解释 RESTful API,以及如何使用它构建 web 应用程序

    RESTful API stands for Representational State Transfer Application Programming Interface It is a set of principles and g
  • API架构的选择,RESTful、GraphQL还是gRPC

    文章目录 一 RESTful 1 什么是RESTful 2 RESTful架构的原则 3 RESTful的适用场景 4 RESTful的优点 5 RESTful的缺点 二 GraphQL 1 什么是GraphQL 2 GraphQL的原则

随机推荐

  • 基于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协