Lập trình proxy API với JavaScript

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

Trong chủ đề này, bạn sẽ tìm hiểu cách sử dụng JavaScript để tự động thêm tiêu đề HTTP vào thông báo phản hồi và cách phân tích cú pháp phản hồi JSON cũng như trả về một tập hợp con các thuộc tính của phản hồi đó cho ứng dụng yêu cầu.

Tải xuống và dùng thử mã mẫu

Giới thiệu ví dụ về sổ tay nấu ăn này

Ví dụ về sổ tay nấu ăn này minh hoạ một mẫu proxy API mà trong đó bạn triển khai hành vi của API trong JavaScript. Các ví dụ về JavaScript được thiết kế để cho bạn biết cách làm việc với các biến đơn giản và nội dung tin nhắn. Dưới đây là một ví dụ về cách lấyđặt các biến. Thứ hai ví dụ cho bạn biết cách phân tích cú pháp JSON và tạo thông báo từ kết quả.

Hai mẫu JavaScript nằm trong proxy API:

  • setHeaders.js: JavaScript này nhận giá trị của một vài biến được đặt khi proxy API được gọi. JavaScript thêm các biến đó vào phản hồi để bạn có thể thấy giá trị của thông báo đó cho mỗi yêu cầu mà bạn đưa ra.
  • minimize.js: JavaScript này cho bạn biết cách làm việc với thông báo nội dung. Ý tưởng đằng sau mẫu này là một dịch vụ thường trả về nhiều dữ liệu hơn nếu cần. Vì vậy, JavaScript phân tích cú pháp thông báo phản hồi, trích xuất một số rồi sử dụng các thuộc tính đó để xây dựng nội dung của thông báo phản hồi.

Mã cho setHeader.js:

context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
context.setVariable("response.header.X-Apigee-ApiProxyName", context.getVariable("apiproxy.name"));
context.setVariable("response.header.X-Apigee-ProxyName", context.getVariable("proxy.name"));
context.setVariable("response.header.X-Apigee-ProxyBasePath", context.getVariable("proxy.basepath"));
context.setVariable("response.header.X-Apigee-ProxyPathSuffix", context.getVariable("proxy.pathsuffix"));
context.setVariable("response.header.X-Apigee-ProxyUrl", context.getVariable("proxy.url"));

Mã cho minimize.js:

// Parse the respose from the target.
var res = JSON.parse(context.proxyResponse.content);

// Pull out only the information we want to see in the response.
var minimizedResponse = { city: res.root.city,
                          state: res.root.state };
          
// Set the response variable. 
context.proxyResponse.content = JSON.stringify(minimizedResponse);

Bạn có thể truy cập vào các biến luồng trong JavaScript thông qua đối tượng ngữ cảnh. Đối tượng này là một phần của mô hình đối tượng JavaScript của Edge. Để biết thông tin chi tiết về mô hình đối tượng, hãy xem bài viết Mô hình đối tượng JavaScript.

Trước khi bắt đầu

Trước khi tìm hiểu ví dụ về sổ tay nấu ăn này, bạn cũng chắc hẳn đã nắm rõ những kiến thức cơ bản sau đây các khái niệm:

  • Chính sách là gì và cách đính kèm chính sách vào proxy. Để giới thiệu sơ lược về các chính sách, hãy xem bài viết Sự kiện phát trực tiếp chính sách của Google?.
  • Cấu trúc của luồng proxy, như giải thích trong Định cấu hình luồng. Flow cho phép bạn chỉ định trình tự thực thi các chính sách bằng proxy API. Trong ví dụ này, có vài các chính sách này được tạo và thêm vào luồng proxy API.
  • Cách sắp xếp dự án proxy API trên hệ thống tệp của bạn, như giải thích trong Tài liệu tham khảo về cấu hình proxy API.
  • Có kiến thức thực tế về XML, JSON và JavaScript. Trong ví dụ này, bạn xây dựng API và các chính sách của proxy đó cùng với các tệp XML nằm trên hệ thống tệp.

Nếu đã tải mã mẫu xuống, bạn có thể xác định vị trí tất cả các tệp được thảo luận trong bài viết này chủ đề trong thư mục mẫu javascript-cookbook. Các phần sau đây thảo luận mã mẫu một cách chi tiết.

Tìm hiểu luồng proxy

Để JavaScript thực thi trong một proxy API, bạn phải đính kèm JavaScript vào một luồng bằng cách sử dụng chính sách tệp đính kèm có tên là 'Bước'. Chính sách thuộc loại JavaScript (viết hoa ghi chú) chỉ chứa tham chiếu đến tên của tệp JavaScript. Bạn trỏ chính sách này đến một tệp JavaScript bằng cách sử dụng Phần tử ResourceURL.

Ví dụ: chính sách sau đây tham chiếu tệp JavaScript có tên setHeader.js.

<Javascript name='setHeaders' timeLimit='200'>
    <ResourceURL>setHeaders.js</ResourceURL>
</Javascript>

Bạn có thể đính kèm chính sách này vào luồng proxy API giống như cách bạn thực hiện với bất kỳ loại chính sách nào khác. Theo đính kèm chính sách này vào luồng proxy API, bạn cho biết vị trí JavaScript sẽ được thực thi. Nhờ vậy, bạn có thể thực thi JavaScript tương tác với thông báo yêu cầu hoặc thông báo phản hồi khi những thông báo đó "luồng" thông qua proxy API. Trong ví dụ này, cả hai JavaScript đều thực thi trong phản hồi, vì chính sách có hai việc: đặt tiêu đề HTTP trên thông báo phản hồi và "giảm thiểu" thông báo phản hồi cho biết Apigee Edge quay lại ứng dụng yêu cầu.

Nếu mở cấu hình luồng này trong giao diện người dùng quản lý, bạn sẽ thấy cấu hình luồng bên dưới.

Chọn Proxy Endpoints > mặc định > PostFlow trong Navigator .

Cấu hình XML tương ứng cho ProxyEndpoint có tên là 'default' được hiển thị bên dưới.

<ProxyEndpoint name="default">
  <PostFlow>
    <Response>
      <!-- Steps reference policies under /apiproxy/policies -->
      <!-- First, set a few HTTP headers with variables for this transaction. -->
      <Step><Name>setHeaders</Name></Step>
      <!-- Next, transform the response from XML to JSON for easier parsing with JavaScript -->
      <Step><Name>transform</Name></Step>
      <!-- Finally, use JavaScript to create minimized response with just city and state. -->
      <Step><Name>minimize</Name></Step>
    </Response>
  </PostFlow>
  <HTTPProxyConnection>
        <!-- BasePath defines the network address for this API proxy. See the script 'invoke.sh' to see how the complete URL for this API proxy is constructed.-->
    <BasePath>/javascript-cookbook</BasePath>
     <!-- Set VirtualHost to 'secure' to have this API proxy listen on HTTPS. -->
    <VirtualHost>default</VirtualHost>
  </HTTPProxyConnection>
  <RouteRule name="default">
    <TargetEndpoint>default</TargetEndpoint>
  </RouteRule>
</ProxyEndpoint>

Dưới đây là tóm tắt các phần tử của luồng.

  • &lt;Request&gt; – <Request> phần tử bao gồm một số &lt;Step&gt; phần tử. Mỗi bước gọi một trong các chính sách mà bạn tạo thông qua phần còn lại của chủ đề này. Những chính sách này đính kèm JavaScript vào luồng proxy API và vị trí của tệp đính kèm chính sách xác định thời điểm thực thi JavaScript.
  • &lt;Response&gt; - <Response> cũng bao gồm <Các bước>. Các bước này cũng gọi các chính sách chịu trách nhiệm xử lý bản phản hồi của mục tiêu (trong ví dụ này là mục tiêu dịch vụ mô phỏng của Apigee). Hãy lưu ý rằng cài đặt HTTPTargetConnection trong /apiproxy/targets/default.xml.)
  • &lt;HTTPProxyConnection&gt; – Chỉ định đường dẫn lưu trữ và URI xác định địa chỉ mạng mà ứng dụng gọi để sử dụng API này.
  • &lt;RouteRule&gt; - Phần tử này chỉ định TargetEndpoint được ProxyEndpoint gọi ra.

Thêm mã JavaScript vào proxy

JavaScript (như tập lệnh Python, tệp JAR Java, tệp KML, v.v.) được lưu trữ dưới dạng tài nguyên của chúng tôi. Khi bạn mới bắt đầu làm việc với JavaScript, cách dễ nhất là lưu trữ Tệp JavaScript trong proxy API. Khi bạn tiếp tục, JavaScript nên được tạo dưới dạng chung và có thể tái sử dụng và sau đó được lưu trữ ở cấp môi trường hoặc tổ chức. Điều này giúp bạn không phải lưu trữ cùng một tệp JavaScript trong nhiều proxy API. Điều này có thể nhanh chóng trở nên không thể quản lý được.

Để tìm hiểu về cách lưu trữ tài nguyên ở cấp tổ chức và môi trường, hãy xem bài viết Tệp tài nguyên.

Dùng thử

Để biết hướng dẫn về cách triển khai và gọi proxy, hãy xem README về sổ tay nấu ăn JavaScript.

Nhập và triển khai proxy API

Sau khi thay đổi, bạn có thể Lưu proxy API trong trình tạo proxy API trong quản lý giao diện người dùng.

Hoặc bạn có thể chạy lệnh sau trong thư mục /api-platform-samples/doc-samples/javascript-cookbook.

$ sh deploy.sh

Kiểm thử JavaScript

Chạy lệnh sau trong thư mục /api-platform-samples/doc-samples/javascript-cookbook.

$ sh invoke.sh

Cờ curl -v được dùng trong tập lệnh shell để xem tiêu đề HTTP trên phản hồi thông báo do JavaScript sửa đổi.

Bạn có thể trực tiếp gửi yêu cầu như sau:

$ curl -v http://{org_name}-test.apigee.net/javascript-cookbook 

Nếu JavaScript thực thi đúng cách, bạn sẽ thấy một phản hồi như sau:

< X-Apigee-Demo-Target: default
< X-Apigee-Demo-ApiProxyName: simple-javascript
< X-Apigee-Demo-ProxyName: default
< X-Apigee-Demo-ProxyBasePath: /javascript-cookbook
< X-Apigee-Demo-ProxyPathSuffix: /xml
< X-Apigee-Demo-ProxyUrl: http://rrt331ea.us-ea.4.apigee.com/javascript-cookbook/xml
 
{"city":"San Jose","state":"CA"}

Giờ đây, bạn có thể sửa đổi JavaScript để thử những tính năng mới, triển khai lại proxy API và xác minh bằng cách gửi cùng một yêu cầu. Luôn đảm bảo bạn triển khai proxy API có chứa JavaScript để những thay đổi của bạn có hiệu lực.

Lỗi tập lệnh

Chắc chắn bạn sẽ gặp lỗi khi viết JavaScript. Định dạng của lỗi JavaScript bạn sẽ thấy proxy API phát hành được hiển thị bên dưới.

{  
   "fault":{  
      "faultstring":"Execution of rewriteTargetUrl failed with error: Javascript runtime error: \"TypeError: Cannot find function getVariable in object TARGET_REQ_FLOW. (rewriteTargetUrl_js#1). at line 1 \"",
      "detail":{  
         "errorcode":"steps.javascript.ScriptExecutionFailed"
      }
   }
}

Thời điểm sử dụng JavaScript

Trên Apigee Edge, thường có nhiều cách để triển khai chức năng cụ thể. Sử dụng các chính sách có sẵn ngay khi có thể, đồng thời tránh lập trình tất cả proxy API của bạn logic trong JavaScript. Mặc dù Apigee Edge tận dụng JavaScript tổng hợp để cải thiện hiệu suất, ít có khả năng JavaScript sẽ hoạt động tốt như Chính sách. JavaScript có thể khó duy trì và gỡ lỗi hơn. Đặt trước JavaScript cho chức năng dành riêng cho bạn các yêu cầu liên quan.

Nếu bạn quan tâm đến hiệu suất của chức năng tuỳ chỉnh, hãy dùng Java nếu có thể.

Tóm tắt

Trong chủ đề sổ tay nấu ăn này, bạn đã tìm hiểu cách đưa JavaScript vào proxy API cấu hình để triển khai hành vi tuỳ chỉnh. Hành vi tuỳ chỉnh do mẫu triển khai minh hoạ cách nhận và biến, cũng như cách phân tích cú pháp JSON và tạo phản hồi tuỳ chỉnh tin nhắn.