Tiện ích cơ sở dữ liệu Google Cloud Spanner

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Phiên bản 1.4.1

Thực hiện các thao tác chèn, truy vấn và cập nhật trên cơ sở dữ liệu Cloud Spanner.

Nội dung này cung cấp tài liệu tham khảo để định cấu hình và sử dụng tiện ích này. Trước khi sử dụng tiện ích từ proxy API bằng Chính sách chú thích tiện ích, bạn phải:

  1. Tạo một thực thể Cloud Spanner như mô tả trong phần Tạo và quản lý thực thể rồi tạo một cơ sở dữ liệu.

  2. Sau khi có thực thể và cơ sở dữ liệu này, hãy cấp quyền truy cập vào cơ sở dữ liệu của bạn vào tài khoản dịch vụ GCP đại diện cho tiện ích của bạn. Để biết thêm thông tin về vai trò cần sử dụng, hãy xem bài viết Các vai trò của Cloud Spanner. Để biết thêm thông tin về tính năng kiểm soát quyền truy cập của Cloud Spanner, hãy xem phần Áp dụng các vai trò IAMKiểm soát quyền truy cập cho Cloud Spanner.

  3. Khi bạn có tài khoản dịch vụ có quyền truy cập vào cơ sở dữ liệu theo ý muốn, hãy sử dụng Bảng điều khiển GCP để tạo khoá cho tài khoản dịch vụ. Sử dụng nội dung của tệp JSON chứa khoá thu được khi bạn định cấu hình tiện ích này.

  4. Sử dụng nội dung của tệp JSON chứa khoá thu được khi thêm và định cấu hình tiện ích bằng cách sử dụng tài liệu tham khảo về cấu hình.

Giới thiệu về Cloud Spanner

Cloud Spanner là dịch vụ cơ sở dữ liệu quan hệ hữu ích cho dữ liệu quan hệ, dữ liệu có cấu trúc và bán cấu trúc yêu cầu khả năng đáp ứng cao, nhất quán mạnh cũng như đọc và ghi giao dịch.

Nếu bạn mới bắt đầu sử dụng Cloud Spanner, thì việc xem nhanh tài liệu về Cloud Spanner là rất phù hợp để bắt đầu.

Mẫu

Các ví dụ sau minh hoạ cách định cấu hình tính năng hỗ trợ các thao tác cho tiện ích của Cloud Spanner bằng Chính sách Chú thích tiện ích.

Thêm dữ liệu

Trong ví dụ sau, hành động insert của tiện ích sẽ thêm một người dùng mới vào bảng người dùng.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Insert-New-User">
    <DisplayName>Insert New User</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>insert</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows" : [{
          "username": "jonesy42",
          "firstName": "Floyd",
          "lastName": "Jones",
          "address": "3695 Auctor Street",
          "city": "Gresham",
          "region": "OR",
          "postalCode": "12693",
          "email": "floydster@example.com"
      }]
  }]]></Input>
</ConnectorCallout>

Lấy dữ liệu

Trong ví dụ này, truy vấn sẽ truy xuất giá trị tên người dùng và email từ bảng user.

Đầu tiên, Chính sách assignMessage sẽ chỉ định biến postal.code.value để sử dụng trong mệnh đề truy vấn WHERE. Đây là một ví dụ. Chính sách của bạn có thể đặt giá trị này dựa trên các tham số yêu cầu của khách hàng.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Postal-Code">
    <AssignTo createNew="true" transport="http" type="request"/>
    <AssignVariable>
        <Name>postal.code</Name>
        <Value>86519</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</AssignMessage>

Chính sách Chú thích mở rộng sau đây thực thi truy vấn trên cơ sở dữ liệu, sử dụng nội dung của biến postal.code.value trong mệnh đề WHERE.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-User-Data">
    <DisplayName>Get User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>querySQL</Action>
    <Input><![CDATA[{
      "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
      "params" : {
        "postalCode" : "{postal.code.value}"
      }
    }]]></Input>
  <Output>spanner.userdata.retrieved</Output>
</ConnectorCallout>

Sau đó, Chính sách assignMessage sau đây sử dụng phản hồi của tiện ích (được lưu trữ trong biến spanner.userdata.retrieved) làm phản hồi được trả về cho ứng dụng khách.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Get-Query-Response-Data">
    <DisplayName>Get Query Response Data</DisplayName>
    <AssignTo type="response" createNew="false"/>
    <Set>
        <Payload contentType="application/json">{spanner.userdata.retrieved}</Payload>
    </Set>
</AssignMessage>

Trong ví dụ này, dữ liệu phản hồi được trả về dưới dạng JSON như sau.

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

Cập nhật dữ liệu

Trong ví dụ này, phần tử <Input> chứa username (khoá chính của bảng) và một giá trị mới cho cột email.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Update-User-Data">
    <DisplayName>Update User Data</DisplayName>
    <Connector>spanner-users-products</Connector>
    <Action>update</Action>
    <Input><![CDATA[{
        "tableName" : "user",
        "rows": [{
            "username":"Liz456",
            "email":"lizzard@example.com"
        }]
    }]]></Input>
</ConnectorCallout>

Thao tác

insert

Chèn các hàng đã chỉ định vào cơ sở dữ liệu.

Cú pháp

<Action>insert</Action>
<Input><![CDATA[{
  "tableName" : "table-to-insert-into",
  "rows" : "rows-to-insert"
}]]></Input>

Ví dụ:

Trong ví dụ sau, hành động insert của tiện ích sẽ thêm một người dùng mới vào bảng người dùng. Đã thêm một hàng.

<Action>insert</Action>
<Input><![CDATA[{
    "tableName" : "user",
    "rows" : [{
      "username": "jonesy42",
      "firstName": "Floyd",
      "lastName": "Jones",
      "address": "3695 Auctor Street",
      "city": "Gresham",
      "region": "OR",
      "postalCode": "12693",
      "email": "floydster@example.com"
  }]
}]]></Input>

Thông số yêu cầu

Thông số Nội dung mô tả Loại Mặc định Bắt buộc
tableName Bảng trong cơ sở dữ liệu mà bạn sẽ chèn các hàng. Chuỗi Không nội dung nào. Có.
hàng Các hàng cần chèn được biểu thị dưới dạng một mảng trong đối tượng JSON rows. Mảng Không nội dung nào. Có.

Phản hồi

Không nội dung nào.

querySQL

Truy vấn cơ sở dữ liệu bằng câu lệnh SQL với các tham số được chỉ định. Tham số được cung cấp trong câu lệnh SQL với tên được thêm vào trước @; giá trị tham số được chỉ định trong tham số params của hành động này.

Để biết thông tin chi tiết về cú pháp truy vấn Cloud Spanner, hãy xem phần Cú pháp truy vấn.

Cú pháp

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "sql-query-statement",
  "params" : {
    "param1" : "columnValue"
  }
}]]></Input>

Ví dụ:

Trong ví dụ này, một truy vấn sẽ truy xuất các giá trị cột usernameemail từ bảng user. Câu lệnh SQL chỉ định một tham số postalCode được đặt từ biến luồng postal.code.value.

<Action>querySQL</Action>
<Input><![CDATA[{
  "sql" : "SELECT username, email FROM user WHERE postalCode = @postalCode",
  "params" : {
    "postalCode" : "{postal.code.value}"
  }
}]]></Input>

Thông số yêu cầu

Thông số Nội dung mô tả Loại Mặc định Bắt buộc
sql Truy vấn SQL cần thực thi. Bạn có thể chỉ định tham số có tên thông số được thêm vào đầu @. Các tên tham số đó phải tương ứng với các khoá trong tham số params của hành động này. Chuỗi Không nội dung nào. Có.
params Một đối tượng có khoá và giá trị là tên và giá trị tham số được dùng trong truy vấn SQL. Bạn có thể liệt kê nhiều thông số tại đây. Đối tượng Không nội dung nào. Không.

Phản hồi

Đối tượng rows chứa một mảng các cặp tên-giá trị cột được truy vấn trả về. Ví dụ:

{
  "rows": [
    {
      "username": "freewill444",
      "email": "freewill@example.com"
    }
  ]
}

cập nhật

Cập nhật các hàng trong cơ sở dữ liệu bằng dữ liệu được chỉ định.

Cú pháp

<Input><![CDATA[{
  "tableName" : "table-with-rows-to-update",
  "rows" : "rows-to-update"
}]]></Input>

Ví dụ:

Trong ví dụ này, địa chỉ email của người dùng có username là Liz456 được cập nhật một giá trị mới. Đã cập nhật một hàng.

<Action>update</Action>
<Input><![CDATA[{
  "tableName" : "user",
  "rows": [{
      "username":"Liz456",
      "email":"lizzard@example.com"
  }]
}]]></Input>

Thông số yêu cầu

Thông số Nội dung mô tả Loại Mặc định Bắt buộc
tableName Bảng trong cơ sở dữ liệu nơi các hàng cần được cập nhật. Chuỗi Không nội dung nào. Có.
hàng Một mảng dữ liệu hàng cần cập nhật. Mỗi thực thể trong mảng phải chứa giá trị mã nhận dạng duy nhất (chẳng hạn như khoá chính) để hàng cần cập nhật. Mảng Không nội dung nào. Có.

Phản hồi

Không nội dung nào.

Tài liệu tham khảo về cấu hình

Sử dụng các đoạn mã sau khi bạn định cấu hình và triển khai tiện ích này để sử dụng trong các proxy API. Để biết các bước định cấu hình một tiện ích bằng bảng điều khiển Apigee, hãy xem bài viết Thêm và định cấu hình tiện ích.

Thuộc tính tiện ích phổ biến

Các thuộc tính sau có sẵn cho mỗi tiện ích.

Tài sản Mô tả Mặc định Bắt buộc
name Tên mà bạn đang đặt cho cấu hình của tiện ích này. Không có
packageName Tên của gói tiện ích do Apigee Edge cung cấp. Không có
version Số phiên bản của gói tiện ích mà bạn đang định cấu hình tiện ích. Không có
configuration Giá trị cấu hình cụ thể cho tiện ích bạn đang thêm. Xem Thuộc tính cho gói tiện ích này Không có

Các thuộc tính cho gói tiện ích này

Chỉ định giá trị cho các thuộc tính cấu hình sau dành riêng cho tiện ích này.

Tài sản Nội dung mô tả Mặc định Bắt buộc
projectId Mã dự án GCP chứa cơ sở dữ liệu. Không nội dung nào. Có.
instanceId Mã nhận dạng của thực thể Cloud Spanner trong dự án GCP của bạn. Không nội dung nào. Có.
databaseId Mã nhận dạng của cơ sở dữ liệu Cloud Spanner. Không nội dung nào. Có.
thông tin xác thực Khi được nhập vào bảng điều khiển Apigee Edge, đây là nội dung của tệp khoá tài khoản dịch vụ của bạn. Khi được gửi qua API quản lý, giá trị này là giá trị được mã hoá base64 từ tệp khoá tài khoản dịch vụ. Không nội dung nào. Có.