亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號