RESTful风格的API接口开发 Spring Cloud

RestFul API接口 RestFul API是最近项目组开发过程中遇到的一种开发风格。本文主要介绍在日常开发过程中对于RestFul API的理解。一、RestFul API是什么?RestFul API个人认为是一种设计风格、开发风格;REST全文是:Representational State Transfer;翻译后为:表现层状态转换。是针对于前后端分离的分布式开发场景应运而生的。RestFul API提供了一种设计风格,开发风格。 阅读详情

学习笔记 大佬绕路,小白多篇文章整合总结篇

简单背景

网络程序正朝着移动设备的方向发展,前后端分离、APP,最好的交互交互方式莫过于通过API接口实现。既然要进行数据交互,那么这接口就得有讲究了:既要实用,又要优雅好看!

那么,如何写一套漂亮的API接口呢?

本次我们先了解一下Spring对API接口开发的支持,然后我们采用Spring Boot搭建项目,借用Swagger2列出API接口,便于查阅。

接口返回格式

API接口要求返回的格式是 application/json,我们知道网页返回的格式一般是 text/html,因此,Spring Boot为写接口,提供了两种实现方式:类注解 和 方法注解。

  • 类注解 @RestController

我们只需要在类上写上注解 @RestController,那么此Controller返回格式就都是text/json。

/*类注解*/
@RestController
@RequestMapping("/sdust/v1/sdcNode")
public class SdcNodeController {

    @Autowired
    private SdcNodeApp sdcNodeApp;
    ……
}
  • 方法注解 @ResponseBody

我们只需要在某个方法上写上注解 @ResponseBody,那么该方法返回格式是text/json。如下图

/*类注解*/
@Controller
@RequestMapping("/sdust/v1/sdcNode")
public class SdcLnodeController {

    @Autowired
    private SdcNodeApp sdcNodeApp;
    @RequestMapping("/lef")
    @ResponseBody
    public String getInfo() {
        return "";
    }
    ……
}

值得提醒的是,虽然都是都可以,但更推荐使用类注解,会显得我们的编码风格十分统一,代码更加紧凑,不至于看起来零散。

我们来看下 @RestController 的源码

@Controller
@ResponseBody
public @interface RestController {
……
}

请求方式源码

@RequestMapping
在``RequestMapping`的源码中提到,这种支持任意请求方式,类似于自适应。

@Mapping
public @interface RequestMapping {
……
}

@GetMapping
客户端只能用 GET 方式请求,适用于查询数据

@RequestMapping(method = RequestMethod.GET)
public @interface GetMapping{
……
}

@PostMapping
客户端只能用 POST方式请求,适用于提交数据。

@RequestMapping(method = RequestMethod.POST)
public @interface PostMapping{
……
}

@DeleteMapping
客户端只能用 DELETE方式请求,使用于删除数据。

@RequestMapping(method = RequestMethod.DELETE)
public @interface DeleteMapping{
……
}

@PutMapping
客户端只能用 PUT方式请求,使用于修改数据(但在实际使用中,我个人建议还是采用POST方式较为妥当)。

@RequestMapping(method = REquestMethod.PUT)
public @interface PutMapping{
……
}

以上请求我是在接口开发中经常使用的,图片是注解源码。当然还有其他一些。关于请求方式及使用范围,可以参考 RESTful API

接收参数

  • @RequestParam

我们来写一个示例并说明:

public String getInfo(@RequestParam(name = "param", 
                                        required = false, 
                                        defaultValue = "param dafault value") String param)

name代表提交参数名。
required意思是这个参数是否必需,默认true,没有该参数,无法调用此方法;这里设为false,有无该参数都可以调用。
defaultValue如果该参数值为空,那么就使用默认值。

  • @PathVariable
    @RequestMapping("/get-info/{param}")
    public String getInfo(@PathVariable("param") Object param)

我们可以在请求方法后面直接跟值,省去了 ?参数名= 。
这种一般配合 @DeleteMapping、@PutMapping使用。

  • @RequestHeader

这个使用了获取提交数据的 Headers 的值。我是用来接收 TOKEN。后面会举例。

数据格式

下面我们来了解下,Spring Boot 可以支持的数据格式。
我一般常用的基本数据类型有 int、String。

而我们在日常中,还可能有 Array、List、Map……

那么,Spring Boot支持吗?我们如何解决?并且统一化呢?

JSON!

毫无疑问JSON可以帮助我们解决这个问题,当然XML也是可以的。

在Controller层当中使用一些封装的方法,讲实现的内容封装到自己定义的数据结构中返回给前端就可以实现通过JSON传递数据

至于前端方面,先看 Ajax 代码:

$.ajax({
        headers : {
            Accept: "application/json; charset=utf-8",
            'token' : '9B4BF951093F1F1A40BB2DAAA30B3838'
        },
        url: URI + '/admin/blog/add',
        type: 'POST', 
        async: true,   
        data: {
            ...
        },
        timeout: 3000,   
        dataType: 'json', 
        beforeSend: function(xhr){},
        success: function(data, textStatus, jqXHR){
            console.log(data);
        },
        error: function(xhr, textStatus){
            console.log(xhr);
        },
        complete: function(){}
 })

现在的问题是如何获取 token的值?没错,就是 @RequestHeader("token")!

如果我们没在Controller,那怎么办

答案是

    String token = request.getHeader("token");
    System.out.println(token);
SpringBoot开发Restful风格的接口实现CRUD功能 实战---基于SpringBoot开发一个Restful接口,接口实现CRUD功能。 阅读详情

相关推荐

Spring Cloud OpenFeign 工作原理解析

背景 OpenFeign 是 Spring Cloud 家族的一个成员, 它最核心的作用是为 HTTP 形式的 Rest API 提供了非常简洁高效的 RPC 调用方式。 如果说 Spring Cloud 其他成员解决的是系统级别的可用性,扩展性问题, 那么 OpenFeign 解决的则是与开发人员利益最为紧密的开发效率问题。 使用方式 在介绍 ...

萧萧的专栏 2万+

SpringCloud微服务快速入门实战课程【2020版】

SpringCloud是目前流行的微服务框架,在各大互联网公司都有广泛的应用,同时在企业招聘面试时也会要求对微服务技术栈有所了解和掌握。SpringCloud是一套完整的微服务解决方案,基于SpringBoot框架。 本课程以通俗易懂的方式讲解SpringCloud技术栈,由浅入深,帮您快速入门! 课程内容包括: 1. 微服务简介 2. SpringCloud技术栈 3. Restful API简介和设计原则 4. Restful API用法 5. 使用Postman测试接口 6. 使用Swagger2生成API文档 7. Eureka注册中心 8. Feign客户端 9. Hystrix断路器 10. Zuul网关 11. Ribbon负载均衡 12. 微服务的面试题 教学全程采用笔记+代码案例的形式讲解,每个知识点都有详细的讲解,通俗易懂!!! 讲师介绍

Java必知必会系列:RESTful API与Web服务

作者:禅与计算机程序设计艺术 1.背景介绍 在互联网公司开发中,通常都会涉及到前端与后端的分离,使得开发效率得到提升。而后端向外提供各种各样的API接口,供前端调用,从而实现前后端分离开发模式,缩短了开发周期,增强了应用的可伸缩性、可用性和安全性。RESTful是一种新的Web服务标准,它定义了一组

AI天才研究院 875

API接口的RESTful设计

前言:在移动互联网、分布式和微服务盛行的今天,现在好多大点的项目都会采用的微服务框架,前后端分离方式。前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟,可以进行移动端跨平台开发,也可以通过node.js写服务端的Controller。 一般系统的大致整体架构图如下: 需要说明的是,这个架构也太简单了吧,什么网关、Redis缓存、MQ消息中间件都没有。因为这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充。 1、前后端接口交互 前端和后端进

何哥的博客 3791

【云原生】Spring Cloud Alibaba 之 Feign 远程调用 实战

分布式系统下远程调用该如何选择?RestTemplate 与 Feign,Feign是最佳选择!

wanghuichen的博客 6444

中兴FTTR光猫变简易OLT:低成本搭建全光监控与局域网实战指南

本文详细介绍了如何将中兴FTTR光猫改造为简易OLT设备,实现低成本全光监控与局域网扩展。通过LOID认证、桥接模式设置及终端数破解,用户可利用二手设备搭建高性能光纤网络,适用于远程监控和长距离组网场景,显著降低部署成本。

chair的专栏 2037

Restful API的开发

->RESTful风格在HTTP请求方法上做文章,约定。

2301_79567474的博客 1228

写一个b站爬虫(思路)

part 0 安装 scrapy, requests part 1 信息获取 打开番剧索引链接(https://www.bilibili.com/anime/index/) F12控制台,选中NETWORK,来到xhr文件,我们可以找到了存放番剧json的地方

kou的博客 485

RESTful API接口基本内容

RESTful API接口基本内容 目录 RESTful API接口基本内容 一、RESTful是什么? 1.1.基本特点 1.2.设计概念和准则 1.3.http协议 二、RESTful与SOAP WebService 架构有什么区别? 2.1.WebService 架构概念 2.2.两者对比 三、如何实现符合RESTful规范的API? 3.1.资源路径(URI) 3....

keavykk的博客 3788

从零到一:DETR模型在自定义数据集上的实战部署与调优

本文详细介绍了DETR模型在自定义数据集上的实战部署与调优过程,包括环境准备、数据转换、模型配置、训练技巧及问题排查。通过具体代码示例和实用建议,帮助开发者高效完成从零到一的DETR模型部署,特别适合目标检测领域的实践应用。

weixin_42524100的博客 463

【LaTex】LaTex的下载与安装(2025新手小白超详细、超简洁 Windows系统)

安装地点(1)texlive的安装:首先打开下载好的安装包,找到这个文件前面缺少了一页emm我去截取其他人的作为示范然后点击安装安装时间较久,大概要一个小时左右。具体要看个人电脑性能情况。如图显示如上图,则安装成功。图中是TeXstudio 4.8.7版本针对不同操作系统和使用场景的安装包 ,区别如下:(按需求下载)

爱学习的capoo的博客 5101

[Spring Cloud][4]RestTemplate 和 RESTful 详解

摘要: RestTemplate是Spring提供的同步HTTP客户端工具,遵循RESTful风格进行API调用。REST(表现层状态转移)是一种基于HTTP协议的架构风格,通过URL定位资源,并用GET/POST/PUT/DELETE方法操作资源。RESTful API强调统一接口和资源化,但实际开发中可能因复杂业务需求或兼容性问题而受限。 RestTemplate封装了HTTP连接管理,简化远程调用,但存在硬编码IP、负载均衡、URL复用性差等微服务常见问题。后续可通过Spring Cloud(如服务注

Yeeear的博客 938

景观格局指数计算方法及代表的生态学意义(待补充)

景观指数 斑块密度(PD) 斑块密度(PD)表现某种斑块在景观中的密度,可反映出景观整体的异质性与破碎度[17],公式为PD=NP/A(1)式中NP———斑块数量,个A———景观或斑块的总面积,hm2PD———斑块密度,个/hm2 最大斑块指数(LPI) 最大斑块指数(LPI)用于确定景观中的优势斑块类型,间接反映人类活动干扰的方向和大小,公式为LPI=amaxA×100%(0≤LPI≤100%)(2)式中amax———景观或某一种斑块类型中最大斑块的面积,hm2LPI———最大斑块指数,% 凝聚

soderayer的博客 13万+

Java 后端项目(基于 Spring Boot / Spring Cloud)的通用规范与配置清单

包:全小写,点分隔,分层清晰。类:大驼峰(PascalCase),名词,表达实体或功能。方法:小驼峰(camelCase),动词 + 名词,如。变量:小驼峰,名词,明确意义。常量:全大写,下划线分隔,如。枚举:类名大驼峰,枚举值全大写。接口 URL:资源名词复数,小写,使用层级。

Very_easygoing的博客 280

MLNX_OFED 5.4-3.7.5.0 驱动安装:银河麒麟V10SP2 ARM 内核升级后编译避坑 3 步

本文详细介绍了在银河麒麟V10SP2 ARM环境下安装MLNX_OFED 5.4-3.7.5.0驱动的完整流程,包括内核升级后的驱动兼容性挑战、编译环境准备、分步编译与安装流程以及性能优化与故障排查。特别针对国产化ARM服务器(如华为Atlas系列)提供了实用的解决方案和常见问题处理建议,帮助用户顺利完成mlnx网卡驱动的安装与配置。

weixin_29184075的博客 404

命名管道和匿名管道

我们知道进程间是可以通信的。可以达到数据传输、资源共享、事件通知、进程控制等目的。进程间通信主要包括管道、系统IPC,套接字等。 管道分为三种: 普通管道:一是单工,只能单向传输 ,二是仅能在父子进程或者兄弟进程中使用。 流管道:去除了第一种限制,为半双工,可以双向传递, 命名管道:去除了第二种限制 ,可以在很多并不相关的进程 中进行通信。 1、普通管道 int pipe(int f...

ffsiwei的博客 1万+

Day03-15.开发接口-测试我的学习计划接口04:28

qq_41577703的博客 32

Qt/C++编写自定义控件42-开关按钮

一、前言 从2010年进入互联网+智能手机时代以来,各种各样的APP大行其道,手机上面的APP有很多流行的元素,开关按钮个人非常喜欢,手机QQ、360卫士、金山毒霸等,都有很多开关控制一些操作,在Qt widgets应用项目上,在项目中应用些类似的开关按钮,估计也会为项目增添不少新鲜感。 总结了大部分的开关按钮控件,基本上有两大类,第一类是纯代码绘制,这种对代码的掌控度要求比较高,但是灵活性比较好...

Qt/C++视频监控/推流/物联网/大屏系统/自定义控件/UI定制/输入法 3328

微服务下基于RESTFUL风格实现统一的接口设计(JSON API)

RESTFUL JSON APIJSON API解决的问题服务架构参考文档效果展示返回单个对象返回集合对象名词解析实现步骤相关技术栈需求简述项目结构简图统一的依赖管理POMRESTFUL JSON API 项目搭建POMapplicationapplication.yml核心代码核心代码的关系图 JSON API 解决的问题 在微服务架构下,前后端分离的项目如何通过统一的数据结构进行数据交互。 服务架构 适用范围:微服务架构 + 前后端分离 参考文档 JSON API中文版 JSON API官方英文版 效果

weixin_41756573的博客 3152

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

spring cloud Restful架构

1、 Rest基础架构实现处理是spring clound核心所在,其基本的操作形式请学习SpringBoot相关知识。本次为了清晰的讲解spring clound开发,我们将创建一套新的微服务架构:(部门微服务)(Dept),我们将融合Mybatis开发技术实现整体微服务的创建处理。如果要想进行SpringCloud开发,那么一定要对SpingBoot有所了解,同事本次也将融合MyBatis开发...

Singularinty的博客 1158

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring Cloud、Spring Cloud Alibaba微服务实战

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、容错管理、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在Spring Boot的基础上轻松地实现微服务系统的构建。Spring Cloud提供以微服务为核心的分布式系统构建标准。

草原印象的博客 945

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Cloud Spring Cloud Netflix微服务实战

Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、服务治理、容错管理、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在Spring Boot的基础上轻松地实现微服务系统的构建。Spring Cloud提供以微服务为核心的分布式系统构建标准。

草原印象的博客 1082

Spring Cloud微服务架构

符合"云"理念的大趋势-Spring Clund分布式服务治理的框架

每天都要开心呀(#^.^#) 2万+

Spring-cloud项目访问Restful API 404的问题

目录结构应该如下:

忍法阡陌的博客 1235

在 Spring Cloud 中,服务间的通信有哪些方式?

在Spring Cloud中,服务间的通信方式有很多种选择,包括RESTful API、RPC、消息队列、统一消息服务和WebSocket等。不同的通信方式适用于不同的场景,开发者可以根据实际需求选择合适的通信方式。本文只是介绍了常用的几种通信方式,实际上还有其他的通信方式,例如GraphQL、WebRTC等。不同的通信方式各有优缺点,开发者需要根据具体场景进行选择和折衷。总之,Spring Cloud提供了灵活多样的服务间通信方式,可以满足各种不同的需求,帮助开发者构建可靠、高效的微服务架构。

一位努力搬砖程序员。在这里,我会分享关于编程技巧、项目实战经验以及对新技术的见解。希望通过我的文章能够帮助你在技术路上更进一步。期待与你共同学习和成长! 1459

如何解决基于 Redis 的网关鉴权导致的 RESTful API 拦截问题?

在上一遍文章《基于Redis的网关鉴权方案与性能优化》我们设计了结合Redis缓存,通过网关鉴权的方式,很大程度上提高了开发的效率,也是企业中最常见的鉴权架构方案。但是遇到RESTful风格的api,不能精细化的控制,就比如我们公司的老项目,统一采用POST请求方式,就规避了RESTful API的问题,但是新项目可不这么玩了,实际开发中哪怕我不遵循RESTful API,但是我接口是可以随便定义的,不限制任何的请求方式,那么我们的网关该如何鉴权呢?

日常分享工作中的一些技术干货。 694
上一篇: Java开发中IO流的使用以及异常的处理记录
下一篇: REST风格接口学习
rain start to pour
博客等级 码龄10年 29粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值