51 lines
1.4 KiB
YAML
51 lines
1.4 KiB
YAML
id: restful-url-pattern
|
||
name: RESTful URL设计规则
|
||
description: 验证API URL是否符合RESTful设计规范
|
||
category: APIDesign
|
||
version: 1.0.0
|
||
severity: warning
|
||
is_enabled: true
|
||
tags:
|
||
- restful
|
||
- api-design
|
||
- url-pattern
|
||
target_type: APIRequest
|
||
lifecycle: RequestPreparation
|
||
scope: RequestURL
|
||
design_aspect: URL设计
|
||
pattern: "^/api/v\\d+/[a-z0-9-]+(/[a-z0-9-]+)*$"
|
||
code: |
|
||
import re
|
||
|
||
def validate(context):
|
||
request = context.get('api_request')
|
||
if not request:
|
||
return {'is_valid': False, 'message': '缺少API请求对象'}
|
||
|
||
url = str(request.url)
|
||
|
||
# 解析URL,获取路径部分
|
||
from urllib.parse import urlparse
|
||
parsed_url = urlparse(url)
|
||
path = parsed_url.path
|
||
|
||
# 使用正则表达式验证路径
|
||
pattern = context.get('pattern', "^/api/v\\d+/[a-z0-9-]+(/[a-z0-9-]+)*$")
|
||
if not re.match(pattern, path):
|
||
return {
|
||
'is_valid': False,
|
||
'message': 'API URL不符合RESTful设计规范',
|
||
'details': {
|
||
'current_path': path,
|
||
'expected_pattern': pattern,
|
||
'suggestion': '路径应该遵循 /api/v{version}/{资源}[/{id}] 格式'
|
||
}
|
||
}
|
||
|
||
return {
|
||
'is_valid': True,
|
||
'message': 'API URL符合RESTful设计规范',
|
||
'details': {
|
||
'path': path
|
||
}
|
||
} |