Non sono sicuro di come chiedere questo. So che questo è semplicistico, ma capisco (credo):
- REST è un'architettura, non richiesta, semplicemente un modo per creare
- REST è uno stile e uno standard di comunità per il trasferimento dei dati
- REST usa verbi e sostantivi, in particolare il secondo, GET, POST, PUT, DELETE ...
Mentre leggo vedo solo l'architettura dal punto di vista dei consumatori e il creatore dell'API per il consumatore.
Quello che non riesco a trovare è come farlo solo per la mia applicazione. Cosa succede se non sto condividendo nulla con nessuno al momento. Voglio costruire la mia applicazione per seguire questa architettura per il futuro.
Che cosa faccio adesso? Se voglio usare questo tipo di costrutto:
Esempi :
- PUT http://www.example.com/customers/12345
- PUT http://www.example.com/customers/12345/orders/98765
- PUT http://www.example.com/buckets/secret_stuff
La mia applicazione, quando creo una nuova persona, uso un% di HTML% co_de Ora come faccio a fare questo con PUT? Dove va questo?
Se utilizzo http://www.example.com/customers/12345 come faccio a sapere in la mia applicazione che voglio PUT o GET o qualsiasi altra cosa?
Sto usando MVC, dov'è la mia azione? Mi rendo conto che il consumatore potrebbe usare la mia architettura / servizio con nomi, ma questo è solo per me. Come faccio a sapere cosa fare, se non riesco a utilizzare PUT in un tag form?
In questo momento utilizzo la mia pagina PHP per afferrare la stringa di query basata su una RewriteRule:
require_once("database\adapters\PDO\Database.bootstrap.php");
class App {
protected $_controller = 'Welcome';
protected $_method = 'index';
protected $_params = [];
protected $_model = 'Welcome';
public function __construct(){
$url = $this->parseURL();
//This works because I put the rewrite rules in IIS;
//Our RewriteRule in IIS (or Apache) is ^(.+)$ This is any character saved to a variable.
//The new location is index.php?url=$1 [QSA, L]. This will look a little different after you import it into IIS.
if (file_exists('app\controllers\' . $url[0] . '.controller.php')){
$this->_controller = $url[0];
$this->_model = $url[0];
unset($url[0]); //Unset removes that element from the array;
//var_dump($url);
}
//Get the controller and model. All done by convention over configuration;
require_once 'app\controllers\' . $this->_controller . '.controller.php';
require_once 'app\models\Parent.model.php';
//get a new Database object from the bootstrap;
$_DB = new DatabaseBootstrap();
$this->_controller = $this->_controller . "Controller";
$this->_model = new ParentModel($_DB->getAdapter());
$this->_controller = new $this->_controller($this->_model);
//This checks to see if our method from the url exists;
//Your querystring will look like this - http://server/virtualdirectory/controller/action/variables1/variable2.....
if(isset($url[1])){
if(method_exists($this->_controller,$url[1])){
$this->_method = $url[1];
unset($url[1]);
}
}
$this->_params = $url ? array_values($url) : [];
//This calls your controller and your method and sends over your array of parameters
call_user_func_array([$this->_controller, $this->_method],$this->_params)
}
public function parseURL(){
if(isset($_GET['url'])){
return $url = explode('/',filter_var(rtrim($_GET['url'],'/'),FILTER_SANITIZE_URL));
}
}
EDIT: in base alla mia lettura delle risposte, sembra che non sia possibile utilizzare REST in modo nativo come quando si utilizzano i verbi HTTP. O devo usare il nome dei tipi in AJAX o devo avere un campo nascosto che contiene il mio metodo REST in questo modo (esempio da cakePHP ):
<form id="RecipeEditForm" method="post" action="/recipes/edit/5">
<input type="hidden" name="_method" value="PUT" />
E sembra che ciò sia fatto per il "bene superiore". Cioè, in modo che altri possano consumare i miei servizi API utilizzando librerie come curl o usando AJAX dove è possibile creare qualsiasi metodo di richiesta che desiderano (?). Dal momento che stiamo usando un'architettura REST, il consumatore che utilizza l'API potrebbe semplicemente mettere PUT, DELETE, ecc. Alcune architetture future potrebbero non utilizzare quei verbi, quindi creiamo nuove parole chiave. È solo che PUT, ecc. Sono nelle specifiche w3 per HTTP, che non sono molto ben supportate.?