【问题标题】:Can we use Google Spreadsheet as a backend database我们可以使用 Google 电子表格作为后端数据库吗
【发布时间】:2016-04-28 14:18:29
【问题描述】:

我正在尝试开发一个应用程序,在该应用程序中,我从多个客户端获取与某些事务相关的数据。现在我想使用 Google 电子表格进行一些分析。有什么方法可以使用 ASP.Net MVC(使用 C#)来实现这一点。谷歌提供 OAuth,当我实现代码时,当我尝试将数据发送到我从客户那里收到的谷歌电子表格时。但是,当我这样做时,对于每个新客户,Google 都会要求提供登录凭据。客户输入他们自己的凭据,而使用 Google 表格而不是普通表格,使用客户自己的表格。因此,我的目的没有解决。有什么办法可以做到这一点。我似乎也没有在 Google 上找到合适的文档。请提供一些建议来实现这一点。提前致谢。

【问题讨论】:

标签: google-sheets


【解决方案1】:

如果您只想要一个只读数据库,这可以很容易地完成。 您必须将您的 Google 表格发布到网络,并从其网址复制其 ID。

例如我的工作表有这个网址:https://docs.google.com/spreadsheets/d/1IHF0mSHs1HdYpIlIzYKG3O8SnAhKU_a6nEJSz04Togk/edit

中间的长字母数字字符串是我的工作表 ID。复制过来,代替XXXX放在下面的url中,如下:

https://spreadsheets.google.com/feeds/list/XXXX/1/public/basic?alt=json"

所以最终的 url 看起来像这样: https://spreadsheets.google.com/feeds/list/1IHF0mSHs1HdYpIlIzYKG3O8SnAhKU_a6nEJSz04Togk/1/public/basic?alt=json

然后您可以简单地访问此 url 并将所有数据作为 json 获取。 使用 jQuery:

var $url = 'https://spreadsheets.google.com/feeds/list/1IHF0mSHs1HdYpIlIzYKG3O8SnAhKU_a6nEJSz04Togk/1/public/basic?alt=json';
$.getJSON($url,function(data){
    alert(JSON.stringify(data.feed.entry));
});

你会得到一个很长的 json 结构。相关数据在 data.feed.entry 中。在那里你会有很多条目。在每一个上,你都会有一个“内容”属性,其中有一个“$t”。这些会给你所有的细胞。 因此,要获取第一行,您必须获取 data.feed.entry[0].content.$t.

希望对你有帮助。

【讨论】:

  • 我们可以像 SQL 一样查询,而不是将整个文件作为 JSON 对象获取吗?
【解决方案2】:

这可以使用Google Apps Script 来完成。特别是,您可以使用 Google 表格中的“bound”脚本(即在您希望创建为“后端”的工作表上下文中创建的脚本)来实现此目的,然后将其发布为“@ 987654323@" 脚本。当你发布它时,你可以让它以电子表格所有者的权限(而不是调用 url 的用户的权限)执行,这将不需要最终用户显式授权自己(因为它是正在使用的脚本发布者的凭据,而不是用户的凭据)。

应该注意,虽然这(并且通常构建在 Google Apps 脚本之上)对于中小型应用程序来说是一种合理的方法,但您可能会发现使用 Google Cloud Platform(并且,在这种特殊情况下,Cloud Datastore) 作为小型到大型应用程序的更好、更具可扩展性的解决方案。也就是说,如果您正在制作原型或创建不太可能在一夜之间着火的内部工具,我会选择您认为更方便/更简单的任何方法;如果您正在创建一个可能会遇到“成功灾难”的应用程序,我会选择 Cloud Platform。

【讨论】:

  • 我认为重要的是要注意 Google 表格有 200 万个单元格限制。
  • “成功灾难”的可扩展性问题是基于数据库的大小,还是基于对工作表的请求的可靠性(或可能的速率限制)?我的用例涉及向 Web 应用程序提供一个只读数据库。如果需要,我可以实现一个缓存层。
  • @Pirijan 简而言之,Google Cloud Platform 上的服务通常会提供明确的 SLA;例如,如果从多个区域进行查询,Cloud Datastore 可提供 99.95% 的正常运行时间,并且对可存储的数据量并没有真正的上限(尽管有最大免费量)...
  • @Pirijan ...相比之下,似乎没有针对 Google Apps 脚本发布的 SLA,并且假设适用 Sheets API 限制 (developers.google.com/sheets/api/limits),最多有 40,000 个查询每天(低于 Cloud Datastore 的免费读取配额)。
【解决方案3】:

如果您的工作表是公开的,则无需身份验证即可执行。您可以使用带有查询语言的 google API Visualization 或使用 Google Sheets API。 但是,如果您的工作表是私有的,则必须通过服务帐户凭据使用 OAuth2 身份验证。 为此,您必须创建一个服务帐户(例如,具有项目角色的所有者)。然后您必须下载 client_secret.json 文件,该文件将是您在代码中使用的文件。 最后,您必须与您在此文件中收到的电子邮件共享您的电子表格。查看文件,您会看到它。

我已经做了一个教程。您可以访问http://edba.xyz/google-sheets-as-database。它主要基于 PHP,但很容易移植到 其他语言。

【讨论】:

    【解决方案4】:

    我最近一直在开发一个使用 google sheet 作为后端的网站。太好了。速度也很可观。 我已经将我在 google 应用程序脚本上编写的自定义后端与我的 Django 应用程序集成在一起。所以现在我的网站将用户信息存储在谷歌表格上。谷歌工作表代码和 Django 应用程序通过 Rest API 进行交互,可以在 Django 端的应用程序脚本和 python 请求中使用 doGet() 和 doPost() 轻松开发。一旦构建了必要的结构(如果您是新手,则需要一些时间进行调整),然后它就可以作为您网站的一个很好的数据库。

    【讨论】:

      【解决方案5】:

      您可以使用Kodem.io

      Google Sheets As Backend 允许您使用 Google 表格进行 CRUD 请求。

      免责声明:我在 Kodem 工作

      【讨论】:

        【解决方案6】:

        Google 电子表格是快速建立数据库原型的绝佳解决方案,甚至在某些情况下用于生产用途。

        人们已经意识到了潜力,如今有许多工具可以将您的 Google 电子表格转换为后端 api

        有几个库,例如 node-sheets,用于从 Google 电子表格获取 json 提要(只读)

        此外,如果您需要完整的独立服务,您可以选择一些付费选项,例如

        还有诸如

        之类的开源选项

        这可以通过 Docker 安装在任何云提供商上,您可以将其指向您的电子表格,它会动态地将其转换为 api。

        例如,如果您的电子表格有以下表格:

        | articles | products | users |
        

        它会自动创建 3 个端点

        GET /articles
        GET /products
        GET /users
        

        适用于不需要经常更改的只读api(你直接更新电子表格,而不是通过代码)(虽然你可以控制更新间隔)

        【讨论】:

          猜你喜欢
          • 2017-12-29
          • 2013-04-05
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-21
          相关资源
          最近更新 更多