【发布时间】:2021-07-19 08:10:03
【问题描述】:
我正在使用 Golang 构建一个多语言 SAAS 网站构建器,该构建器按客户端运行。每个客户都可以拥有自己的网站,并可以将他们的网站翻译成所需的语言。
由于该功能是针对每个客户端的,所以我从客户端收集了一个 API 密钥,我用它来翻译他们的网站内容。
这是代码,
V2
package main
import (
"context"
"fmt"
"cloud.google.com/go/translate"
"google.golang.org/api/option"
)
func main() {
translationStrings := []string{"hello"}
ctx := context.Background()
opts := option.WithAPIKey(APIKEY)
c, err := translate.NewClient(ctx, opts)
if err != nil {
fmt.Println(err)
}
defer c.Close()
resp, err := c.Translate(ctx, translationStrings, language.French,
&translate.Options{
Source: language.English,
Format: translate.Text,
})
if err != nil {
fmt.Println(err)
}
fmt.Println(resp)
}
V3
translate "cloud.google.com/go/translate/apiv3"
translatepb "google.golang.org/genproto/googleapis/cloud/translate/v3"
c, err := translate.NewTranslationClient(ctx, opts)
if err != nil {
fmt.Println(err)
}
defer c.Close()
req := &translatepb.TranslateTextRequest{
Contents: translationStrings,
TargetLanguageCode: "sr-Latn",
}
resp, err := c.TranslateText(ctx, req)
V2 的代码运行良好,但 V3 的相同代码无法运行。它给出了错误:
API keys are not supported for gRPC APIs. Remove the WithAPIKey option from your client-creating call.
如错误中所述,它要求我删除 WithAPIKey 选项。但是如果我删除它,那么我将如何为每个客户端使用 api 密钥。
我选择使用 V3 api 是因为它将作为一个整体进行翻译,所以这将是一个很大的请求。我在文档中读到 V3 api 可以批量工作。
所以我的问题是:
- 如何在 api V3 中使用每个客户端的 api 密钥结构?
- 是否可以为上述目的使用 api V2?
【问题讨论】: