我想使用Google云数据存储构建一个简单的rest API,但我无法访问我的数据
首先,我是Google云平台新手,但这不会阻止我,除非我找到一个解决方案,解决如何使用Google云数据存储进行rest API调用。
我使用Angular 4作为前端,我想发出一个简单的HTTP请求。
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class ApiService {
private apiUrl1 = 'https://jsonplaceholder.typicode.com/posts';
private apiUrl2= 'https://datastore.googleapis.com/v1/projects/project-test:runQuery?key=dsdsdsdsdsdsdsdsdsdsdsds';
data: any = {};
constructor(
private http: Http
) { }
getData1() {
return this.http.get(this.apiUrl1)
.map((res: Response) => res.json()); <====== this works
}
getData2() {
const body = {
"query": {}
};
return this.http.post(this.apiUrl2, body)
.map((res: Response) => res.json()); <====== this dont works
}
}
POSThttps://datastore.googleapis.com/v1/projects/project-test: runQuery? key=1b169abfa8b87ewewqewewqewqewqewqewqewqe401()
请一些专家告诉我,我是否可以使用rest API访问Google云数据存储,如果可以,为什么我有错误401,为什么我需要OAuth2
"消息":"请求缺少所需的身份验证凭据。需要OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据。请参见https://developers.google.com/identity/sign-in/web/devconsole-project.","status":"UNAUTHENTICATED"↵ }↵}↵"
用户如何访问我的数据。一些数据将公开可用
任何关于如何使用RESTAPI访问云数据存储的示例都将对我们有所帮助。我搜索了整个互联网,什么都没有。0个Youtube视频和所有文档都带有App engine。我使用Firebase hosting-angular 4,对于查询,我需要云数据存储
TL;DR-API密钥不能与云数据存储API一起使用。相反,您应该使用OAuth 2.0从用户凭据或服务帐户访问令牌。
根据云API的API密钥文档,只有以下4个云服务支持API密钥,而云数据存储不是其中之一。它们通常仅与不需要访问私有用户数据的API一起使用。
除了API密钥外,GCP还支持使用用户帐户凭据和服务帐户进行身份验证。这里对它们进行了详细解释。
拥有用户帐户凭据或服务帐户凭据后,使用OAuth 2.0需要获取访问令牌。此处描述了该过程。我确实发现了这些特定于javascript的步骤,我觉得这些步骤可能对您的用例最有帮助。
该页面中的示例再次提到了API密钥(这对您的用例不起作用),我找不到任何使用服务帐户的角度特定示例。如果您使用的是节点。js,有一个用于节点的google auth库。js,它在使用服务帐户时负责所有身份验证。该库还支持应用程序默认凭据。
获得OAuth 2.0访问令牌(又名承载令牌)后,可以使用云数据存储API请求中的以下3个查询参数之一传递它:
echo '{gqlQuery: {queryString: "SELECT * FROM Task"}}' | http POST https://datastore.googleapis.com/v1/projects/PROJECT_NAME:runQuery?bearer_token=YOUR_OAUTH_TOKEN
如果您安装了gcloud
,您可以使用以下方式获取当前访问令牌:
# Prints the access token
gcloud auth print-access-token
# Use the access token to send the request
echo '{gqlQuery: {queryString: "SELECT * FROM Task"}}' | http POST https://datastore.googleapis.com/v1/projects/PROJECT_NAME:runQuery?bearer_token=$(gcloud auth print-access-token)
我们将Google Cloud Datastore用于Google App Engine(GAE)应用程序。在我们的项目改造期间,我们希望将数据库从Datastore迁移到Google CloudSQL。 我们在数据存储中约有1 TB数据,不包括索引。 如何从数据存储迁移到云SQL,是否有任何现有的开源解决方案可用于此。 我已经检查了下面的一个https://cloud.google.com/da
因此,在我的客户端代码中,我有: 一切正常。之后我要测试错误。因此,我删除了授权头。 当我用像postman这样的工具进行测试时,我会收到401响应。但是对于我的rest模板,我只收到一个IllegalArgumentException。 我也测试了ResponseErrorHandler。 所以我的问题是如何使用rest模板找到我的401错误响应。 这里有个例外: 和堆栈跟踪:
问题内容: Iam尝试对https URL进行身份验证,但Iam出现异常。下面是代码。 例外情况: 请任何人建议如何解决此问题。 问题答案: 401错误代码表示“未经授权”。我相信您的代码无法正确编码Authentication标头。假设服务器需要 基本访问身份验证, 则代码应如下所示: RFC 2617 中提供了HTTP基本和摘要身份验证方案的全面描述
我目前正在一个在Appengine标准环境下运行flask的项目中工作,我试图提供一个已经上传到我项目默认Appengine存储桶中的Google云存储的图像。 这是我目前拥有的路由代码: 实际上,我试图提供一个图像,我已经上传到我的app engine项目中的默认云存储桶中。 我还尝试使用以下代码为映像提供服务,但没有成功:
我正在尝试使用DataFlow(Java)将数据从云存储插入到Big Query中。我可以批量上传数据;但是,我想要设置一个流式上传代替。因此,当新对象添加到我的bucket时,它们将被推送到BigQuery。 我已经将PipelineOptions设置为流,并且在GCP控制台UI中显示dataflow管道是流类型的。bucket中的初始文件/对象集被推送到BigQuery。 但是当我向桶中添加新
我需要从Google Cloud Storage(GCS->Temp Table->Main table)中加载100个表到BigQuery。我创建了一个python进程,将数据加载到BigQuery中,并在AppEngine中进行调度。因为AppEngine最多有10min的超时时间。我已经在异步模式下提交了作业,并在稍后的时间点检查了作业状态。由于我有100个表,需要创建一个监控系统来检查作业