PHP RESTful
REST (inglese: Representational State Transfer, chiamato REST), si riferisce a un insieme di vincoli architettonici e principi.
REST-stile di disegno Web API viene chiamata una API RESTful. Essa è definita dalle seguenti tre risorse:
- Intuitivo breve risorsa indirizzo: URI, ad esempio:
http://example.com/resources/
. - risorsa di trasmissione: servizio Web accetta il ritorno di tipi di media di Internet, come ad esempio: JSON, XML, YAM piace.
- Funzionamento delle risorse: metodo di servizio Web in una serie di richieste sulla risorsa supportato (ad esempio: POST, GET, PUT e DELETE).
Questo tutorial useremo il PHP (senza cornice) per creare un servizio Web RESTful, è possibile scaricare alla fine di questo articolo di utilizzare il codice in questa sezione.
In questo tutorial, imparerete quanto segue:
- Creare un webservice RESTful.
- Utilizzo di PHP nativo, non dipende da alcun quadro.
- RIPOSO modello URI a seguire le regole.
- servizi RESTful accetta e formato può essere restituito JSON, XML e così via.
- codici di stato HTTP di risposta a seconda della situazione corrispondente.
- richieste Demo intestazione.
- Utilizzare client REST per testare il servizio Web RESTful.
Esempi di Webservice RESTful
Il seguente codice è riposante classe di servizio Site.php:
Esempi
/ *
* Questo tutorial mostra esempi di RESTful
* Classe di servizio RESTful
* /
Classe del sito {
$ siti privati = array (
1 => 'TaoBao',
2 => 'Google',
3 => 'w3big',
4 => 'Baidu',
5 => 'Weibo',
6 => 'Sina'
);
Funzione pubblica getAllSite () {
return $ questo - siti>;
}
Funzione pubblica getSite ($ id) {
$ Sito = array ($ id = > ($ this -> siti [$ id]) $ this -> siti [$ id] :? $ questo -> siti [1]);
return $ sito;
}
}
?>
mappatura RESTful Servizi URI
RESTful Servizi URI deve essere impostato su un breve indirizzo di risorse visive. Server Apache .htaccess dovrebbe essere istituito corrispondenti regole di riscrittura.
In questo esempio useremo due regole URI:
1, per ottenere un elenco di tutti i siti:
http://localhost/restexample/site/list/
2, usando l'id per il sito specificato, il seguente URI per ottenere l'ID di 3 siti:
http://localhost/restexample/site/list/3/
regole di configurazione file.htaccess del progetto sono i seguenti:
# 开启 rewrite 功能 Options +FollowSymlinks RewriteEngine on # 重写规则 RewriteRule ^site/list/$ RestController.php?view=all [nc,qsa] RewriteRule ^site/list/([0-9]+)/$ RestController.php?view=single&id=$1 [nc,qsa]
Controller RESTful Web Service
Nel file.htaccess, otterremo RestController.php il file corrispondente richiesta impostando il parametro 'view', ottenendo diversi parametri 'Visualizza' da distribuire ai diversi metodi.codice del file RestController.php è il seguente:
Esempi
require_once ( "SiteRestHandler.php");
$ View = "";
if (isset ($ _GET & # 91; "vista" & # 93;))
$ View = $ _GET & # 91 ; "vista" & # 93 ;;
/ *
* Controller di servizio RESTful
* Mappatura URL
* /
switch ($ vista) {
caso "tutto":
// Handle REST URL / sito / list /
$ SiteRestHandler = new SiteRestHandler ();
$ SiteRestHandler -> getAllSites ();
break;
caso "unico":
// Handle REST URL / sito / mostra / < id> /
$ SiteRestHandler = new SiteRestHandler ();
$ SiteRestHandler -> getSite ($ _GET [ "id"]);
break;
caso "":
// 404 - non trovato;
break;
}
?>
Semplici Classes RESTful Foundation
Ciò che segue fornisce una classe base RESTful per l'elaborazione in risposta alla richiesta del codice di stato HTTP, codice del file SimpleRest.php è il seguente:
Esempi
/ *
* Un semplice i servizi web RESTful classe base
* Possiamo estendere questa classe in base alla domanda
* /
class SimpleRest {
$ Privata httpVersion = "HTTP / 1.1 ";
setHttpHeaders funzione pubblica ($ ContentType, $ StatusCode) {
$ StatusMessage = $ this -> getHttpStatusMessage ($ statusCode);
intestazione ($ this -> httpVersion " " $ statusCode .. "" $ statusMessage ..);
header ( "Content-Type:" $ contentType.);
}
Funzione pubblica getHttpStatusMessage ($ statusCode) {
$ HttpStatus = array (
100 => 'Continua',
101 => 'Protocolli di commutazione',
200 => 'OK',
201 => 'Creato',
202 => 'accettato',
203 => 'non autorevole Informazione ',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Contenuto parziale',
300 => 'Scelte multiple',
301 => 'Spostato in modo permanente',
302 => 'trovato',
303 => 'vedere altri',
304 => 'Non modificato',
305 => 'Usa Proxy',
306 => '(non utilizzato)' ,
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'non autorizzata',
402 => 'pagamento richiesto',
403 => 'Forbidden',
404 => 'non trovato',
405 => 'Metodo non consentito' ,
406 => 'Non accettabile',
407 => 'Autenticazione proxy richiesta' ,
408 => 'Richiesta Timeout',
409 => 'conflitto',
410 => 'finiti',
411 => 'lunghezza desiderata',
412 => 'Condizione preliminare non riuscita',
413 => 'Entità richiesta troppo grande ',
414 => 'Request-URI Too Long',
415 => 'Tipo di supporto non supportato' ,
416 => 'richiesto intervallo Non satisfiable ',
417 => 'L'attesa non riuscita',
500 => 'Internal Server Error' ,
501 => 'Non Implementato',
502 => 'Bad Gateway',
503 => 'Servizio non disponibile',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported ');
ritorno ($ httpStatus [$ statusCode] ) $ httpStatus [$ statusCode]: $ stato [500] ;?
}
}
?>
classe di trasformazione del servizio Web RESTful
Il seguente è un RESTful Web Service classe del gestore SiteRestHandler.php, ereditato quanto sopra forniamo classe base RESTful, la classe è determinata dai parametri della richiesta per determinare se i codici di stato HTTP restituito e formati di dati, ci forniscono esempi di tre formati di dati: "application / json", "application / xml" o "text / html":
codice del file SiteRestHandler.php è il seguente:
Esempi
require_once ( "SimpleRest.php");
require_once ( "Site.php");
Classe SiteRestHandler estende SimpleRest {
getAllSites function () {
$ Sito = new sito ();
$ RawData = $ sito -> getAllSite ();
if (empty ($ rawData)) {
$ StatusCode = 404;
$ RawData = array ( 'errore' => 'Nessun sito trovato!');
} Else {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Questo -> setHttpHeaders ($ requestContentType , $ statusCode);
if (strpos ($ requestContentType, ' application / json')! == false) {
$ Risposta = $ this -> encodeJson ($ rawData);
echo $ risposta;
} Else if (strpos ($ requestContentType , 'text / html')! == False) {
$ Risposta = $ this -> encodeHtml ($ rawData);
echo $ risposta;
} Else if (strpos ($ requestContentType , 'application / xml')! == False) {
$ Risposta = $ this -> encodeXml ($ rawData);
echo $ risposta;
}
}
Funzione pubblica encodeHtml ($ responseData) {
$ HtmlResponse = "<table border = '1'>";
foreach ($ responseData da $ key = > $ value) {
.. $ HtmlResponse = "<tr > <td>" $ key "</ td> <td>" $ valore "</ td> </ tr>" ...;
}
. $ HtmlResponse = "</ table >";
return $ htmlResponse;
}
Funzione pubblica encodeJson ($ responseData) {
$ JsonResponse = json_encode ($ responseData) ;
return $ jsonResponse;
}
Funzione pubblica encodeXml ($ responseData) {
// Creazione di un oggetto SimpleXMLElement
$ Xml = new SimpleXMLElement ( '< sito> </ site> <xml version = "1.0" ??>');
foreach ($ responseData da $ key = > $ value) {
$ Xml -> addChild ($ chiave , $ value);
}
return $ xml -> asXml () ;
}
Funzione pubblica getSite ($ id) {
$ Sito = new sito ();
$ RawData = $ sito -> getSite ($ id);
if (empty ($ rawData)) {
$ StatusCode = 404;
$ RawData = array ( 'errore' => 'Nessun sito trovato!');
} Else {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Questo -> setHttpHeaders ($ requestContentType , $ statusCode);
if (strpos ($ requestContentType, ' application / json')! == false) {
$ Risposta = $ this -> encodeJson ($ rawData);
echo $ risposta;
} Else if (strpos ($ requestContentType , 'text / html')! == False) {
$ Risposta = $ this -> encodeHtml ($ rawData);
echo $ risposta;
} Else if (strpos ($ requestContentType , 'application / xml')! == False) {
$ Risposta = $ this -> encodeXml ($ rawData);
echo $ risposta;
}
}
}
?>
Poi abbiamo attraverso http: // localhost / restexample / sito / list / visita, i risultati di output sono i seguenti:
Client RESTful Web Service
Allora possiamo usare come RESTful client dei servizi Web "Advance Resto client" del suo navigatore web Google Chrome per richiedere i nostri servizi.
Esempi di richiesta http: // localhost / restexample / sito / list / indirizzi, i dati ricevuti è simile aAccept: application / JSON
3 richiesta ID sito w3big (tutorial), indirizzo di accesso è http: // localhost / restexample / site / elenco / 3 /,
scaricare fonte
Il codice utilizzato nell'esempio per fare clic sul pulsante qui sotto per scaricare: