📜  从 postgresql 调用 rest api(1)

📅  最后修改于: 2023-12-03 15:06:32.120000             🧑  作者: Mango

从 PostgreSQL 调用 REST API

PostgreSQL 是一个强大的关系型数据库,但在需要与其他应用程序交互时,它可能不是最合适的选择。最近,越来越多的应用程序都使用 REST API 来进行数据交换,因此有必要从 PostgreSQL 中调用 REST API。

1. 了解 REST API

REST API是一种表示状态转移的架构风格。在REST中,每个资源都具有一个唯一的标识符(URI)和可用于执行操作的一组方法(HTTP操作,如GET、POST、PUT和DELETE等)。我们可以使用HTTP客户端来调用REST API并检索、更新和删除资源。

2. 安装 PostgreSQL REST API 扩展

在 PostgreSQL 中,我们可以使用 "postgres_fdw" 扩展来访问远程数据。但是,它不能直接与 REST API 交互。为了解决这个问题,我们可以使用 "multicorn" 扩展。

Multicorn 是一个 PostgreSQL 扩展,它允许开发人员使用 Python 来创建外部数据包装器。这意味着,我们可以使用 Python 编写代码来与 REST API 交互,并让 PostgreSQL 将它们看作本地数据。

在 Ubuntu 上,可以通过以下命令安装 multicorn:

sudo apt-get install postgresql-plpython3-10 postgresql-10-python-multicorn
3. 编写外部数据包装器

下面是一个简单的示例,它演示了如何使用 multicorn 扩展来创建外部数据包装器。我们将从名为 "example.com/api/data" 的 REST API 调用中检索信息。

import requests
from multicorn import ForeignDataWrapper
from multicorn.utils import log_to_postgres
from datetime import datetime

class ExampleWrapper(ForeignDataWrapper):
  def __init__(self, options, columns):
    super(ExampleWrapper, self).__init__(options, columns)
    self.url = options.get("url", "")

  def execute(self, quals, columns):
    log_to_postgres('Url %s' % self.url, 'DEBUG')
    json_data = requests.get(self.url).json()
    for row in json_data:
        yield [row.get(x) for x in self.columns]
4. 创建外部数据包装器

现在,我们可以在 PostgreSQL 中创建外部数据包装器。我们将使用 CREATE SERVER 命令创建服务器,使用 CREATE FOREIGN TABLE 命令创建外部表。

CREATE SERVER multicorn_example
FOREIGN DATA WRAPPER multicorn
OPTIONS (
  wrapper 'example.ExampleWrapper'
);

CREATE FOREIGN TABLE api_data (
  id INTEGER,
  name TEXT,
  created_at TIMESTAMP
)
SERVER multicorn_example
OPTIONS (
    url 'https://example.com/api/data'
);
5. 检索数据

一旦外部表被创建和定义,我们可以像查询本地表一样去查询外部表。

SELECT * FROM api_data;
结论

使用 multicorn 扩展,可以方便地将 REST API 中的数据集成到 PostgreSQL 中。外部数据包装器的使用方式可以根据需要自行进行扩展,以充分利用 REST API 的优势。