使用 aws-cli 的 codeguru-reviewer list-recommendation-feedback 查询代码评审推荐反馈
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
aws codeguru-reviewer list-recommendation-feedback是 aws-cli 中用于批量查询 Amazon CodeGuru Reviewer 代码评审(Code Review)推荐反馈的核心命令。本指南以仓库中的官方示例 list-recommendation-feedback.rst 为主体,结合服务模型 service-2.json 的底层定义,带你掌握该命令的参数语义、输出结构、筛选与分页能力,并与put-recommendation-feedback、describe-recommendation-feedback串联成完整的"提建议—收反馈—查反馈"闭环。
命令概览与适用场景
Amazon CodeGuru Reviewer 通过程序分析与机器学习,对 Java、Python 代码中的潜在缺陷和最佳实践给出推荐(Recommendation)。为了让开发者对每一条推荐表达意见,服务提供了"反馈(Feedback)"机制——你可以对某条推荐点"👍(ThumbsUp)"或"👎(ThumbsDown)"。
list-recommendation-feedback对应 CodeGuru Reviewer API 中的ListRecommendationFeedback操作,其作用是:
返回包含所有 CodeGuru Reviewer 用户针对某次代码评审的推荐反馈的
RecommendationFeedbackSummary对象列表。
典型场景包括:
- 评审完成后,汇总团队对每条推荐的赞成/反对意见,判断推荐质量;
- 结合
--user-ids查看特定用户的反馈偏好,用于培训或审计; - 结合
--recommendation-ids单独核验某几条关键推荐(尤其是安全类推荐)是否被采纳。
从服务模型看,该操作对应的 HTTP 请求为GET /feedback/{CodeReviewArn}/RecommendationFeedback(见 service-2.json),CodeReviewArn直接拼入 URL 路径,其余参数以 query string 传递。
前置条件:先拿到 CodeReviewArn
CodeReviewArn是该命令唯一必填参数,它标识一次具体的代码评审。实际使用中,评审 ARN 通常通过以下方式获取:
- 调用
aws codeguru-reviewer list-code-reviews列出 90 天内创建的评审; - 调用
aws codeguru-reviewer describe-code-review查看指定评审详情; - 在评审完成后从创建命令
create-code-review的返回值中取得。
从模型中的Arn形状(service-2.json)可以推断其结构:arn:aws:codeguru-reviewer:<region>:<12位账号ID>:<资源类型>:<资源ID>,长度限制为 1–1600 字符。官方示例中的 ARN 是一个典型的基于仓库分析的评审:
arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678其中association:后是仓库关联 ID(UUID 格式),code-review:后是评审名称,形如RepositoryAnalysis-<仓库名>-<分支名>-<哈希>。
基本用法:列出评审的全部推荐反馈
官方示例(list-recommendation-feedback.rst)给出了最直接的调用方式:只传--code-review-arn,列出该评审下所有推荐上的客户反馈:
aws codeguru-reviewer list-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678示例输出(该评审下有一条反馈,来自某位客户的一条ThumbsUp):
{ "RecommendationFeedbackSummaries": [ { "RecommendationId": "3be1b2e5d7ef6e298a06499379ee290c9c596cf688fdcadb08285ddb0dd390eb", "Reactions": [ "ThumbsUp" ], "UserId": "aws-user-id" } ] }输出字段逐项解读
根据RecommendationFeedbackSummary形状定义(service-2.json),返回数组中的每个对象包含三个字段:
| 字段 | 类型 | 说明 |
|---|---|---|
RecommendationId | string | 推荐 ID,用于追踪推荐并收集反馈,长度 1–64 字符 |
Reactions | list | 反馈表情列表,当前枚举值为ThumbsUp/ThumbsDown,列表容量最多 1 个(max:1) |
UserId | string | 给出反馈的用户标识,是 IAM 主体,可为 AWS 账号 ID 或 IAM 角色的 ARN,长度 1–256 字符 |
需要注意两点细节:
- 一条反馈只对应一种表情:
Reactions形状(service-2.json)的约束是max:1, min:0,即单条反馈要么有一个表情,要么为空列表(表示已清除反馈)。 UserId是 IAM 主体:模型文档明确说明它可以是指定的 IAM principal(AWS 账号 ID 或 ARN)。示例中的"aws-user-id"只是示意值,真实输出中会是你配置的凭证对应的账号标识。
响应中的分页字段
除了RecommendationFeedbackSummaries,ListRecommendationFeedbackResponse(service-2.json)还包含NextToken:
- 如果响应中返回了
nextToken,说明还有更多结果; nextToken是每页唯一的透明分页令牌,仅用于取下一页,不应被解析或用于其他目的;- 把返回的 token 原样传给下一次调用的
--next-token,其余参数保持不变。
进阶用法:筛选与分页控制
list-recommendation-feedback除必填的--code-review-arn外,还支持三个可选参数(见 service-2.json 的请求定义)。
--user-ids:只看某个用户的反馈
aws codeguru-reviewer list-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678 \ --user-ids 111122223333UserIds列表最多可传 100 个值,每个值为 AWS 账号 ID 或 IAM 主体 ARN。适用于"查询某位开发者对本次评审的反馈"。
--recommendation-ids:只看特定推荐的反馈
aws codeguru-reviewer list-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678 \ --recommendation-ids 3be1b2e5d7ef6e298a06499379ee290c9c596cf688fdcadb08285ddb0dd390ebRecommendationIds列表同样最多 100 个,每个推荐 ID 长度 1–64 字符。推荐 ID 的来源是先调用aws codeguru-reviewer list-recommendations获取——该命令的示例输出(见 list-recommendations.rst)中,每条RecommendationSummary都带有RecommendationId、StartLine、EndLine、FilePath和Description,你可以据此定位某条具体推荐。
--max-results 与 --next-token:控制分页
aws codeguru-reviewer list-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678 \ --max-results 50 \ --next-token <上次返回的token>参数语义(依据模型文档):
--max-results:单次调用最多返回的结果数,取值 1–100,默认值为 100(MaxResults形状见 service-2.json);--next-token:上一页返回的NextToken(长度 1–2048),用于翻页;无更多结果时响应中不带该字段。
反馈闭环:put / describe / list 三个命令配合使用
list-recommendation-feedback只是"读"的一环,完整的工作流通常由以下命令协同完成:
| 命令 | 对应操作 | 作用 |
|---|---|---|
put-recommendation-feedback | PutRecommendationFeedback(PUT /feedback) | 写入反馈,同一推荐再次调用会覆盖之前的反馈 |
describe-recommendation-feedback | DescribeRecommendationFeedback | 查看单条推荐的反馈详情(含创建/更新时间戳) |
list-recommendation-feedback | ListRecommendationFeedback | 批量汇总所有用户对所有推荐的反馈 |
1. 写入反馈:put-recommendation-feedback
官方示例 put-recommendation-feedback.rst 展示了给某条推荐点"赞":
aws codeguru-reviewer put-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678 \ --recommendation-id 3be1b2e5d7ef6e298a06499379ee290c9c596cf688fdcadb08285ddb0dd390eb \ --reactions ThumbsUp该命令不产生输出。其请求定义(service-2.json)要求CodeReviewArn、RecommendationId、Reactions三个参数均为必填,且服务端文档明确指出:"当该 API 以不同的 reactions 再次调用时,之前的反馈会被覆盖。" 如果想清除反馈,可以发送空列表--reactions []。
2. 查看单条详情:describe-recommendation-feedback
aws codeguru-reviewer describe-recommendation-feedback \ --code-review-arn arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678 \ --recommendation-id 3be1b2e5d7ef6e298a06499379ee290c9c596cf688fdcadb08285ddb0dd390eb示例输出(describe-recommendation-feedback.rst)比list更详细,额外包含CodeReviewArn、CreatedTimeStamp、LastUpdatedTimeStamp:
{ "RecommendationFeedback": { "CodeReviewArn": "arn:aws:codeguru-reviewer:us-west-2:123456789012:association:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111:code-review:RepositoryAnalysis-my-repository-name-branch-abcdefgh12345678", "RecommendationId": "3be1b2e5d7ef6e298a06499379ee290c9c596cf688fdcadb08285ddb0dd390eb", "Reactions": [ "ThumbsUp" ], "UserId": "aws-user-id", "CreatedTimeStamp": 1618877070.313, "LastUpdatedTimeStamp": 1618877948.881 } }对应到模型中的RecommendationFeedback形状(service-2.json),CreatedTimeStamp与LastUpdatedTimeStamp分别表示反馈创建和最后更新时间。如果你需要追踪"某条反馈是什么时候提交/修改的",用describe而不是list。
3. 组合工作流示例
一个典型的反馈审查流程是:
# 第一步:获取某条推荐的 ID aws codeguru-reviewer list-recommendations \ --code-review-arn <code-review-arn> # 第二步:针对推荐写反馈(👍 或 👎) aws codeguru-reviewer put-recommendation-feedback \ --code-review-arn <code-review-arn> \ --recommendation-id <recommendation-id> \ --reactions ThumbsDown # 第三步:汇总查看所有反馈 aws codeguru-reviewer list-recommendation-feedback \ --code-review-arn <code-review-arn> # 第四步(可选):核查单条反馈的提交时间 aws codeguru-reviewer describe-recommendation-feedback \ --code-review-arn <code-review-arn> \ --recommendation-id <recommendation-id>异常与排错
ListRecommendationFeedback可能抛出的异常类型定义在 service-2.json,可据此推断常见报错原因:
| 异常 | 含义 | 排查建议 |
|---|---|---|
ResourceNotFoundException | 指定的CodeReviewArn不存在 | 用list-code-reviews确认评审 ARN 是否真实存在、是否属于当前账号 |
ValidationException | 输入不满足约束 | 检查 ARN 格式(含 12 位账号 ID)、--max-results是否在 1–100、--recommendation-ids数量是否超过 100 |
AccessDeniedException | 权限不足 | 确认 IAM 凭证具备codeguru-reviewer:ListRecommendationFeedback权限 |
ThrottlingException | 请求被限流 | 适当退避重试 |
InternalServerException | 服务端内部错误 | 稍后重试,若持续失败可联系 AWS 支持 |
一个值得注意的坑:示例 ARN 中的账号123456789012、关联 IDa1b2c3d4-...和推荐 ID 均为文档占位符。直接把示例命令原样执行会得到ResourceNotFoundException或ValidationException,务必替换为你账号下真实存在的评审 ARN。
源码依据
本文涉及的命令定义与参数约束均可从以下仓库文件直接验证:
- 官方 CLI 示例:list-recommendation-feedback.rst
- 配套写反馈示例:put-recommendation-feedback.rst
- 配套详情示例:describe-recommendation-feedback.rst
- 推荐 ID 来源示例:list-recommendations.rst
- CodeGuru Reviewer 服务模型(API 定义、参数约束、异常、返回形状):awscli/botocore/data/codeguru-reviewer/2019-09-19/service-2.json
aws-cli 会依据该 JSON 服务模型自动生成list-recommendation-feedback子命令的参数校验与序列化逻辑,因此模型中的min/max约束、枚举值与查询参数位置(querystring、uri)即是你实际执行命令时的行为边界。
【免费下载链接】aws-cliUniversal Command Line Interface for Amazon Web Services项目地址: https://gitcode.com/GitHub_Trending/aw/aws-cli
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考