Chính sách KeyValueMapOperations

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

Biểu tượng Hoạt động bản đồ giá trị khoá trên giao diện người dùng Edge

Nội dung

Cho phép truy cập vào cửa hàng trên Bản đồ giá trị khoá (KVM) dựa trên chính sách trong Apigee Edge. Bạn có thể lưu trữ, truy xuất và xoá các cặp khoá/giá trị khỏi các bản đồ hiện có đã được đặt tên bằng cách định cấu hình Các chính sách KeyValueMapOperations chỉ định các thao tác PUT, GET hoặc DELETE. (Ít nhất một trong số những thao tác này phải được chính sách thực hiện).

Video

Hãy xem các video sau để tìm hiểu thêm về KVM.

Video Mô tả
Tại sao cần sử dụng giá trị khoá trên Maps? Tìm hiểu lý do bạn cần KVM và cách chúng hoạt động.
Tạo KVM bằng Giao diện người dùng và truy xuất KVM trong thời gian chạy Tạo một KVM, truy xuất giá trị của nó bằng chính sách KVM rồi chèn giá trị đó vào API yêu cầu bằng cách sử dụng các biến luồng.
Tạo và cập nhật KVM trong thời gian chạy API Tạo KVM trong thời gian chạy API bằng chính sách KVM.
Lưu KVM vào bộ nhớ đệm vào tăng hiệu suất Cải thiện hiệu suất của Chính sách KVM bằng cách lưu dữ liệu vào bộ nhớ đệm.
Lưu trữ tệp đã mã hoá KVM Lưu trữ thông tin nhạy cảm trong KVM ở định dạng mã hoá và truy xuất giá trị tại bằng chính sách KVM và các biến riêng tư.
Quản lý quyền truy cập dùng phạm vi KVM Hạn chế KVM ở tổ chức, môi trường, proxy API hoặc sửa đổi proxy API bằng cách sử dụng KVM thuộc tính phạm vi chính sách.
Xoá KVM các mục nhập tại thời gian chạy API Xoá các mục nhập KVM trong thời gian chạy API bằng thao tác DELETE của chính sách KVM.

Mẫu

PUT KVM bằng giá trị cố định

Khi chạy chính sách sau, chính sách này sẽ tạo một KVM đã mã hoá có tên FooKVM, sau đó tạo một khoá có tên FooKey_1 bằng hai giá trị được đặt với các chuỗi giá trị cố định foobar (không được đặt với các giá trị được trích xuất từ biến). Khi GET khoá trong ví dụ tiếp theo, bạn sẽ chỉ định số chỉ mục để truy xuất giá trị bạn muốn.

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="FooKVM" mapIdentifier="FooKVM">
  <DisplayName>FooKVM</DisplayName>
  <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
  <Scope>environment</Scope>
  <Put>
    <Key>
      <Parameter>FooKey_1</Parameter>
    </Key>
    <Value>foo</Value>
    <Value>bar</Value>
  </Put>
</KeyValueMapOperations>

Xin lưu ý rằng phạm vi là "môi trường". Điều đó có nghĩa là bạn có thể thấy KVM trong phần quản lý Giao diện người dùng trong APIs > Cấu hình môi trường > Bản đồ giá trị khoá. KVM được hiển thị trên trang đó đều thuộc phạm vi của môi trường đã chọn.

GET KVM từ giá trị cố định

Chính sách này xem xét bản đồ FooKVM trong ví dụ trước, tìm ra giá trị giá trị thứ hai (index="2") từ khoá FooKey_1 rồi lưu trữ giá trị đó trong một biến có tên là foo_variable.

<KeyValueMapOperations mapIdentifier="FooKVM" async="false" continueOnError="false" enabled="true" name="GetKVM">
  <DisplayName>GetKVM</DisplayName>
  <ExpiryTimeInSecs>86400</ExpiryTimeInSecs>
  <Scope>environment</Scope>
  <Get assignTo="foo_variable" index="2">
    <Key>
      <Parameter>FooKey_1</Parameter>
    </Key>
  </Get>
</KeyValueMapOperations>

PUT KVM có biến

Một ví dụ đơn giản về sơ đồ khoá-giá trị hữu ích là dịch vụ rút ngắn URL. Sơ đồ liên kết khoá-giá trị có thể được định cấu hình để lưu trữ URL rút gọn cùng với URL đầy đủ tương ứng.

Mẫu chính sách này sẽ tạo một sơ đồ liên kết khoá giá trị. Chính sách này đặt một khoá có 2 giá trị liên kết thành một bản đồ khoá/giá trị có tên "urlMapper".

<KeyValueMapOperations name="putUrl" mapIdentifier="urlMapper">
   <Scope>apiproxy</Scope>
   <Put override="true">
      <Key>
         <Parameter ref="urlencoding.requesturl.hashed"/>
      </Key>
      <Value ref="urlencoding.longurl.encoded"/>
      <Value ref="request.queryparam.url"/>
   </Put>
</KeyValueMapOperations>

Khoá trong ví dụ này (urlencoding.requesturl.hashed) là một ví dụ về biến tuỳ chỉnh. URL yêu cầu đã băm sẽ được tạo bằng mã (JavaScript hoặc Java, đối với chẳng hạn) rồi lưu trữ trong biến này, nơi chính sách KeyValueMapOperations có thể truy cập nó.

Đối với mỗi khoá, requesturl.hashed, hai giá trị được lưu trữ:

  • Nội dung của biến tuỳ chỉnh có tên là urlencoding.longurl.encoded
  • Nội dung của biến được xác định trước request.queryparam.url

Ví dụ: khi chính sách thực thi trong thời gian chạy, giá trị của biến có thể là sau:

  • urlencoding.requesturl.hashed: ed24e12820f2f900ae383b7cc4f2b31c402db1be
  • urlencoding.longurl.encoded: http://tinyurl.com/38lwmlr
  • request.queryparam.url: http://apigee.com

Sơ đồ và mục nhập khoá/giá trị sau đây sẽ được tạo trong kho khoá/giá trị của Edge và trong phạm vi proxy API mà chính sách được đính kèm:

{
    "entry" :[ 
        {
            "name" : "ed24e12820f2f900ae383b7cc4f2b31c402db1be",
            "value" : "http://tinyurl.com/38lwmlr,http://apigee.com"
        }
    ],
    "name" : "urlMapper"
}

Mục này sẽ tồn tại cho đến khi bị xoá. Các mục nhập cửa hàng khoá/giá trị được phân phối trên của các phiên bản Edge đang chạy đám mây.

GET KVM từ một biến

Một ví dụ đơn giản về sơ đồ khoá-giá trị hữu ích là URL "rút ngắn" . Sơ đồ liên kết khoá-giá trị có thể được định cấu hình để lưu trữ URL rút gọn cùng với URL đầy đủ tương ứng.

Để truy xuất giá trị của mục bản đồ khoá/giá trị, chẳng hạn như mục được đề cập trên Thẻ KeyValueMapOperations PUT, định cấu hình chính sách để GET bản đồ khoá-giá trị:

<KeyValueMapOperations name="getUrl" mapIdentifier="urlMapper">
   <Scope>apiproxy</Scope>
   <Get assignTo="urlencoding.shorturl" index='1'>
      <Key>
         <Parameter ref="urlencoding.requesturl.hashed"/> 
      </Key>
   </Get>
</KeyValueMapOperations>

Khi chính sách này được thực thi, nếu giá trị của Biến urlencoding.requesturl.hasheded24e12820f2f900ae383b7cc4f2b31c402db1be, thì biến tuỳ chỉnh có tên urlencoding.shorturl sẽ được đặt bằng giá trị http://tinyurl.com/38lwmlr.

Giờ đây, dữ liệu đã được truy xuất, các chính sách và mã khác có thể truy cập vào dữ liệu đó bằng cách trích xuất giá trị từ các biến đó.

Nhận giá trị được mã hoá từ KVM

Nếu sơ đồ liên kết khoá-giá trị được mã hoá, hãy truy xuất các giá trị bằng cách sử dụng hàm "private." trong giá trị thuộc tính assignTo. Trong ví dụ này, biến private.encryptedVar lưu giữ giá trị đã giải mã của tệp ánh xạ giá trị khoá Khoá foo. Để biết thông tin về cách tạo mối liên kết giá trị khoá được mã hoá, hãy xem phần "tạo" chủ đề của Bản đồ khoá/giá trị Management API.

<KeyValueMapOperations name="getEncrypted" mapIdentifier="encrypted_map">
   <Scope>apiproxy</Scope>
   <Get assignTo="private.encryptedVar" index='1'>
      <Key>
         <Parameter>foo</Parameter> 
      </Key>
   </Get>
</KeyValueMapOperations>

Giờ đây, dữ liệu đã được truy xuất, các chính sách và mã khác có thể truy cập vào dữ liệu đó bằng cách trích xuất giá trị của biến đó.


Tham chiếu phần tử

Tham chiếu phần tử mô tả các phần tử và thuộc tính của KeyValueMapOperations chính sách của Google:

<KeyValueMapOperations async="false" continueOnError="false" 
    enabled="true" name="Key-Value-Map-Operations-1" 
    mapIdentifier="urlMapper" >
   <DisplayName>Key Value Map Operations 1</DisplayName>
   <Scope>environment</Scope>
   <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
   <InitialEntries>
      <Entry>
         <Key>
            <Parameter>key_name_literal</Parameter>
         </Key>
         <Value>value_literal</Value>
      </Entry>
      <Entry>
         <Key>
            <Parameter>variable_name</Parameter>
         </Key>
         <Value>value_1_literal</Value>
         <Value>value_2_literal</Value>
      </Entry>
   </InitialEntries>
   <Put override="false">
      <Key>
         <Parameter>key_name_literal</Parameter>
      </Key>
      <Value ref="variable_name"/>
   </Put>
   <Get assignTo="myvar" index="1">
      <Key>
         <Parameter ref="variable_name"/>
      </Key>
   </Get>
   <Delete>
      <Key>
         <Parameter>key_name_literal</Parameter>
      </Key>
   </Delete>
</KeyValueMapOperations>

&lt;KeyValueMapOperations&gt; thuộc tính

Ví dụ sau đây cho thấy các thuộc tính trên thẻ <KeyValueMapOperations>:

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="map_name">

Bảng sau đây mô tả các thuộc tính cụ thể của thẻ <KeyValueMapOperations>:

Thuộc tính Mô tả Mặc định Sự hiện diện
mapIdentifier

Chỉ định một mã nhận dạng để sử dụng khi truy cập vào bản đồ được tạo bởi hoặc trong giao diện người dùng quản lý.

Tên KVM có phân biệt chữ hoa chữ thường và sử dụng Apigee Edge cho Public Cloud. Ví dụ: foobar khác với FooBar.

Nếu bạn loại trừ thuộc tính này, thì hệ thống sẽ sử dụng KVM có tên kvmap.

Trong phạm vi tổ chức/môi trường/apiproxy, bạn có thể sử dụng mapIdentifier để chỉ định tên bản đồ của riêng bạn.

Không áp dụng Không bắt buộc

Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

(Không bắt buộc) Bạn có thể dùng phần tử <DisplayName> để gắn nhãn chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi chính sách không thành công. Điều này là dự kiến đối với hầu hết các chính sách.

Đặt thành true để tiếp tục thực thi luồng ngay cả sau khi có chính sách không thành công.

false Không bắt buộc
enabled

Hãy đặt thành true để thực thi chính sách này.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi luồng đó vẫn được liên kết với một luồng.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

&lt;DisplayName&gt; phần tử

Hãy sử dụng cùng với thuộc tính name để gắn nhãn chính sách trong phần trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính name của chính sách sẽ là đã sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

&lt;Delete&gt; phần tử

Xoá cặp khoá/giá trị được chỉ định. Ít nhất một trong số <Get>, Bạn phải sử dụng <Put> hoặc <Delete>.

Hãy nhớ chỉ định tên của KVM bằng thuộc tính mapIdentifier trên phần tử mẹ. Ví dụ:

<Delete>
   <Key>
      <Parameter>key_name_literal</Parameter>
   </Key>
</Delete>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc nếu không có <Get> hoặc <Put>.
Loại Không áp dụng

&lt;Entry&gt; phần tử

Giá trị gốc cho bản đồ khoá-giá trị, được điền sẵn vào bản đồ khoá-giá trị khi đã khởi chạy.

Đối với Edge dành cho Đám mây công cộng, kích thước khoá bị giới hạn ở 2 KB. Ví dụ:

<InitialEntries>
   <Entry>
      <Key>
         <Parameter>key_name_literal</Parameter>
      </Key>
      <Value>v1</Value>
   </Entry>
   <Entry>
      <Key>
         <Parameter>key_name_variable</Parameter>
      </Key>
      <Value>v3</Value>
      <Value>v4</Value>
   </Entry>
</InitialEntries>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

&lt;ExclusiveCache&gt; phần tử

Không dùng nữa. Thay vào đó, hãy sử dụng phần tử <Scope>.

&lt;ExpiryTimeInSecs&gt; phần tử

Chỉ định khoảng thời gian tính bằng giây mà sau đó Edge làm mới giá trị đã lưu vào bộ nhớ đệm từ KVM được chỉ định.

Giá trị 0 hoặc -1 hoặc loại trừ phần tử này có nghĩa là giá trị mặc định của 300 giây là đã sử dụng. Ví dụ:

<ExpiryTimeInSecs>600</ExpiryTimeInSecs>
Mặc định 300 (5 phút)
Sự hiện diện Không bắt buộc
Loại Số nguyên

KVM là một cơ chế cố định dài hạn giúp lưu trữ các khoá và giá trị trong cơ sở dữ liệu NoSQL. Do đó, việc đọc từ KVM trong thời gian chạy có thể làm chậm hiệu suất của proxy. Để cải thiện Edge có cơ chế tích hợp để lưu khoá/giá trị KVM vào bộ nhớ đệm trong thời gian chạy. Chính sách Hoạt động KVM này luôn đọc từ bộ nhớ đệm đối với các thao tác GET.

Phần tử <ExpiryTimeInSecs> cho phép bạn kiểm soát thời lượng khoá/giá trị mà chính sách này sử dụng sẽ được lưu trữ trong bộ nhớ đệm trước khi được làm mới lại từ KVM. Tuy nhiên, có một số khác biệt giữa cách thức hoạt động GET và PUT ảnh hưởng đến thời hạn bộ nhớ đệm.

GET – Ngay từ lần đầu tiên thao tác KVM GET thực thi, lệnh được yêu cầu khoá/giá trị của KVM (có tên được chỉ định trong thư mục gốc mapIdentifier của chính sách) ) được tải vào bộ nhớ đệm, nơi chúng được lưu giữ cho các thao tác GET tiếp theo cho đến khi một trong những điều sau đây sẽ xảy ra:

  • Số giây được chỉ định trong <ExpiryTimeInSecs> sẽ hết hạn.
    hoặc
  • Thao tác PUT trong chính sách KVM sẽ ghi đè các giá trị hiện có (được giải thích trong phần tiếp theo).

PUT – Thao tác PUT sẽ ghi các khoá/giá trị vào KVM được chỉ định. Nếu PUT ghi vào một khoá đã tồn tại trong bộ nhớ đệm, bộ nhớ đệm đó sẽ được làm mới ngay lập tức và giữ lại giá trị mới cho số giây được chỉ định trong chính sách Phần tử <ExpiryTimeInSecs>.

Ví dụ – Lưu KVM vào bộ nhớ đệm

  1. Thao tác GET truy xuất giá trị của "xếp hạng" Thêm giá trị "10" vào bộ nhớ đệm. Chiến lược phát hành đĩa đơn <ExpiryTimeInSecs> của chính sách là 60.
  2. 30 giây sau, chính sách GET thực thi lại và truy xuất "10" khỏi bộ nhớ đệm.
  3. 5 giây sau, chính sách PUT cập nhật giá trị của "điểm xếp hạng" thành "8" và <ExpiryTimeInSecs> trong chính sách PUT là 20. Bộ nhớ đệm sẽ xuất hiện ngay lập tức được làm mới bằng giá trị mới. Giá trị này hiện được đặt ở chế độ lưu trong bộ nhớ đệm trong 20 giây. (Nếu PUT chưa xảy ra, bộ nhớ đệm ban đầu được điền bởi GET đầu tiên sẽ vẫn tồn tại cho 30 giây, còn lại so với 60 giây ban đầu.)
  4. 15 giây sau, một GET khác thực thi và truy xuất giá trị "8".

&lt;Get&gt; phần tử

Truy xuất giá trị cho khoá được chỉ định. Ít nhất một trong số <Get>, Bạn phải sử dụng <Put> hoặc <Delete>.

Hãy nhớ chỉ định tên của KVM bằng thuộc tính mapIdentifier trên phần tử mẹ.

Bạn có thể đưa nhiều khối Get vào chính sách này để truy xuất nhiều mục từ một KVM.

Mặc định Không áp dụng
Sự hiện diện Bắt buộc nếu <Put> hoặc <Delete> không phải là hiện tại.
Loại Không áp dụng

Nhận một mặt hàng từ KVM

<Get assignTo="myvar" index="1">         
   <Key>             
      <Parameter>key_name_literal</Parameter>         
   </Key>     
</Get>

Nhận nhiều mặt hàng qua KVM

Trong ví dụ sau, giả sử một KVM có các khoá và giá trị sau. Ngoài ra để lưu trữ một danh sách đang chạy các bộ phim phổ biến nhất mọi thời đại, KVM lưu trữ tên đạo diễn của tất cả các bộ phim lớn.

Khoá Giá trị
top_movies Cô dâu công chúa,Bố già,Công dân Kane
Công dân Kane Orson Welles
Cô dâu công chúa Câu lạc bộ Rob Reiner
Bố già Francis Ford Coppola

Dưới đây là cấu hình chính sách KVM mà chúng ta có thể sử dụng để truy xuất phim phổ biến nhất hiện tại và tên giám đốc:

<Get assignTo="top.movie.pick" index="1">
   <Key>
      <Parameter>top_movies</Parameter>
   </Key>
</Get>
<Get assignTo="movie.director">
   <Key>
      <Parameter ref="top.movie.pick"/>
   </Key>
</Get>

Khi proxy API được gọi, Edge sẽ tạo những nội dung sau các biến mà bạn có thể sử dụng trong luồng proxy API:

  • top.movie.pick=Princess Bride
  • movie.director=Rob Reiner

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <Get>:

Thuộc tính Mô tả Mặc định Sự hiện diện
assignTo

Biến mà giá trị được truy xuất sẽ được chỉ định.

Nếu sơ đồ liên kết của giá trị khoá được mã hoá, hãy bắt đầu tên assignTo bằng "private.". Ví dụ:

<Get assignTo="private.myvar">

Chính sách này sẽ báo lỗi nếu bạn cố gắng truy xuất bản đồ khoá-giá trị đã mã hoá mà không bằng cách sử dụng tiền tố. Tiền tố, bắt buộc cho mục đích bảo mật cơ bản trong gỡ lỗi, ẩn các giá trị đã mã hoá khỏi Theo dõi proxy API và các phiên gỡ lỗi.

Để biết thông tin về cách tạo mối liên kết giá trị khoá được mã hoá, hãy xem phần "tạo" chủ đề của Quản lý Bản đồ giá trị/khoá APITạo và chỉnh sửa bản đồ giá trị khoá của môi trường.

Không áp dụng Bắt buộc
index

Số chỉ mục (trong chỉ mục dựa trên 1) của mục cần tìm nạp từ khoá có nhiều giá trị. Ví dụ: việc chỉ định index=1 sẽ trả về giá trị đầu tiên và gán giá trị đó cho biến assignTo. Nếu không có giá trị chỉ mục nào được chỉ định, tất cả giá trị của mục nhập đó được gán cho biến dưới dạng java.util.List.

Để biết ví dụ, hãy xem phần "Nhận giá trị được mã hoá từ KVM" trong phần Mẫu.

Không áp dụng Không bắt buộc

&lt;InitialEntries&gt; phần tử

Giá trị gốc cho bản đồ khoá-giá trị, được điền sẵn vào bản đồ khoá-giá trị khi khởi tạo. Hãy nhớ chỉ định tên của KVM có thuộc tính mapIdentifier bật phần tử mẹ. ví dụ:

<InitialEntries>
   <Entry>
      <Key>
         <Parameter>key_name_literal</Parameter>
      </Key>
      <Value>v1</Value>
   </Entry>
   <Entry>
      <Key>
         <Parameter>key_name_variable</Parameter>
      </Key>
      <Value>v3</Value>
      <Value>v4</Value>
   </Entry>
</InitialEntries>

Khi sử dụng phần tử này, khi bạn lưu chính sách trong giao diện người dùng quản lý trên một phiên bản đã triển khai của proxy hoặc triển khai gói proxy API chứa chính sách có phần tử này, (các) khoá sẽ tự động được tạo trong KVM (dưới dạng chưa mã hoá). Nếu các giá trị trong chính sách khác nhau so với các giá trị trong KVM, thì các giá trị trong KVM sẽ bị ghi đè khi proxy được triển khai. Bất kỳ hạng nào các khoá/giá trị mới được thêm vào KVM hiện có cùng với các khoá/giá trị hiện có.

Khoá và giá trị được điền bởi phần tử này phải là giá trị cố định. Ví dụ: phần tử này không hỗ trợ <Parameter ref="request.queryparam.key">.

Khoá có kích thước giới hạn ở mức 2 KB cho cả Edge của Public Cloud và Edge dành cho chế độ Riêng tư. Giá trị KVM được giới hạn trong 2 KB.

Để tạo KVM đã mã hoá, hãy sử dụng API quản lý bản đồ khoá/giá trị.

Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

&lt;Key&gt; phần tử

Chỉ định khoá trong một mục ánh xạ khoá/giá trị. Một khoá có thể là khoá kết hợp, tức là nhiều hơn một tham số có thể được nối để tạo khoá. Ví dụ: userIDrole có thể được kết hợp để tạo ra một key. Ví dụ:

<Key>
    <Parameter>key_name_literal</Parameter>
</Key>

Hãy nhớ xem phần tử &lt;Parameter&gt; để biết thông tin cụ thể về cách đặt tên khoá.

Với Edge dành cho Cloud Public, kích thước khoá bị giới hạn ở mức 2 KB. Xem bài viết Sự khác biệt giữa Edge for Public Cloud API và Private Cloud API để biết thêm thông tin.

Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

&lt;Parameter&gt; phần tử

Chỉ định khoá trong một cặp khoá/giá trị. Phần tử này chỉ định tên khi tạo, đặt hoặc xoá cặp khoá/giá trị.

Bạn có thể chỉ định tên bằng cách sử dụng:

  • Chuỗi ký tự

    <Key>
      <Parameter>literal</Parameter>
    </Key>
    
  • Một biến được truy xuất trong thời gian chạy bằng thuộc tính ref

    <Key>
      <Parameter ref="variable_name"/>
    </Key>
    
  • Kết hợp giá trị tham chiếu giá trị cố định và biến tham chiếu

    <Key>
      <Parameter>targeturl</Parameter>
      <Parameter ref="apiproxy.name"/>
      <Parameter>weight</Parameter>
    </Key>
    

Khi phần tử Khoá bao gồm nhiều phần tử Thông số, chuỗi khoá có hiệu lực là nối các giá trị của mỗi thông số, kết hợp bằng dấu gạch dưới đôi. Ví dụ: trong ví dụ ở trên, nếu biến apiproxy.name có giá trị "abc1", thì khoá có hiệu lực sẽ là targeturl__abc1__weight.

Cho dù bạn đang tải, cập nhật hoặc xoá mục nhập khoá/giá trị, tên khoá phải khớp với tên của khoá trong sơ đồ liên kết khoá-giá trị. Hãy xem phần Chỉ định và truy xuất tên khoá để biết nguyên tắc.

Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Chuỗi

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <Parameter>:

Thuộc tính Mô tả Mặc định Sự hiện diện
tham chiếu Chỉ định tên của biến có giá trị chứa tên chính xác của khoá mà bạn muốn tạo, tải hoặc xóa. Không áp dụng Bắt buộc nếu không có giá trị cố định nào được cung cấp giữa phần mở đầu và các thẻ đóng. Cấm nếu bạn cung cấp một giá trị cố định.

&lt;Put&gt; phần tử

Ghi một cặp khoá/giá trị vào một bản đồ khoá-giá trị, cho dù sơ đồ khoá-giá trị được mã hoá hay chưa mã hoá. Nếu liên kết khoá-giá trị được chỉ định trong thuộc tính mapIdentifier trên phần tử mẹ không tồn tại, bản đồ sẽ được tạo tự động (dưới dạng chưa mã hoá). Nếu giá trị khoá ánh xạ đã tồn tại, khoá/giá trị đã được thêm vào ánh xạ đó.

Để tạo sơ đồ liên kết giá trị khoá đã mã hoá, hãy sử dụng API quản lý Bản đồ giá trị/khoá; hoặc xem bài viết Tạo và chỉnh sửa bản đồ giá trị khoá của môi trường để tạo KVM ở phạm vi môi trường đã mã hoá trong giao diện người dùng.

<Put override="false">         
   <Key>             
      <Parameter ref="mykeyvar"/>         
   </Key>         
   <Value ref="myvalvar1"/>     
</Put>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc nếu <Get> hoặc <Delete> không phải là hiện tại.
Loại Không áp dụng

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <Put>:

Thuộc tính Mô tả Mặc định Sự hiện diện
(cơ chế) ghi đè

Nếu bạn đặt thành true, giá trị này sẽ ghi đè giá trị của một khoá.

false Không bắt buộc

&lt;Scope&gt; phần tử

Xác định ranh giới khả năng tiếp cận cho các bản đồ khoá-giá trị. Phạm vi mặc định là environment, nghĩa là theo mặc định, tất cả proxy API sẽ dùng chung các mục nhập bản đồ chạy trong một môi trường (ví dụ: thử nghiệm hoặc sản phẩm). Nếu bạn đặt phạm vi thành apiproxy, thì chỉ proxy API có thể truy cập vào các mục nhập trong sơ đồ khoá-giá trị ghi các giá trị vào bản đồ.

Lưu ý rằng khi truy cập vào một bản đồ hoặc mục nhập bản đồ, bạn phải chỉ định cùng một giá trị phạm vi mà bạn đã sử dụng khi bản đồ được tạo. Ví dụ: nếu bản đồ được tạo với phạm vi apiproxy, bạn phải sử dụng phạm vi apiproxy khi truy xuất các giá trị của nó, đặt thay đổi hoặc xoá mục nhập.

<Scope>environment</Scope>
Mặc định environment
Sự hiện diện Không bắt buộc
Loại Chuỗi
Giá trị hợp lệ:
  • organization
  • environment
  • apiproxy
  • policy (bản sửa đổi proxy API)

&lt;Value&gt; phần tử

Chỉ định giá trị của một khoá. Bạn có thể chỉ định giá trị ở dạng chuỗi cố định hoặc sử dụng thuộc tính ref, dưới dạng một biến được truy xuất trong thời gian chạy:

<!-- Specify a literal value -->
<Value>literal<Value>

hoặc:

<!-- Specify the name of variable value to be populated at run time. -->
<Value ref="variable_name"/>

Bạn cũng có thể thêm nhiều phần tử <Value> để chỉ định một phần giá trị. Các giá trị được kết hợp trong thời gian chạy.

Trong ví dụ sau, 2 khoá được thêm vào KVM:

  • Khoá k1 với các giá trị v1,v2
  • Khoá k2 với các giá trị v3,v4
<InitialEntries>         
   <Entry>             
      <Key>
         <Parameter>k1</Parameter>
      </Key>
      <Value>v1</Value>
      <Value>v2</Value>     
   </Entry>
   <Entry>
      <Key>
         <Parameter>k2</Parameter>
      </Key>
      <Value>v3</Value>
      <Value>v4</Value>
   </Entry>
</InitialEntries>

Trong ví dụ sau, một khoá được tạo bằng hai giá trị. Giả sử tổ chức tên là foo_org, tên proxy API là bar và môi trường là test:

  • Khoá foo_org với các giá trị bar,test
<Put>
    <Key>
        <Parameter ref="organization.name"/>
    </Key>
    <Value ref="apiproxy.name"/>
    <Value ref="environment.name"/>
</Put>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Chuỗi

Thuộc tính

Bảng sau đây mô tả các thuộc tính của phần tử <Value>:

Thuộc tính Mô tả Mặc định Sự hiện diện
tham chiếu Chỉ định tên của biến có giá trị chứa(các) giá trị khóa mà bạn muốn thiết lập. Không áp dụng Bắt buộc nếu không có giá trị cố định nào được cung cấp giữa phần mở đầu và các thẻ đóng. Cấm nếu bạn cung cấp một giá trị cố định.

Tham chiếu lỗi

Các lỗi do chính sách của Edge trả về sẽ có một định dạng nhất quán như mô tả trong phần Tài liệu tham khảo về mã lỗi.

Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi thực thi chính sách.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
steps.keyvaluemapoperations.SetVariableFailed 500

Lỗi này xảy ra nếu bạn cố truy xuất giá trị từ bản đồ giá trị khoá đã mã hoá và đặt giá trị thành một biến có tên không có tiền tố private. Tiền tố (bắt buộc cho các mục đích bảo mật cơ bản trong quá trình gỡ lỗi) sẽ ẩn các giá trị đã mã hoá khỏi công cụ Theo dõi proxy API và các phiên gỡ lỗi.

steps.keyvaluemapoperations.UnsupportedOperationException 500

Lỗi này xảy ra nếu thuộc tính mapIdentifier được đặt thành chuỗi trống trong chính sách về Hoạt động bản đồ giá trị khoá.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
InvalidIndex Nếu thuộc tính index được chỉ định trong phần tử <Get> của chính sách Hoạt động bản đồ giá trị khoá là 0 hoặc là số âm, thì sẽ không triển khai được proxy API. Chỉ mục bắt đầu từ 1, vì vậy chỉ mục có số nguyên hoặc số nguyên âm sẽ được coi là không hợp lệ.
KeyIsMissing Lỗi này xảy ra nếu phần tử <Key> bị thiếu hoàn toàn hoặc phần tử <Parameter> bị thiếu trong phần tử <Key> bên dưới <Entry> của phần tử <InitialEntries> của Chính sách về hoạt động của bản đồ giá trị khoá.
ValueIsMissing Lỗi này xảy ra nếu phần tử <Value> bị thiếu trong phần tử <Entry> của phần tử <InitialEntries> của chính sách Hoạt động bản đồ giá trị khoá.

Giản đồ

Lưu ý về cách sử dụng

Để biết thông tin tổng quan về sơ đồ liên kết khoá-giá trị, hãy xem bài viết Làm việc với sơ đồ liên kết khoá-giá trị.

Kho lưu trữ bản đồ khoá-giá trị cung cấp cơ chế bền vững gọn nhẹ cho dữ liệu được định dạng cặp khoá/giá trị. Bạn có thể truy cập vào các báo cáo này trong thời gian chạy thông qua các chính sách hoặc mã. Một bản đồ chứa bất kỳ dữ liệu tuỳ ý ở định dạng key=value.

Ví dụ: localhost=127.0.0.1, zip_code=94110 hoặc first_name=felix. Trong ví dụ đầu tiên, localhost là một khoá127.0.0.1 là một giá trị. Mỗi cặp khoá/giá trị được lưu trữ dưới dạng một mục nhập trong một khoá bản đồ giá trị. Sơ đồ khoá-giá trị có thể lưu trữ nhiều mục nhập.

Dưới đây là ví dụ về cách sử dụng bản đồ khoá-giá trị. Giả sử bạn cần lưu trữ một danh sách địa chỉ IP được liên kết với nhiều phần phụ trợ môi trường xung quanh. Bạn có thể tạo một bản đồ khoá-giá trị có tên là ipAddresses chứa danh sách cặp khoá/giá trị dưới dạng mục nhập. Ví dụ: JSON này có thể biểu thị một bản đồ như vậy:

{
  "entry" : [ {
    "name" : "Development",
    "value" : "65.87.18.18"
  }, {
    "name" : "Staging",
    "value" : "65.87.18.22"
  } ],
  "name" : "ipAddresses"
}

Bạn có thể dùng cấu trúc này để tạo một kho địa chỉ IP mà các chính sách có thể sử dụng trong thời gian chạy để thực thi danh sách IP được cho phép hoặc danh sách từ chối IP, để tự động chọn một đích phụ trợ và v.v. Thông thường, chính sách KeyValueMapOperations được dùng để lưu trữ hoặc truy xuất thông tin dài hạn cần được sử dụng lại trong nhiều giao dịch yêu cầu/phản hồi.

Bản đồ khoá/giá trị có thể được thao tác thông qua chính sách KeyValueMapOperations hoặc trực tiếp thông qua API quản lý Apigee Edge. Tham khảo tài liệu tham khảo API quản lý để biết thông tin chi tiết về API API bản đồ khoá/giá trị của tổ chức. Bạn có thể sử dụng API để, cho ví dụ: tải các tập dữ liệu lớn lên kho khoá/giá trị hoặc tạo tập lệnh để quản lý khoá/giá trị mục nhập bản đồ. Bạn cần tạo bản đồ khoá/giá trị bằng API trước khi truy cập bản đồ đó bằng Chính sách KeyValueMapOperations.

Chỉ định và truy xuất tên khoá

Với phần tử <Parameter><Value>, bạn có thể chỉ định một giá trị cố định (trong đó giá trị nằm giữa các thẻ mở và đóng) hoặc sử dụng thuộc tính ref để chỉ định tên của một biến có giá trị phải được sử dụng tại thời gian chạy.

Phần tử Thông số cần được đề cập đặc biệt vì nó xác định tên của khoá mà sẽ được tạo, cũng như tên khoá bạn muốn truy xuất hoặc xoá. Sau đây là hai ví dụ. Trường đầu tiên chỉ định tên khoá theo đúng nghĩa đen và trường thứ hai chỉ định tên khoá bằng cách sử dụng một biến. Hãy giả sử các ví dụ sau đây được dùng để tạo khoá trong KVM:

<Parameter>key_name_literal</Parameter>
<Parameter ref="key.name.variable"/>

Trong trường hợp đầu tiên, giá trị cố định của "key_name_literal" được lưu trữ trong KVM dưới dạng khoá . Trong phiên bản thứ hai, bất kỳ giá trị nào trong key.name.variable sẽ trở thành giá trị tên của khoá trong KVM. Ví dụ: nếu key.name.variable chứa có giá trị foo, thì khoá sẽ được đặt tên là "foo".

Khi bạn muốn truy xuất khoá và giá trị khoá bằng thao tác GET (hoặc xoá bằng thao tác DELETE), <Tham số> cần phải khớp với tên khoá trong KVM. Cho ví dụ: nếu tên khoá trong KVM là "foo", bạn có thể chỉ định giá trị cố định bằng <Parameter>foo</Parameter> hoặc chỉ định một biến chứa chính xác giá trị "foo", như sau: <Parameter ref="variable.containing.foo"/>.

Chủ đề có liên quan