猿问

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

我有准备 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在其中 - 需要字符串和相同的操作


白衣染霜花
浏览 103回答 1
1回答

泛舟湖上清波郎朗

您可以通过许多不同的方式处理响应如果 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}
随时随地看视频慕课网APP

相关分类

Go
我要回答