Sử dụng Drupal làm khách hàng của dịch vụ web


8

Tôi cần sử dụng Drupal làm máy khách cho một dịch vụ web, để trích xuất dữ liệu và hiển thị nó trong chế độ xem hoặc dưới dạng nội dung. (Định dạng sử dụng là JSON hoặc REST.)

Tôi sử dụng mô-đun Máy khách Dịch vụ Web trong Drupal 7 và mô-đun Dịch vụ trong Drupal 6, nhưng tôi không biết cách sử dụng chúng. Tôi đọc tài liệu nhưng tôi không nhận được kết quả.

Bất cứ ai có thể giúp đỡ về vấn đề này, hoặc cho tôi biết làm thế nào để sử dụng các mô-đun? Có bất kỳ mô-đun khác cho mục đích này?


Một giải pháp khả thi: Tôi tìm thấy một mô-đun có tên XML VIEWS nhưng mô-đun này chỉ chuyển đổi các tệp XML.

Bây giờ, tôi lập trình trong mô-đun này để chuyển đổi JSON thành XML.

Trong tập tin này: xml_views_plugin_query_xml.inc

Trong chức năng này: Thực thi

Bất cứ ai có một giải pháp khác?


Có một số bài thuyết trình hay về điều này tại austin (11) drupalcamp: vimeo.com/33785095 vimeo.com/33091201
chrisjlee

Câu trả lời:


9

Drupal có các chức năng cụ thể có thể giúp giao tiếp với dịch vụ web và xử lý đầu vào JSON.
Drupal 7 có các chức năng sau:

  • drupal_http_Vquest () là chức năng thực hiện yêu cầu HTTP đến một trang web từ xa và nó xử lý GET, POST, PUT hoặc bất kỳ yêu cầu HTTP nào khác; nó cũng xử lý các chuyển hướng.
  • drupal_http_build_query () biến đổi một mảng trong rawurlencode()chuỗi -d.
  • drupal_json_decode () giải mã chuỗi JSON trong mã PHP.
  • drupal_json_encode () mã hóa một biến PHP thành một chuỗi được xử lý bởi JSON.

Với các chức năng đó, bạn có thể viết mô-đun tùy chỉnh của riêng mình để yêu cầu một trang web triển khai dịch vụ web.

Nếu có một số hạn chế về số lượng yêu cầu có thể được thực hiện đối với máy chủ web, bạn có thể sử dụng các chức năng Drupal để lưu trữ kết quả thu được từ máy chủ web:

  • cache_get () , để lấy dữ liệu được lưu trong bộ đệm
  • cache_set () , để lưu dữ liệu trong bộ đệm

Để nhận thấy rằng Drupal hỗ trợ nhiều hơn một thùng bộ đệm và các mô-đun có thể sử dụng các thùng bộ nhớ cache của riêng họ, khi cần thiết.
Drupal cũng hỗ trợ các mục bộ đệm được tự động xóa trong lần vuốt bộ đệm liên tiếp (xem mô tả cho hằng số CACHE_TEMPORARY ). Thực hiện hook_flush_caches () , các mô-đun cho phép người dùng quản trị viên dọn dẹp bộ đệm được sử dụng bởi mô-đun khi nhấp vào nút "Xóa" trên trang "Hiệu suất" hoặc bất kỳ khi nào mô-đun gọi drupal_flush_all_caches () .

Trong Drupal 7, dữ liệu bộ đệm cho dữ liệu được sử dụng thường xuyên được liên kết với một biến tĩnh được xử lý với drupal_static () . Khi dữ liệu thực sự được sử dụng thường xuyên khi xuất ra cùng một trang, mã tương tự như sau được sử dụng:

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
  }
  $implementations = &$drupal_static_fast['implementations'];

  // …

  // Fetch implementations from cache.
  if (empty($implementations)) {
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    if ($implementations === FALSE) {
      $implementations = array();
    }
    else {
      $implementations = $implementations->data;
    }
  }

Mã này là một phần của module_implements () .


Bạn đã thử drupal.org/project/wsclient ? Tôi quan tâm nếu mô-đun này giúp triển khai ứng dụng khách của ws
milkovsky

2

Mỗi khi tôi cần sử dụng dịch vụ web, tôi vừa tạo một lớp PHP dựa trên file_get_contents hoặc curl kết hợp với json_decode hoặc simplexml_load_opes .

Sau đó, lớp được truy cập trong một mô-đun thông qua hàm getter sử dụng drupal_static hoặc $staticmẫu cho Drupal 6.

Sau đó tôi sử dụng cái này bên trong các khối tùy chỉnh, gọi lại menu, v.v., nếu cần.

BIÊN TẬP

Câu trả lời của @ kiamlaluno là chính xác và thể hiện một cách để làm tất cả điều này thông qua API Drupal. Lý do chính tôi không làm điều này là vì tôi thích trừu tượng hóa lớp dịch vụ web theo cách cho phép tôi sử dụng nó trong các ứng dụng khác. Có những lợi thế và bất lợi cho việc này, vì vậy hãy cân nhắc lựa chọn của bạn.


Điều đó có nghĩa là tôi lên lịch để tiêu thụ dữ liệu từ dịch vụ web? Có một giải pháp như sitebuilder với các mô-đun?
Dvex

Tôi xin lỗi, nhưng tôi không hiểu bạn đang cố gắng làm gì.
mpdon Arena

Nói cách khác, tôi tìm kiếm một giải pháp không liên quan đến lập trình. Một giải pháp như một người xây dựng trang web với các mô-đun. Nhưng, nếu trong trường hợp của tôi liên quan đến lập trình, tôi cần các bước để làm điều đó.
Dvex

Bạn có thể cung cấp một ví dụ về lớp dịch vụ web trừu tượng?
milkovsky
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.