console.lo|

JayZzz

园龄:2年10个月粉丝:1关注:0

Restful风格

Restful

1.REST架构的主要原则

1.1 对网络上所有的资源都有一个资源标志符
1.2 对资源的操作不会改变标识符
1.3 同一资源有多种表现形式(xml、json)、
1.4 所有操作都是无状态的(Stateless)

符合上述REST原则的架构方式称为Restful

2.URI和URL区别

URI:http://example.com/users/
URL:http://example.com/users/{user} (one for each user)

2.1.什么是无状态性

​ 使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前的请求,不需了解请求的历史。可以更容易的释放资源,让服务器利用Pool(连接池)技术来提高稳定性和性能。

3.Restful操作

RESTful是一种常见的REST应用,是遵循REST风格的web服务,REST式的web服务是一种ROA(面向资源的架构)。更加安全!!

http方法 资源操作 幂等 安全
GET SELECT
POST INSERT
PUT UPDATE
DELETE DELETE

注:幂等性:对同一REST接口的多次访问,得到的资源状态是相同的。

​ 安全性:对该REST接口访问,不会使服务器端资源的状态发生改变。

3.1接口示例

传统URL请求格式:
http:/127.0.0.1/test/query/2 http:/127.0.0.1/test/query?id=1 GET 根据用户id查询用户数据

http:/127.0.0.1/test/save POST 新增用户

http:/127.0.0.1/test/update POST 修改用户信息

http:/127.0.0.1/test/delete GET/POST 删除用户信息

RESTful请求格式:
http:/127.0.0.1/test/1 GET 根据用户id查询用户数据

http:/127.0.0.1/test POST 新增用户

http:/127.0.0.1/test PUT 修改用户信息

http:/127.0.0.1/test/1 DELETE 删除用户信息

4.Http状态码

4.1一般情况:

200:请求响应成功 200

3xx:请求重定向 重定向:你重新到我给你新位置去;

4xx:找不到资源 404 资源不存在;

5xx:服务器代码错误 500 502:网关错误

4.2具体情况:

HttpStatus = {
//Informational 1xx 信息
'100' : 'Continue', //继续
'101' : 'Switching Protocols', //交换协议
//Successful 2xx 成功
'200' : 'OK', //OK
'201' : 'Created', //创建
'202' : 'Accepted', //已接受
'203' : 'Non-Authoritative Information', //非权威信息
'204' : 'No Content', //成功,但没有内容
'205' : 'Reset Content', //重置内容
'206' : 'Partial Content', //部分内容
//Redirection 3xx 重定向
'300' : 'Multiple Choices', //多种选择
'301' : 'Moved Permanently', //永久移动
'302' : 'Found', //找到
'303' : 'See Other', //参见其他
'304' : 'Not Modified', //未修改
'305' : 'Use Proxy', //使用代理
'306' : 'Unused', //未使用
'307' : 'Temporary Redirect', //暂时重定向
//Client Error 4xx 客户端错误
'400' : 'Bad Request', //错误的请求
'401' : 'Unauthorized', //未经授权
'402' : 'Payment Required', //付费请求
'403' : 'Forbidden', //禁止
'404' : 'Not Found', //没有找到
'405' : 'Method Not Allowed', //方法不允许
'406' : 'Not Acceptable', //不可接受
'407' : 'Proxy Authentication Required', //需要代理身份验证
'408' : 'Request Timeout', //请求超时
'409' : 'Conflict', //指令冲突
'410' : 'Gone', //文档永久地离开了指定的位置
'411' : 'Length Required', //需要Content-Length头请求
'412' : 'Precondition Failed', //前提条件失败
'413' : 'Request Entity Too Large', //请求实体太大
'414' : 'Request-URI Too Long', //请求URI太长
'415' : 'Unsupported Media Type', //不支持的媒体类型
'416' : 'Requested Range Not Satisfiable', //请求的范围不可满足
'417' : 'Expectation Failed', //期望失败
//Server Error 5xx 服务器错误
'500' : 'Internal Server Error', //内部服务器错误
'501' : 'Not Implemented', //未实现
'502' : 'Bad Gateway', //错误的网关
'503' : 'Service Unavailable', //服务不可用
'504' : 'Gateway Timeout', //网关超时
'505' : 'HTTP Version Not Supported' //HTTP版本不支持
};

5.测试

@Controller
public class RestFulController {
//映射访问路径
@RequestMapping("/commit/{p1}/{p2}")
//在SpringMVC中可以使用 @PathVariable,让方法参数的值对应绑定到一个URI变量上
public ModelAndView index(@PathVariable int p1, @PathVariable int p2, ModelAndView mv){
int result = p1 + p2;
//实例化一个ModelAndView对象用于向视图中传值
mv.addObject("msg","结果:" + result);
//返回视图
mv.setViewName("test");
return mv;
}
}

也可以使用method属性指定类型

@RequestMapping(value = "/hello",method = {RequestMethod.POST})
public String index2(Model model){
model.addAttribute("msg", "hello!");
return "test";
}

但浏览器地址栏进行访问是通过GET方式进行的 ,我们定义的是POST方法-所以报错不匹配

改为GET

@RequestMapping(value = "/hello",method = {RequestMethod.GET})
//我们一般采用这种方式:@GetMapping("/hello")
public String index2(Model model){
model.addAttribute("msg", "hello!");
return "test";
}

我们可以看到Method 方式太长,不方便,我们可以用延伸的方法

@GetMapping:扮演的是@RequestMapping(method =RequestMethod.GET) 的快捷方式。
@PostMapping (method =RequestMethod.GET)
@PutMapping (method =RequestMethod.POST)
@DeleteMapping (method =RequestMethod.DELETE)
@PatchMapping (method =RequestMethod.PATCH)

如:

如果是地址栏输入(GET)可以调用 index方法:
@GetMapping("/commit/{p1}/{p2}")
//在SpringMVC中可以使用 @PathVariable,让方法参数的值对应绑定到一个URI变量上
public ModelAndView index(@PathVariable int p1, @PathVariable int p2, ModelAndView mv){
int result = p1 + p2;
//实例化一个ModelAndView对象用于向视图中传值
mv.addObject("msg","结果1:" + result);
//返回视图
mv.setViewName("test");
return mv;
}
如果前端页面form表单 method为POST,则调用index2方法
@PostMapping("/commit/{p1}/{p2}")
//在SpringMVC中可以使用 @PathVariable,让方法参数的值对应绑定到一个URI变量上
public ModelAndView index2(@PathVariable int p1, @PathVariable int p2, ModelAndView mv){
int result = p1 + p2;
//实例化一个ModelAndView对象用于向视图中传值
mv.addObject("msg","结果2:" + result);
//返回视图
mv.setViewName("test");
return mv;
}

本文作者:JayZzz

本文链接:https://www.cnblogs.com/JayZzzWh/p/16602501.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   JayZzz  阅读(113)  评论(1编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 阴天快乐 yihuik苡慧
  2. 2 依然爱你 yihuik苡慧
  3. 3 1 AM thomeboydontkill
  4. 4 我发现你 Fine乐团
  5. 5 胡言乱语 Fine乐团
  6. 6 回答 YOUNG
  7. 7 告诉你我多想你 王子明,杀不死Subs
  8. 8 Busy Body Claire Ridgely
  9. 9 不值得你喜欢 王子明,7copy,WYAN王毓千
  10. 10 Admiration T.Yee,奚缘
  11. 11 Letting Go 刘大拿
  12. 12 Lover Boy 88 Higher Brothers,Phum Viphurit
  13. 13 暴风雨 Higher Brothers,HARIKIRI
  14. 14 Diamond Higher Brothers
1 AM - thomeboydontkill
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : thomeboydontkill

作曲 : thomeboydontkill

编曲 : eeryskies.

制作人 : thomeboydontkill

录音 : CSNV stuido

混音 : 谭玉堂

母带 : 张步若

我并不完美

我需要爱

在我拥有你的时间

我只想你在

不再胡思乱想

自己到底特不特别

甜蜜的话语

OK

我承认

我确实着迷不浅

就像是

大雁盼着春风

我盼着和你见面

有时会控制不住的想你

我早已习惯了等

我想把我的爱

封存在想你的一点整

所有代价我都不计

就当我在发疯

生活带给我的泥泞

有你全被冲刷

你像个童话

出现在我身边

治愈我的痛啊

确实很过分

我想要占有你

你的每一寸肌肤

都把我给迷住

我承认

我想要被你看作做最好的那个

太过在意面子不愿说出口

毋庸置疑我已深陷这其中

你是否和我一样

喜欢你说话的方式

如果有能让时间穿越的装置

我不会希望我们更早的相遇

我会穿越到有我们的未来

一起经历那些所谓的hard times

为了你我不会被现实打败

让你坚信你就是我的最爱

你给我的吻成就了最好7月

你是我的唯一我希望你能理解

只需要相信我 dont give a thought about wat he said

你是我的天使我来成为你的羽翼

有时会控制不住的想你

我早已习惯了等

我想把我的爱

封存在想你的一点整

所有代价我都不计

就当我在发疯

生活带给我的泥泞

有你全被冲刷

你像个童话

Baby,我想要占有你

想要占有你

我想要占有你

我想要占有你

我想要占有

OP:成都菲乐普文化传媒有限公司

SP:亚洲华纳(北京)音乐娱乐咨询有限公司

版权声明:未经著作权人书面许可,任何人不得以任何方式使用(包括翻唱、翻录等形式)