REST接口详解

一、REST接口规范

REST(Representational State Transfer)即表述性状态转移,是一种设计风格,是现今被广泛应用的一种网络应用通信协议。RESTful 架构的 Web 服务即基于 REST 架构设计的WebService,它应该满足以下几个条件:

1. 客户端- 服务端:客户端和服务端之间的关系应当统一使用REST 接口,这样可以分离前后端开发。

2. 无状态:客户端向服务端请求的所有必要信息都必须包含在请求中,服务端不应该存储客户端的任何信息。

3. 可缓存:服务器必须明确哪些响应可以被缓存,而客户端需要明确它从上一个响应中已经取回的是什么。

4. 按需编码:服务器必须自己使用请求提供的内容来选择如何处理请求,不能假定客户端能够使用某种特定格式来请求数据或者提交数据。

5. 统一接口:所有的资源都通过 URI 暴露给客户端,同时使用标准的 HTTP 方法来定义缺少的操作。


@RestController
public class UserController {
    // 获取用户列表
    @GetMapping("/users")
    public List listUser() {
        List userList = userService.listUser();
        return userList;
    }

    // 获取用户详情
    @GetMapping("/users/{id}")
    public User getUser(@PathVariable("id") Long id) {
        User user = userService.getUserById(id);
        return user;
    }

}

二、REST接口为什么需要转义

在 REST 接口通信过程中,常常需要处理特殊字符如&、=等,这些特殊字符对URL参数传输和接收可能会造成影响,那么就需要对这些特殊字符进行转义。转义后的字符将会被替换成一些特殊字符序列,这些序列是可以被服务器和浏览器处理的。


// URL编码
String encode = URLEncoder.encode("Java 编程", "UTF-8");
System.out.println(encode); // Java+%E7%BC%96%E7%A8%8B

// URL解码
String decode = URLDecoder.decode("Java+%E7%BC%96%E7%A8%8B", "UTF-8");
System.out.println(decode); // Java 编程

三、REST接口测试是什么

REST 接口测试是一种测试手段,它主要用于测试 REST 接口是否符合预期结果。REST 接口测试主要包括接口功能测试、接口性能测试和接口安全测试。其中,功能测试主要关注接口是否按照要求运行;性能测试主要用于测试接口的吞吐量和响应时间;安全测试主要用于测试接口是否安全,是否存在漏洞。

常见的 REST 接口测试工具有 Postman、JMeter、SoapUI 等。

四、REST接口XML

XML 即可扩展标记语言(Extensible Markup Language),它是一种标记语言,用于表示数据。在 REST 接口中,XML 通常用于表示数据的传输格式。XML 的优点是可读性高,易于扩展。



    
        1
        张三
    
    
        2
        李四
    

五、REST接口传集合

在 REST 接口中,传递集合数据时,可以采用数组的方式或者JSON格式。JSON 格式比数组方式更加易于处理,因为 JSON 可以支持多维数组。


// 传递数组
@GetMapping("/users")
public List listUser(@RequestParam("ids") Long[] ids) {
    List userList = userService.listUserByIds(ids);
    return userList;
}

// 传递JSON
@PostMapping("/users")
public void addUser(@RequestBody List userList) {
    userService.addUser(userList);
}

六、REST接口协议

REST 接口通常使用 HTTPS 协议,它是隧道加密协议,可以保证数据传输过程中的安全性。HTTPS 是在 HTTP 的基础上添加了 SSL/TLS 层,实现了数据加密、身份验证和数据完整性校验。


@Configuration
public class HttpsConfig {

    @Value("${server.ssl.key-store}")
    private String keyStorePath;

    @Value("${server.ssl.key-store-password}")
    private String keyPassword;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(createSslConnector());
        return tomcat;
    }

    // 配置HTTPS
    private Connector createSslConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        try {
            File keystore = new ClassPathResource(keyStorePath).getFile();
            connector.setScheme("https");
            connector.setSecure(true);
            connector.setPort(8443);
            protocol.setSSLEnabled(true);
            protocol.setKeystoreFile(keystore.getAbsolutePath());
            protocol.setKeystorePass(keyPassword);
            protocol.setKeyAlias("tomcat");
            return connector;
        } catch (IOException ex) {
            throw new IllegalStateException("can't access keystore: [" + "keystore" + "] or truststore: [" + "none"
                    + "]", ex);
        }
    }
}

七、REST接口类型

在 REST 接口中,常用的数据类型有字符串、整型、浮点型、布尔型、时间类型、对象等。在传递对象时,通常使用 JSON 或 XML 格式,这样可以简化数据的处理。


// 传递对象
@PostMapping("/users")
public void addUser(@RequestBody User user) {
    userService.addUser(user);
}

八、REST接口标准文档

在 REST 接口开发过程中,通常需要编写接口标准文档,以便开发人员能够快速了解接口的使用方式和参数传递方式。接口标准文档应该包含接口说明、URL、请求方式、参数列表、返回值说明等内容。


/**
 * 获取用户列表
 * URL: /users
 * Method: GET
 * @param pageNum 页码
 * @param pageSize 分页大小
 * @return 用户列表
 */
@GetMapping("/users")
public List listUser(@RequestParam("pageNum") Integer pageNum,
                           @RequestParam("pageSize") Integer pageSize) {
    PageHelper.startPage(pageNum, pageSize);
    List userList = userService.listUser();
    PageInfo pageInfo = new PageInfo(userList);
    return pageInfo.getList();
}

九、REST接口array

在 REST 接口中,数组可以作为参数传递、作为返回结果,也可以作为参数中的某个属性值。数组在传递时,通常使用 URL 参数或者 JSON 格式。


// 传递参数数组
@GetMapping("/users")
public List listUser(@RequestParam(value = "ids", required = false) Long[] ids) {
    List userList = userService.listUserByIds(ids);
    return userList;
}

// 返回结果为数组
@GetMapping("/users")
public Long[] listUserId() {
    Long[] userIds = userService.listUserId();
    return userIds;
}

// 参数中包含数组
@PostMapping("/users")
public void addUser(@RequestBody User user) {
    userService.addUser(user);
}

十、REST接口和HTTP接口

REST 接口和 HTTP 接口都是用于提供服务的接口,但是有些区别。HTTP 接口通常使用 SOAP 协议进行数据传输,而 REST 接口使用 RESTful 架构实现,使用JSON或XML格式进行数据的传输。比较起来,REST 接口更加轻量、灵活,易于扩展和维护。

在实际开发中,可以根据具体需要选择使用 REST 接口或者 HTTP 接口。

原创文章,作者:BOQZ,如若转载,请注明出处:https://www.506064.com/n/148531.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
BOQZBOQZ
上一篇 2024-11-03 15:16
下一篇 2024-11-03 15:16

相关推荐

  • Java 监控接口返回信息报错信息怎么处理

    本文将从多个方面对 Java 监控接口返回信息报错信息的处理方法进行详细的阐述,其中包括如何捕获异常、如何使用日志输出错误信息、以及如何通过异常处理机制解决报错问题等等。以下是详细…

    编程 2025-04-29
  • Python接口自动化测试

    本文将从如下多个方面对Python编写接口自动化进行详细阐述,包括基本介绍、常用工具、测试框架、常见问题及解决方法 一、基本介绍 接口自动化测试是软件测试中的一种自动化测试方式。通…

    编程 2025-04-27
  • Jadoor门锁开发接口接入指南

    本文将从多个方面详细介绍如何将门锁接入Jadoor平台的开发接口,方便开发者们快速实现门锁远程控制、开锁记录查看等功能。 一、Jadoor门锁开发接口简介 Jadoor是一款用于密…

    编程 2025-04-27
  • 后端接口设计开发经验分享

    在受到前端某些限制或特殊需求时,后端接口的设计和开发显得尤为重要。下面从以下几个方面进行讲述。 一、命名规范 合理的命名规范可以大大提高接口的可读性和可维护性。以下是一些命名规范的…

    编程 2025-04-27
  • 期货数据接口 Python:打通数字资产交易数据的关键

    本文将从以下几个方面讨论期货数据接口 Python: 一、数据接口简介 期货数据接口是指为期货从业人员提供用于获取历史、实时及未来交易数据的工具。Python是一种常用的编程语言,…

    编程 2025-04-27
  • 如何快速发布http接口

    想要快速发布http接口,可以从以下几个方面入手。 一、选择合适的框架 选择合适的框架对于快速发布http接口非常重要。目前比较受欢迎的框架有Flask、Django、Tornad…

    编程 2025-04-27
  • Javaweb 接口返回数据的定义与实现

    本文将介绍 javaweb 如何定义接口返回数据,并提供相应的代码示例。 一、接口返回数据的定义 在 javaweb 开发中,我们经常需要通过接口返回数据。接口返回的数据格式通常是…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25

发表回复

登录后才能评论