2013-09-28 385 views
5

Tôi muốn tạo một ứng dụng web api-trung tâm api trung tâm/trang web nơi tôi có dữ liệu/api được gọi từ mã kết thúc trước của tôi. Bên cạnh việc thực hiện các cuộc gọi yêu cầu HTTP/curl mỗi khi tôi tải một trang, tôi có thể làm gì cho các cuộc gọi API nội bộ bằng cách sử dụng các khung công tác như mỏng?Làm thế nào để sử dụng một php thiết kế api trung tâm nội bộ thay vì với http yêu cầu

Tôi không chắc chắn cách nào để bao gồm api để sử dụng nội bộ trong mã giao diện người dùng của tôi và vẫn giữ nguyên nó.

những suy nghĩ của tôi là một cái gì đó như thế này:

"example.com/api/story/todays-weather/" 
pulls in the json formatted story with a http request with curl or Ajax 

Nhưng thay vào đó tôi có thể làm một cái gì đó như:

require("/api/internal.php"); 
$uri = "/story/todays-weather/"; 
$call = api::getStory($uri); 
$result = json_decode($call); 
..... 

Tôi đầu đi đúng hướng hay tôi cách tắt?

Mã api và mã trước nằm trên cùng một hộp đám mây (Amazon E2/LAMP) và tôi đang định sử dụng memcached cho api.

+0

tôi đoán những gì bạn đang tìm kiếm cùng với cách gọi api bằng cách sử dụng uri từ ajax và cuộn tròn như thế này, 'example.com/api/story/todays-weather' bạn muốn truy cập từ một phần khác của mã php mà kết thúc trước của render? – Mohit

+0

Tôi không thấy lý do nào bạn không thể làm điều đó. Nó sẽ cho phép bạn quản lý chỉ một bộ mã trong khi mở API để sử dụng bên ngoài. Hãy chắc chắn rằng bạn suy nghĩ thông qua mô hình mở rộng của bạn để bạn không gặp bất kỳ sự ngạc nhiên nào. –

Trả lời

0

Bạn có muốn tách mã giữa API và công cụ giao diện người dùng không? Bạn có thể sử dụng Slim Framework để làm điều đó, do đó bạn sẽ có một mã dễ bảo trì. Slim Framework là rất dễ dàng để viết các mô hình và cũng chuẩn bị dữ liệu để sử dụng trong tương lai và thậm chí cả bộ nhớ cache nó.

Cũng có một cái nhìn vào danh sách này của PHP Khung RESTful API: http://davss.com/tech/php-rest-api-frameworks/

Bạn cũng có thể tham gia một cách tiếp cận khác nhau và sử dụng mô hình front-end để làm cả hai việc tách mã và có một cấu trúc mã đẹp. Đối với điều đó tôi khuyên bạn nên Backbone.js sẽ cung cấp một số ràng buộc khóa-giá trị tốt đẹp và xử lý sự kiện cho mã front-end của bạn.

0

Sử dụng mẫu MVC theo ý của chúng tôi, viết một mô hình với 2 chế độ xem khác nhau. Trông giống như bạn đang làm một cái gì đó tương tự như ở đây:

require("/api/internal.php"); 
$uri = "/story/todays-weather/"; 
$call = api::getStory($uri); 
$result = json_decode($call); 

Bằng cách đó bạn có một sự tách biệt giữa Frontend và API, nhưng phần quan trọng là như nhau, làm giảm sự trùng lặp mã.

Tìm đúng hướng với tôi.

0

Tôi có một dịch vụ web PHP cung cấp một trang php khác, về cơ bản người dùng có thể nhấn nút trực tuyến và dịch vụ web được gọi nhiều lần để dễ bảo trì, không chắc đây có phải là thứ bạn cần hay không tốt cho tôi ngay bây giờ, đây là một phần của mã.

Dịch vụ web của tôi trả về json hoặc xml, tôi tìm thấy phần này trên web và được sửa đổi để phù hợp với nhu cầu của tôi.

<?php 
case 'whateveryourwebserviceaction': 

     $params = array("test"); 
     $tsql = "select * from test where test=?"; 
     /*Execute the query with a scrollable cursor so 
      we can determine the number of rows returned.*/ 
     $cursorType = array("Scrollable" => SQLSRV_CURSOR_KEYSET); 
     $getProducts = sqlsrv_query($conn, $tsql, $params, $cursorType); 
     if ($getProducts === false) 
     die(FormatErrors(sqlsrv_errors())); 

     $posts = array(); 
     while($post = sqlsrv_fetch_array($getProducts, SQLSRV_FETCH_ASSOC)) 
     { 
      $posts[]=array('post'=>$post); 

     } 


    break; 


    } 

    if($format == 'json') { 
     header('Content-type: application/json'); 
     echo json_encode(array('posts'=>$posts)); 
    } 
    else { 
     header('Content-type: text/xml'); 
     echo '<posts>'; 
     foreach($posts as $index => $post) { 
      if(is_array($post)) { 
       foreach($post as $key => $value) { 
        echo '<',$key,'>'; 
        if(is_array($value)) { 
         foreach($value as $tag => $val) { 
          echo '<',$tag,'>',htmlentities($val),'</',$tag,'>'; 
         } 
        } 
        echo '</',$key,'>'; 
       } 
      } 
     } 
     echo '</posts>'; 
    } 
?> 

Và đây là cách tôi gọi điều này từ trang php của tôi bằng cách sử dụng jquery.

$.ajax({ 
         type: "GET", 
         url: "htto:\\server.com?action=whateveryourwebserviceaction&format=json", 
         dataType: "xml", 
         success: parseXml, 
         error: function (xml) { 
          alert(xml.status + ' ' + xml.statusText); 
          }}); 

bạn có thể gọi hàm này trên bất kỳ người dùng nhập và làm mới nào với kết quả do webservice cung cấp, hy vọng điều này sẽ giúp bạn tiếp tục.