使用AWS API Gateway与Go SDK创建WebSocket API时无法指定协议
解决AWS SDK for Go创建WebSocket API的问题
你当前的代码使用的是API Gateway V1的apigateway客户端和CreateRestApi方法,这个接口只能创建REST类型的API。要创建WebSocket API,必须使用API Gateway V2对应的SDK包apigatewayv2,因为WebSocket API是V2版本的专属功能。
修改后的完整代码
package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/apigatewayv2" ) func main() { // 创建AWS会话 sess := session.Must(session.NewSession(&aws.Config{ Region: aws.String("us-east-1"), })) // 初始化API Gateway V2客户端 apiGwV2 := apigatewayv2.New(sess) // 创建WebSocket API input := &apigatewayv2.CreateApiInput{ Name: aws.String("test-websocket-api"), ProtocolType: aws.String("WEBSOCKET"), RouteSelectionExpression: aws.String("$request.body.action"), // WebSocket必需的路由选择表达式 } result, err := apiGwV2.CreateApi(input) if err != nil { fmt.Printf("创建WebSocket API失败: %v\n", err) return } fmt.Printf("WebSocket API创建成功,ID: %s,URL: %s\n", aws.StringValue(result.ApiId), aws.StringValue(result.ApiEndpoint)) }
关键说明
- 替换原
apigateway包为apigatewayv2,这是专门管理V2版本API(包括WebSocket、HTTP API)的客户端 - 必须指定
ProtocolType为WEBSOCKET,这是区分API类型的核心参数 RouteSelectionExpression是WebSocket API的必填项,用于指定从客户端消息中选择路由的规则,示例中通过请求体的action字段取值,可根据实际需求调整
内容的提问来源于stack exchange,提问作者Pablo Salazar
相关产品推荐
相关产品推荐

