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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:15:00