首页 > 编程语言 >RESTful编程风格

RESTful编程风格

时间:2024-07-04 17:08:59浏览次数:15  
标签:users 编程 URI 风格 PUT RESTful id 资源

1、RESTFul是什么?

RESTFul是WEB服务接口的一种设计风格。RESTFul定义了一组约束条件和规范,可以让WEB服务接口更加简洁、易于理解、易于扩展、安全可靠。在之前简单的讲解了一下RequestMapping注解结合占位符,结合RESTful风格编程是如何获取数据的。接下来我们将简单简介一下RESTful的一些内容。


2、RESTful对WEB服务接口的规范

RESTful对web接口的uri和请求方式还有响应码都做了规范

对请求方式的规范:

  • GET - 用于检索资源的信息。例如,获取一个用户的信息。
  • POST - 用于创建新的资源。例如,添加一个新的用户。
  • PUT - 用于更新现有的资源。PUT通常要求完整地替换资源,而不是仅更新部分属性。
  • PATCH - 用于局部更新资源。与PUT不同,PATCH只更新提供的属性。
  • DELETE - 用于删除资源。

对请求uri的规范:
RESTful架构中的URI(Uniform Resource Identifier)设计是其核心组件之一,它遵循以下一些关键规范和最佳实践:

  • 资源导向:

    • URI 应该以资源为中心,而不是以动作或过程为中心。这意味着URI应该代表实体或者资源,而动作则通过HTTP方法(如GET, POST, PUT, DELETE)来表达。
  • 使用名词而非动词

    • URI 中应该避免使用动词,因为动词由HTTP方法来承担。例如,/users 而不是 /getUsers
  • 资源的唯一标识:

    • 每个资源应该有一个唯一的URI。例如,单个用户可能有一个URI像 /users/123,而用户集合可能是 /users
  • 复数形式:

    • 资源的集合通常用复数形式表示,例如 /books/photos
  • 层次结构:

    • URI 的层次应该合理,避免过深的嵌套。例如,获取用户的文章可能使用 /users/{userId}/articles,而不是 /users/{userId}/content/articles
  • 版本控制:

    • 如果需要版本控制,可以将版本号包含在URI中,例如 /v1/users/users/v1
  • 避免状态:

    • URI 不应该反映临时状态,因为RESTful API是无状态的。
  • 简洁和可读性:

    • URI应该简洁并且有意义,易于理解和记忆。
  • 参数使用:

    • 查询参数(如?后面的部分)用于过滤、排序或分页,但不应改变资源状态。例如,/users?sort=lastName&direction=desc
  • 避免使用动词:

    • 尽管在某些情况下使用动词作为资源的一部分是常见的(如/search),但这通常不被视为“纯正”的RESTful设计。

遵循这些规范,可以帮助构建出一致、可扩展且易于理解和维护的RESTful API。

对响应码的规范:

  • 2xx - 成功状态码,如200(OK)、201(Created)、204(No Content)等。
  • 3xx - 重定向状态码,如301(Moved Permanently)、302(Found)等。
  • 4xx - 客户端错误状态码,如400(Bad Request)、401(Unauthorized)、403(Forbidden)、404(Not Found)等。
  • 5xx - 服务器错误状态码,如500(Internal Server Error)、501(Not Implemented)、503(Service Unavailable)等。

3、RESTful方式演示查询

index页面:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>index</title>
</head>
<body>
<h1>index page</h1>
<hr>
<!--根据id查询:GET /api/user/1 -->
<a th:href="@{/api/user/1}">根据id查询用户信息</a><br>

</body>
</html>

controller部分:

@Controller
public class UserController {

    @RequestMapping(value = "/api/user/{id}", method = RequestMethod.GET)
    public String getById(@PathVariable("id") Integer id){
        System.out.println("根据用户id查询用户信息,用户id是" + id);
        return "ok";
    }

}

4、RESTful方式演示替换(PUT)

这种方式的RESTful和之前的POST或者put是不同的,因为无论是PUT还是POST都是表单中自有方法,但是PUT不是自有方法,接下来演示怎么进行RESTful风格的PUT请求。

步骤一:想要能提交PUT请求就先得能够提交POST请求,所以我们需要早POST请求表单中添加隐藏域。隐藏域:

<input type="hidden" name="_method" value="put">

name必须为_method同时value必须为put或者 PUT
那么完整的表单代码就是:

<!--修改用户-->
<form th:action="@{/api/user}" method="post">
    <!--隐藏域的方式提交 _method=put -->
    <input type="hidden" name="_method" value="put">
    用户名:<input type="text" name="username"><br>
    <input type="submit" th:value="修改">
</form>

步骤二:在web.xml文件配置SpringMVC提供的过滤器:HiddenHttpMethodFilter。

<!--隐藏的HTTP请求方式过滤器-->
<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

事实上如果是发送delete请求也一样,name必须为_method,但是value必须为delete或者 DELETE。并且这个过滤器最好放在前面,因为防止有些过滤器的方法中调用了request.getParamter()


标签:users,编程,URI,风格,PUT,RESTful,id,资源
From: https://www.cnblogs.com/bobospace/p/18283515

相关文章

  • 深入探索Java IO与NIO:差异与高性能网络编程的应用
    深入探索JavaIO与NIO:差异与高性能网络编程的应用一、引言在Java中,I/O(Input/Output)操作是应用程序与外部世界交互的基本方式。Java标准库提供了多种I/O模型,其中最常用的有传统的I/O(即阻塞I/O)和新引入的NIO(Non-blockingI/O,非阻塞I/O)。随着网络应用的日益复杂和性能要求的......
  • 对谈 MoonBit:AI 时代的编程语言应该是什么样子的?丨编码人声
      「编码人声」是由「RTE开发者社区」策划的一档播客节目,关注行业发展变革、开发者职涯发展、技术突破以及创业创新,由开发者来分享开发者眼中的工作与生活。 本期节目,我们请到了MoonBit的创始人宏波和资深的开发者狼叔作为我们的嘉宾,一起和大家聊聊关于AI时代的编程语言......
  • 40个Python函数-助你快速成为编程高手
    40个Python函数-助你快速成为编程高手1、「len()」-返回对象的长度或项目数。length=len("Hello,World!")#返回132、「str()」-将对象转换成字符串。string_representation=str(123)#返回'123'3、「type()」-返回对象的类型。type_of_var=type......
  • SAP ABAP编程日记二报表的开发
    简介:本人是一个刚入行的学生,暂时担任ABAP开发工作。因为我之前没有接触过ABAP编程,对此比较陌生,所以此博客用于自己的学习记录,也希望给观看此博客的人提供一些帮助。上次我们创建了ABAP第一个程序,这次我们有针对性对于报表的开发进行学习一、编写之间的准备在编写程序的时候,......
  • 多线程编程的基本概念,C++标准库中的多线程支持(std::thread,std::async),如何处理线程同步
    多线程编程在现代计算机系统中非常重要,因为它能够使程序同时执行多个操作,提高计算效率。以下是多线程编程的基本概念及如何在C++标准库中使用std::thread和std::async进行多线程编程,同时处理线程同步和并发问题。多线程编程的基本概念线程(Thread):线程是一个轻量级的进程,是......
  • Shell编程
    技术背景Linux操作系统的普及和重要性不断增加,特别是在服务器管理和开发工作中。Shell编程作为Linux系统中的一种脚本语言,允许用户自动化任务和执行复杂的命令序列,是每个Linux用户和系统管理员必须掌握的技能。资源特色这份《Shell编程思维导图》具备以下特色:系统性学......
  • 用C++解决编程题目:求特殊自然数
    学习目标:用C++编写简单的程序学习内容:#include<iostream>usingnamespacestd;intmain(){ inta,b,c; for(a=1;a<7;a++){ for(b=0;b<7;b++){ for(c=1;c<7;c++){ if(a*7*7+b*7+c==c*9*9+b*9+a){ cout<<a*7*7+b*7+c<<endl; cout<......
  • 大一新手小白如何学习编程
    学习编程对于大一新手来说,可能会显得有些困难和复杂,但只要找到正确的方法和策略,就能事半功倍。1.选择适合的编程语言首先,你需要选择一门适合初学者的编程语言。Python是一个非常好的选择,因为它的语法简单易懂,广泛应用于数据分析、人工智能、Web开发等多个领域。除此之外,Jav......
  • 异步编程场景
    异步模型概述异步编程的核心是 Task 和 Task<T> 对象,这两个对象对异步操作建模。它们受关键字 async 和 await 的支持。在大多数情况下模型十分简单:对于I/O绑定代码,等待一个在 async 方法中返回 Task 或 Task<T> 的操作。对于CPU绑定代码,等待一个使用 ......
  • Java多线程编程
    1.进程进程是指操作系统中正在运行的程序实例,它是系统资源分配的基本单位。每个进程都拥有独立的内存空间和系统资源,可以看作是程序的一次执行过程。2.线程线程是进程中的执行单元,也被称为轻量级进程(LightWeightProcess)。一个进程可以包含多个线程,这些线程共享进......