为了账号安全,请及时绑定邮箱和手机立即绑定

golang lambda 中的快速重新发送响应

golang lambda 中的快速重新发送响应

Go
白衣染霜花 2023-06-12 12:45:23
我有准备 ES 请求的 golang lambda,将它发送到外部系统并返回它的响应。目前,我还没有找到比对interface{}.func HandleRequest(ctx context.Context, searchRequest SearchRequest) (interface{}, error) {    // ... some data preparation and client initalisation    resp, err := ctxhttp.Post(ctx, &client, url, "application/json", buffer)    if err != nil {        return "", err    }    var k interface{}    all, err := ioutil.ReadAll(resp.Body)    err = json.Unmarshal(all, &k)    return k, err}由于额外的ReadAll和Unmarshall. 有没有更高效的方法?我看了看events.APIGatewayProxyResponse{},但body在其中 - 需要字符串和相同的操作
查看完整描述

1 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您可以通过许多不同的方式处理响应

  • 如果 lambda 实现额外的搜索响应处理,则可能值得使用相应的封送处理/解封处理和额外的处理逻辑来定义响应数据类型协定。

  • 如果 lambda 功能仅代理来自 ES 搜索的响应,您可能只是将搜索响应负载 ([]byte) 作为 []byte 直接传递给 APIGatewayProxyResponse.Body,如果负载具有二进制数据,则可能需要 base64。

代码:

func handleRequest(ctx context.Context, apiRequest events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {

    request, err := newSearchRequest(apiRequest)

    if err != nil {

        return handleError(err)

    }

    responseBody, err := proxySearch(ctx, request)

    if err != nil {

        return handleError(err)

    }

    return events.APIGatewayProxyResponse{

        StatusCode: http.StatusOK,

        Body:       string(responseBody),

    }, nil

}


func proxySearch(ctx context.Context, searchRequest SearchRequest) ([]byte, error) {

    // ... some data preparation and client initalisation

    resp, err := ctxhttp.Post(ctx, &client, url, "application/json", buffer)

    if err != nil {

        return nil, err

    }

    responseBody, err := ioutil.ReadAll(resp.Body)

    return responseBody, err

}


查看完整回答
反对 回复 2023-06-12
  • 1 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信