暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

EDB PEM中REST API的调用

新智锦绣 2024-08-15
267

点击蓝字关注我们


EDB Postgres Enterprise Manager (PEM)是针对PostgreSQL和EPAS的全面监控和管理解决方案。基于流行的pgAdmin 4构建,提供pgAdmin的所有管理功能,以及针对关键任务和大型Postgres资产的全天候监控、警报和整体管理工具。

PEM 是一个综合的数据库设计和管理系统。PEM旨在满足新手和经验丰富的Postgres用户的需求,提供强大的图形界面,简化数据库对象的创建、维护和使用。

同时,EDB PEM企业管理器还提供了丰富的REST API功能。通过REST API功能提供有效的数据读写功能,这样可以无需登录PEM UI图形界面即可访问各种功能。而且可以通过REST API无缝与您现在的管理监控平台集成或整合。


一、概述


本文我们通过示例来验证和测试利用PEM REST API来进行数据库管理的功能。前提是已经安装和配置好PEM企业管理服务器。


1.1 访问Swagger编辑器

首先,通过PEM API的URL来访问REST API文档,本例PEM主机的IP地址为192.168.31.201,端口为默认端口:8443。

https://192.168.31.201:8443/pem/api/  显示如下界面:

目前PEM的REST API最新版本是v11。


1.2 访问端点:

基于令牌的身份验证

安全性是重中之重,PEM通过基于令牌的身份验证机制来访问其REST API来确保安全。这种身份验证方法不仅可以保护连接的交互,还可以简化 API 探索,无需 UI 登录。


二、分步操作


下面我们详细了解在 PEM 中使用 REST API 的步骤:


2.1 令牌生成

首先要生成用于身份验证的令牌。为此,按照以下操作步骤:

  • 通过命令行curl发出POST请求到 ‘https://192.168.31.201:8443/pem/api/token’,附带头参数及请求内容。

    • Headers:‘accept:application/json’,‘Content-Type:application/json’

    • Request body:‘{"username":"pemuser","password":"xyz"}'

  • 从响应中的“X-Subject-Token”字段中检索并获得令牌。

    [nuser@pem1 ~]$ curl -k  -iX POST "https://192.168.31.201:8443/pem/api/token/"  \
    -H "accept: application/json" -H "Content-type: application/json" \
    -d "{\"username\":\"postgres\",\"password\":\"postgres\"}"

    返回结果

      HTTP/1.1 201 CREATED
      Date: Mon, 12 Aug 2024 08:49:32 GMT
      Server: Apache
      Content-Length: 396
      X-Subject-Token: 932d9b1c-10e6-4285-b607-9b520f1ba8a2
      Vary: Accept-Encoding
      X-Frame-Options: SAMEORIGIN
      Content-Security-Policy: default-src ws: https: data: blob: 'unsafe-inline' 'unsafe-eval';
      Strict-Transport-Security: max-age=31536000; includeSubDomains
      X-Content-Type-Options: nosniff
      X-XSS-Protection: 1; mode=block
      Content-Type: application/json
      {"issuedAt": "2024-08-12 08:49:32.894498+00:00", "expiresAt": "2024-08-12 09:09:32.894498+00:00", "schema_version": 202405091, "backend_schema_version": 202405091, "version_long": 906001, "version": "9.6.0 (schema: 202405091)", "supported_api_versions": ["v8_api", "v9_api", "v10_api", "v11_api"], "deprecated_api_versions": ["v1_api", "v2_api", "v3_api", "v4_api", "v5_api", "v6_api", "v7_api"]}

      其中X-Subject-Token就是我们所需要的令牌。932d9b1c-10e6-4285-b607-9b520f1ba8a2

      更简单的方法,可以直接在web浏览器界面swagger下执行,在主页面中,往下滚动就看到操作界面。

      在POST行直接点击,就出现输入界面,点击【try it out】,就可以在用户名/密码里输入PEM用户名和密码,其它默认,点击【execute】

      出现命令行一样的内容:

      返回结果。(每次访问都会产生不同的随机Token用于进一步操作)

      2.2 访问各Endpoint

      利用上面获得的X-subject-Token,我们就可以访问PEM内的各种信息并进行管理。我们使用最新的v11 API操作。

      在主页面点击“v11”,可以看到有上百个可以访问的“对象”,以实现对PEM的操作和管理。

      我们随便选择一个对象,如server,可以看到对server对像可以GET、POST二种操作实现查询、更新操作。有些对像可以查询、更新和删除。这里我们点选GET选项。

      输入前面获得的token,点选【Execute】就可以返回所有被管理的Postgres Server的基本信息。如id、name、host、port、status等。

      注意:Token是的时间有效性的,一旦失效了可以从第一步操作重新获取新的token。

      同样地,我们也可以通过curl命令获得相同的返回结果。


      2.3 通过python脚本调用API

      PEM REST API可以通过python脚本来调用,查询和管理相应信息。

      示例一个python脚本test1.py,内容如下:

        import requests
        # Suppress SSL warnings
        requests.packages.urllib3.disable_warnings()
        # Step 1: Token Generation
        def generate_token(username, password):
           url = "https://192.168.31.201:8443/pem/api/token/"
           headers = {
               "accept": "application/json",
               "Content-Type": "application/json"
           }
           data = {
               "username": username,
               "password": password
           }
           response = requests.post(url, headers=headers, json=data, verify=False)
           # Extracting the token from the response
           token = response.headers.get("X-Subject-Token")
           return token
        # Main Execution
        if __name__ == "__main__":
           # Taking user input through command line
           username = input("Enter PEM User Username: ")
           # You can also use getpass for hidden input
           password = input("Enter PEM User Password: ")
           token = generate_token(username, password)
           if token:
               print("Generated Token:", token)
           else:
               print("Failed to generate token.")

        执行脚本:

        $python3 test1.py

          [nuser@elastic-host python-client-sample]$ python3 test1.py 
          Enter PEM User Username: postgres
          Enter PEM User Password: postgres
          Generated Token: 200baceb-3636-49ce-ba4b-f004cdfe96f7

          也可以正确返回token。


          2.4 使用ssl处理https请求

          上面的curl操作对HTTPS请求采用基于令牌的身份验证,并使用--insecure(或-k) 标志禁用 SSL 验证。然而,在许多情况下,SSL 验证至关重要。我们可以通过证书方式访问https。

          PEM安装时自动生成自签名证书,server证书默认安装在/usr/edb/pem/resources/server-pem.crt,我们把server-pem.crt 拷贝到客户端,从而可以https方式访问PEM https地址,获取各种如上所述相同的管理信息。

            curl  -iX POST  "https://epm1.test.cxm:8443/pem/api/token/" \
            -H "accept: application/json"\
            -H "Content-type: application/json" \
            -d "{\"username\":\"postgres\",\"password\":\"postgres\"}" --cacert server-pem.crt
            HTTP/1.1 201 CREATED
            Date: Mon, 12 Aug 2024 18:09:28 GMT
            Server: Apache
            Content-Length: 396
            X-Subject-Token: 58938422-4282-455e-813c-ab726065147e
            Vary: Accept-Encoding
            X-Frame-Options: SAMEORIGIN
            Content-Security-Policy: default-src ws: https: data: blob: 'unsafe-inline' 'unsafe-eval';
            Strict-Transport-Security: max-age=31536000; includeSubDomains
            X-Content-Type-Options: nosniff
            X-XSS-Protection: 1; mode=block
            Content-Type: application/json


            {"issuedAt": "2024-08-12 18:09:28.668627+00:00", "expiresAt": "2024-08-12 18:29:28.668627+00:00", "schema_version": 202405091, "backend_schema_version": 202405091, "version_long": 906001, "version": "9.6.0 (schema: 202405091)", "supported_api_versions": ["v8_api", "v9_api", "v10_api", "v11_api"], "deprecated_api_versions": ["v1_api", "v2_api", "v3_api", "v4_api", "v5_api", "v6_api", "v7_api"]}

            同样可以获得Token。

            也可以生成客户证书及私钥来访问https。

              curl  -iX POST  "https://epm1.test.cxm:8443/pem/api/token/" \
              -H "accept: application/json" -H "Content-type: application/json"\
              -d "{\"username\":\"postgres\",\"password\":\"postgres\"}" \
              --cacert server-pem.crt  --cert client.cert --key client.key

              同样获得Token。

              希望这些方面对利用Postgres Enterprise Manager中的 REST API简化数据库管理有所帮助!更多的详细信息可以在EDB的文档和发行说明中了解有关PEM特性和功能的更多信息。



              发现“分享”“赞”了吗,戳我看看吧


              文章转载自新智锦绣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

              评论