优雅地进行入参数据校验:场景和处理方式

简介: 在日常的开发工作中,入参数据校验是确保程序健壮性的关键步骤之一,我们需要确保请求中的数据类型、格式和取值范围符合要求,以保证接口的安全性和稳定性,还有就是传递给方法或函数的数据需要满足一定的规则和要求,以保证程序的正常运行和数据的有效处理。那么本文就来分享一下在哪些场景下进行入参数据校验,并分享一些优雅的处理方式,以提高代码的可读性、扩展性和复用性。

引言

在日常的开发工作中,入参数据校验是确保程序健壮性的关键步骤之一,我们需要确保请求中的数据类型、格式和取值范围符合要求,以保证接口的安全性和稳定性,还有就是传递给方法或函数的数据需要满足一定的规则和要求,以保证程序的正常运行和数据的有效处理。那么本文就来分享一下在哪些场景下进行入参数据校验,并分享一些优雅的处理方式,以提高代码的可读性、扩展性和复用性。

哪些场景下进行入参数据校验?

作为开发者来讲,我觉得需要进行入参数据校验会在接口、公共方法、表单校验等常用的场景,下面分享一些常见的场景下需要进行入参数据校验,具体如下所示:

  • 公共方法或函数:在公共方法或函数中,公共方法和函数通常被多个模块或组件使用,我们通常需要对传入的参数进行校验,这些方法或函数可能会被多个模块或组件使用,所以必须确保传入的数据符合预期,以避免不必要的错误和异常。
  • API 接口:当我们在设计和实现 API 接口的时候,入参数据校验变得尤为重要,我们需要确保请求中的数据类型、格式和取值范围符合要求,以保证接口的安全性和稳定性,所以这也是在日常开发中常用的场景之一。
  • 表单验证:在 Web 开发中,用户提交的表单数据需要进行校验,以确保数据的完整性和有效性,这涉及到验证字段的类型、长度、格式以及可能的业务规则,以确保数据的完整性和有效性。
  • 数据库操作:在进行数据库操作之前,对输入的数据进行校验是必要的,这包括验证数据的合法性、格式以及避免潜在的安全漏洞,比如 SQL 注入。

image.png

如何优雅地进行入参数据校验?

这里分享一下如何进行入参数据校验的操作,在日常开发中为了避免冗余的 if-else 语句和提高代码的可读性、可复用性,可以采用以下的处理方式进行入参数据校验,分三个情况来看,具体如下所示。

1、使用函数注解

函数注解是 Python 提供的一种方法,用于在函数定义中添加参数和返回值的类型提示,通过使用函数注解,我们可以在代码中明确指定参数的类型,并由静态类型检查工具进行验证,这样可以提高代码的可读性和可维护性,具体如下所示:

def greet(name: str) -> str:
    return f"Hello, {name}!"

greet("Alice")  # 正确
greet(42)       # 类型错误,会被静态类型检查工具检测到

2、使用装饰器

装饰器是一种 Python 的高级特性,可以用于修改或增强函数的行为,我们可以编写一个通用的装饰器来处理参数的校验逻辑,从而避免在每个函数内部编写重复的校验代码,这样可以提高代码的复用性和可维护性,具体如下所示:

def validate_input(func):
    def wrapper(*args, **kwargs):
        # 进行参数校验逻辑
        if not args[0].isalpha():
            raise ValueError("Name must contain only alphabetic characters.")
        return func(*args, **kwargs)
    return wrapper

@validate_input
def greet(name):
    return f"Hello, {name}!"
greet("Alice")   # 正确
greet("Alice42") # 异常,校验逻辑会抛出异常

3、使用第三方库

Python 生态系统中有一些流行的第三方库可以帮助我们实现入参数据校验,比如 pydantic、marshmallow 和 cerberus ,这些库提供了丰富的功能和灵活的校验规则,使得校验逻辑更具表达性和可维护性,具体如下所示:

from pydantic import BaseModel
class Person(BaseModel):
    name: str
    age: int
person = Person(name="Alice", age=25)       # 正确
person = Person(name="Alice", age="twenty") # 类型错误,会抛出异常

image.png

最后

通过本文的介绍,入参数据校验是确保程序的健壮性和数据的有效处理的重要环节。在日常开发过程中,我们需要在公共方法、API 接口、表单验证和数据库操作等场景下进行入参数据校验,为了优雅地进行校验,我们可以使用函数注解、装饰器、第三方库等方式来简化校验逻辑,提高代码的可读性和可维护性,使程序更加可靠和稳定。在实际开发中,我觉得选择合适的校验方式取决于项目的需求和团队的偏好,无论采用哪种方式,入参数据校验都是保证程序健壮性的重要一环,值得我们在开发过程中高度重视。最后要说的是,通过优雅的入参数据校验,我们可以提高代码的质量和可维护性,使程序更加可靠和稳定。

相关文章
@RequestBody配合@Valid 校验入参参数
@RequestBody配合@Valid 校验入参参数
185 0
|
7月前
|
前端开发 API 数据安全/隐私保护
如何优雅的进行入参数据校验?
【4月更文挑战第11天】如何优雅的进行入参数据校验?
|
7月前
|
数据格式 Python
添加 常用校验方法,校验常见数据格式
添加 常用校验方法,校验常见数据格式
73 0
|
JSON 前端开发 Java
入参校验1
入参校验1
80 0
|
JSON 前端开发 数据格式
前端对接口参数错误如何解决
前端对接口参数错误如何解决
134 0
|
JSON 前端开发 数据格式
前端对接口参数错误如何解决
前端对接口参数错误如何解决
98 0
|
前端开发
2021-08-12参数绑定,类型转换,数据校验,处理异常
2021-08-12参数绑定,类型转换,数据校验,处理异常
49 0
|
测试技术 数据处理 数据安全/隐私保护
接口自动化测试中一些复杂请求的处理方式
接口自动化用例编写中,遇到复杂的请求数据,该如何处理?
|
前端开发 数据安全/隐私保护 容器
8.5请求数据校验
为了提高响应速度,一般在前端界面需要进行数据校验,但是在后端也需要对数据进行校验,以防止不正常的数据传入后台。 .net内置在`System.ComponentModel.DataAnnotations`命名空间下定义了很对检验规则`Attribute`,如[Required]表示必须为非空,[EmailAddress]表示必须为邮箱格式,[RegularExpression]可以用正则对数据进行限制,但是这样模型类和检验规则耦合性很强,不推荐使用。
GoFrame数据校验之校验对象 | 校验结构体
这篇文章将会为大家介绍GoFrame数据校验中校验对象的知识点,包括:Validator对象常用方法的介绍、单数据校验、校验Map、校验结构体的示例
181 0
GoFrame数据校验之校验对象 | 校验结构体