我想使用Google云数据存储构建一个简单的rest API,但我无法访问我的数据
首先,我是谷歌云的新手,但在我找到解决方案如何使用云数据存储区制作休息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
}
}
请一位专家告诉我是否可以使用rest API访问Google云数据存储区 如果是,为什么我有错误401以及为什么我需要OAuth2
“message”:“请求缺少必需的身份验证凭据。 预期的OAuth 2访问令牌,登录cookie或其他有效 身份验证凭据。看到 https://developers.google.com/identity/sign-in/web/devconsole-project“。,↵ “status”:“UNAUTHENTICATED”↵}↵}↵“
用户如何访问我的数据。一些数据将公开发布
如何使用rest API访问云数据存储区的任何示例都将对我们有所帮助。 我在整个互联网上搜索什么都没有。 0 Youtube视频 所有文件都是App引擎。我使用Firebase托管 - 角度4和我想要云数据存储的查询
答案 0 :(得分:1)
TL; DR - API密钥不适用于Cloud Datastore API。您应该使用来自用户凭据或服务帐户的OAuth 2.0
访问令牌。
基于API key documentation for Cloud APIs,只有以下4个云服务支持API密钥,而云数据存储区不是其中之一。它们通常仅用于不需要访问私有用户数据的API。
除API密钥外,GCP还支持使用用户帐户凭据和服务帐户进行身份验证。它们是explained in detail here。
OAuth 2.0
to invoke Google APIs 拥有用户帐户凭据或服务帐户凭据后,使用OAuth 2.0
您需要获取访问令牌。 process is described here。these steps specific to javascript。我确实找到google-auth
library for Node.js,我觉得这对你的用例最有帮助。
该页面中的示例再次提到API密钥(这对您的用例不起作用),我找不到任何使用服务帐户的Angular特定示例。如果您正在使用Node.js,则有Application Default Credentials
在使用服务帐户时负责所有身份验证。该库还支持https://regex101.com/r/aZYgvC/1。
OAuth 2.0
凭据获得OAuth 2.0
访问令牌(也称为承载令牌)后,您可以使用Cloud Datastore API请求中的以下3个查询参数之一传递它:
access_token
oauth_token
bearer_token
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)