【问题标题】:Ho to Invoke GCP DocumentAI API from App Engine .net service如何从 App Engine .net 服务调用 GCP Document AI API
【发布时间】:2020-05-06 04:46:51
【问题描述】:
我有一个需要使用 GCP Document AI API 的 .netcore GCP App Engine 服务。不幸的是,还没有 .netcore 客户端可以访问 Document AI API,所以我想我需要使用 API Rest 调用来访问。现在的问题是如何获取访问令牌以在请求中设置授权标头。
有什么帮助吗?
【问题讨论】:
标签:
google-cloud-platform
artificial-intelligence
【解决方案1】:
我发现了两种不同的方式:
第一个:只需编写一个简单的 NodeJS 应用引擎服务(或 java 或 python,因为 Document AI 目前为这 3 种语言提供客户端库)充当 .netcore 服务和 Document AI api 之间的代理。
第二个:在CGP项目中创建一个Api Key,作为.netcore服务中的环境变量抓取。然后,只需将 api 密钥作为查询参数发送和 http post 到 url,如下所示:
https://eu-documentai.googleapis.com/v1beta2/projects/{YOUR_PROJECT_ID}/locations/eu/documents:process?key={API_KEY}
就是这样。
关于第二个,我宁愿不必使用 ApiKey。我想知道诸如nodejs之类的客户端库如何在没有ApiKey的情况下将请求发送到DocumentAI api。在我的第一次尝试中,我希望使用 GCP 服务帐户凭据中的 HttpClient 可以解决问题,但是我收到了 403 错误,指出缺少 api 密钥。我所做的是:
var cred = GoogleCredential.GetApplicationDefault()
var credential = cred.UnderlyingCredential as ServiceAccountCredential;
var uri = new Uri($"https://eu-documentai.googleapis.com/v1beta2/projects/{YOUR_PROJECT_ID}/locations/eu/documents:process;
var responseMessage = await credential.HttpClient.PostAsJsonAsync(uri, config);
var response = await responseMessage.Content.ReadAsStringAsync();
如前所述,这会产生 403 错误,抱怨缺少 ApiKey。使用 ApiKey 时,您可以使用常规 HttpClient,不需要使用为 Google Credential 创建的 HttpClient
【解决方案2】:
有一个测试版,您可以获得以下 Nuget 包:Google.Cloud.DocumentAI.V1Beta2(根据今天)。
添加引用和使用:
using Google.Cloud.DocumentAI.V1Beta2;
然后你可以像其他云组件一样做类似的事情,构建一个服务客户端并使用它,就像这样简单:
var client = new DocumentUnderstandingServiceClientBuilder {
CredentialsPath = "google-credentials.json"
}.Build();
然后,您可以根据需要使用客户端。
关于 google-credentials.json 文件,您可以找到所有信息here。
简而言之:将您的凭据放入一个文件并创建一个名为“GOOGLE_APPLICATION_CREDENTIALS”的环境变量以指向该文件。