2015-10-02 1 views
1

J'ai une application Web qui utilise JSON-RPC. Il y a un rest.php de fichier qui contient le code comme ceci:Passer de JSON-RPC à une API RESTful simple

$body = file_get_contents('php://input'); 
$jsonObj = json_decode($body); 
switch ($jsonObj->method) { 
     case 'API1': //function1 

       header($_SERVER['SERVER_PROTOCOL']." 200 OK"); 
       break; 
     case 'API2': //function2 

       header($_SERVER['SERVER_PROTOCOL']." 200 OK"); 
       break; 
     default: 
      header($_SERVER['SERVER_PROTOCOL']." 400 Bad request"); 
      break; 
    } 

la structure de commutation envoie la demande en fonction du paramètre « méthode ». Je veux le changer. Je veux créer une seule API REST pour chaque fonction, chacune avec son URI. Donc sans le paramètre "méthode".

Quelqu'un peut-il me donner un indice? Je dois créer un fichier pour chaque API REST? C'est la première fois que l'API REST est créée en php.

Merci beaucoup.

Répondre

1

Il y a plusieurs façons d'y parvenir. Personnellement, je préfère envoyer les demandes via le routage URI [1]. Si le routage URI n'est pas une option, j'implémenterais la table de recherche pour répartir les demandes. Par exemple, s'il y a plusieurs ressources:

/books 
/cars 
/music 

je voudrais traiter les demandes en fonction de $ _SERVER [ 'REQUEST_URI'] voir [2]. Exemple:

$lookup_table = array(
    '/books' => function($method) { 
     switch ($method) { 
      case 'GET': { // handle GET request 

      } break; 

      case 'POST': { // handle POST request 

      } break; 
     } 
    }, 

    '/authors' => function($method) { 
     switch ($method) { 
      case 'GET': { // handle GET request 

      } break; 

      case 'PUT': { // handle PUT request 

      } break; 
     } 
    } 
); 

// this is simplification 
// REQUEST_URI needs some work before used 
$uri = $_SERVER['REQUEST_URI']; 

if (isset($lookup_table[$uri])) { 
    $lookup_table[$uri]($_SERVER['REQUEST_METHOD']); 
} 

Je pense que cet exemple simplifié vous donnera quelques indications.

  1. http://symfony.com/doc/current/components/routing/introduction.html
  2. http://php.net/manual/en/reserved.variables.server.php