2013-09-28 11 views
5

Voglio creare un php restful web application/sito web api-centrico in cui ho i dati/API che vengono richiamati dal mio front-end. Oltre a effettuare chiamate di richieste HTTP/arricciature ogni volta che carico una pagina, cosa posso fare per le chiamate API interne utilizzando framework come Slim?Come utilizzare un design api centrico php restful interno invece che con richiesta http

Non sono sicuro di un modo per includere l'api per uso interno nel mio codice di front end e mantenerlo sempre a parte.

Il mio pensiero è stato qualcosa di simile:

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

Ma invece avrei potuto fare qualcosa di simile:

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

Perchè mi sono diretto nella direzione giusta o sono io fuori strada?

L'api e il codice di fronte si trovano sullo stesso cloud box (Amazon E2/LAMP) e sto pianificando di utilizzare memcached per l'API.

+0

Immagino che quello che stai cercando sia un modo per chiamare l'API usando l'uri da ajax, e arricciati come questo, esempio.com/api/story/todays-weather' vuoi accedere allo stesso da un'altra parte del codice php che rende il front-end del rendering? – Mohit

+0

Non vedo alcuna ragione per cui tu non possa farlo. Ti consente di gestire un solo set di codici durante l'apertura dell'API per uso esterno. Assicurati di pensare al tuo modello di ridimensionamento in modo da non incorrere in sorprese. –

risposta

0

Quindi vuoi avere una separazione di codice tra API e front-end? Potresti utilizzare Slim Framework per farlo in modo da avere un codice facilmente gestibile. Slim Framework è molto facile da scrivere modelli e anche preparare i dati per un utilizzo futuro e persino memorizzarli nella cache.

hanno anche un'occhiata a questa lista di PHP Frameworks API RESTful: http://davss.com/tech/php-rest-api-frameworks/

Si potrebbe anche adottare un approccio diverso e utilizzare modelli di front-end per fare entrambe le cose la separazione del codice e hanno una bella struttura del codice. Per questo consiglio lo Backbone.js, che fornirà alcuni validi binding di valori-chiave e gestione degli eventi per il tuo codice front-end.

0

Utilizzare il modello MVC a nostro favore, scrivere un modello con 2 diverse viste. guardare come si sta facendo qualcosa di simile qui:

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

In questo modo si ha una separazione tra il frontend e l'API, ma la parte importante è lo stesso, riducendo la duplicazione del codice.

Guarda la direzione giusta per me.

0

Ho un servizio web PHP che alimenta un'altra pagina php, in pratica l'utente può premere un pulsante online e il servizio web viene chiamato ha molte volte se necessario, facilitando la manutenzione, non è sicuro se questo è ciò che serve ma funziona bene per me adesso, qui fa parte del codice.

Il mio servizio web restituisce json o xml, ho trovato questo pezzo sul Web e modificato per adattarlo alle mie esigenze.

<?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>'; 
    } 
?> 

Ed ecco come chiamo questa cosa dalla mia pagina php utilizzando jquery.

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

si può chiamare questa funzione in qualsiasi input dell'utente e aggiornare con i risultati forniti dal webservice, speriamo che questo vi aiuterà a andare avanti.

Problemi correlati