You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Smithy中实现指定行为的RESTful端点并解决输出错误?

实现建议与修正代码

首先解决你遇到的operation shape output relationships must target a structure shape, but found union错误:Smithy 规定操作的输出必须是结构体(structure)类型,不能使用联合类型(union),所以需要调整输出类型的设计。结合你的需求,以下是符合规范的实现:

修正后的完整代码

structure ResultData {
    user: String,
    UUID: String,
    number1: Float,
    number2: Float,
    number3: Float
}

// 用于/results端点的响应:包裹ResultData数组
structure ResultListResponse {
    @httpPayload  // 让数组直接作为HTTP响应体,而非嵌套在字段中
    items: list<ResultData>
}

// /results/{resultsID}的路径参数输入
structure GetResultInput {
    @required
    @httpLabel
    resultsID: String
}

// 获取结果列表的端点:GET /results
@http(code: 200, method: "GET", uri: "/results")
operation ListResults {
    output: ResultListResponse
}

// 获取单个结果的端点:GET /results/{resultsID}
@http(code: 200, method: "GET", uri: "/results/{resultsID}")
operation GetResult {
    input: GetResultInput
    output: ResultData
}

关键调整说明

  1. 替换Union输出为结构体
    你的需求中,/results/{resultsID}在ID无效时返回空对象{},而ResultData的所有字段都是可选的——当返回一个未设置任何字段的ResultData实例时,序列化后的结果就是{},完全符合需求。因此无需使用Union,直接用ResultData作为输出即可规避错误。

  2. 修正列表响应的结构
    原代码中ResultDataList的member字段不是数组类型,改为list<ResultData>后才能返回JSON数组。加上@httpPayload注解,让数组直接作为响应体(而非{"items": [...]}的嵌套格式),符合你要求的"返回JSON对象列表"的需求。无数据时返回[{}],只需返回包含一个空ResultData实例的数组即可。

  3. 修正HTTP方法
    RESTful规范中,获取资源(资源集合/单个资源)应使用GET方法,而非POST(POST多用于创建资源),因此调整了@http注解中的method值。

内容的提问来源于stack exchange,提问作者ReactNewbie123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 02:23:12