PHP tenang
ISTIRAHAT (bahasa Inggris: Negara Transfer, disebut REST), mengacu pada satu set kendala arsitektur dan prinsip-prinsip.
SISA-gaya desain web API disebut API tenang. Hal ini didefinisikan dari tiga sumber berikut:
- Intuitif singkat sumber daya alamat: URI, misalnya:
http://example.com/resources/
. - sumber daya transmisi: layanan Web menerima kembalinya jenis media internet, seperti: JSON, XML, YAM suka.
- Operasi sumber: metode layanan Web dalam serangkaian permintaan pada sumber daya yang didukung (misalnya: POST, GET, PUT atau DELETE).
tutorial ini kita akan menggunakan PHP (tanpa bingkai) untuk membuat layanan web yang tenang, Anda dapat men-download di akhir artikel untuk menggunakan kode di bagian ini.
Dalam tutorial ini, Anda akan belajar sebagai berikut:
- Buat Webservice tenang.
- Menggunakan PHP asli, tidak tergantung pada kerangka apapun.
- ISTIRAHAT pola URI untuk mengikuti aturan.
- layanan tenang menerima dan format yang dapat dikembalikan JSON, XML dan sebagainya.
- Kode status HTTP yang sesuai respon tergantung pada situasi.
- permintaan demo tajuk.
- Gunakan SISA klien untuk menguji layanan web tenang.
Contoh Webservice tenang
Kode berikut adalah tenang kelas layanan site.php:
contoh
/ *
* Tutorial ini menunjukkan contoh tenang
* Kelas layanan tenang
* /
Kelas Site {
situs $ pribadi = array (
1 => 'TaoBao',
2 => 'Google',
3 => 'w3big',
4 => 'Baidu',
5 => 'Weibo',
6 => 'Sina'
);
fungsi publik getAllSite () {
kembali $ this -> situs;
}
fungsi publik getSite ($ id) {
$ Situs = array ($ id = > ($ this -> situs [$ id]) $ this -> situs [$ id] :? $ this -> situs [1]);
kembali $ situs;
}
}
?>
pemetaan tenang Layanan URI
Tenang Jasa URI harus di set ke alamat sumber visual yang singkat. .htaccess Apache server harus diatur sesuai aturan Rewrite.
contoh ini kita akan menggunakan dua aturan URI:
1, untuk mendapatkan daftar semua situs:
http://localhost/restexample/site/list/
2, menggunakan id untuk situs tertentu, berikut URI untuk mendapatkan id dari 3 situs:
http://localhost/restexample/site/list/3/
aturan konfigurasihtaccess File dari proyek ini adalah sebagai berikut:
# 开启 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]
Tenang Web Service Controller
Dalam file.htaccess, kita akan mendapatkan RestController.php mengajukan sesuai permintaan dengan menetapkan parameter 'view', dengan mendapatkan parameter 'view' yang berbeda untuk mendistribusikan ke metode yang berbeda.file kode RestController.php adalah sebagai berikut:
contoh
require_once ( "SiteRestHandler.php");
$ View = "";
if (isset ($ _GET & # 91; "view" & # 93;))
$ View = $ _GET & # 91 ; "view" & # 93 ;;
/ *
* Kontroler layanan tenang
* Pemetaan URL
* /
switch ($ tampilan) {
kasus "semua":
// Menangani SISA Url / situs / daftar /
$ SiteRestHandler = baru SiteRestHandler ();
$ SiteRestHandler -> getAllSites ();
break;
kasus "tunggal":
// Menangani SISA Url / situs / show / < id> /
$ SiteRestHandler = baru SiteRestHandler ();
$ SiteRestHandler -> getSite ($ _GET [ "id"]);
break;
kasus "":
// 404 - tidak ditemukan;
break;
}
?>
Sederhana Kelas tenang Yayasan
Berikut ini menyediakan kelas dasar tenang untuk pengolahan dalam menanggapi permintaan dari kode status HTTP, file kode SimpleRest.php adalah sebagai berikut:
contoh
/ *
* Sebuah layanan web yang tenang kelas dasar sederhana
* Kami dapat memperpanjang kelas ini berdasarkan permintaan
* /
class SimpleRest {
private $ httpVersion = "HTTP / 1.1 ";
setHttpHeaders fungsi publik ($ contentType, $ statusCode) {
$ StatusMessage = $ this -> getHttpStatusMessage ($ statusCode);
header ($ this -> httpVersion " " $ statusCode .. "" $ statusMessage ..);
header ( "Content-Type:" $ contentType.);
}
fungsi publik getHttpStatusMessage ($ statusCode) {
$ HttpStatus = array (
100 => 'Lanjutkan',
101 => 'Switching Protokol',
200 => 'OK',
201 => 'Dibuat',
202 => 'Diterima',
203 => 'Non-Resmi Informasi ',
204 => 'Tidak ada Konten',
205 => 'Atur Ulang Konten',
206 => 'Content Partial',
300 => 'Beberapa Pilihan',
301 => 'Dipindahkan secara Permanen',
302 => 'Ditemukan',
303 => 'Lihat Lainnya',
304 => 'Tidak Diubah',
305 => 'Gunakan Proxy',
306 => '(tidak digunakan)' ,
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'tidak sah',
402 => 'Diperlukan Pembayaran',
403 => 'Terlarang',
404 => 'Tidak Ditemukan',
405 => 'Metode Tidak Diizinkan' ,
406 => 'Tidak dapat diterima',
407 => 'Proxy Authentication Required' ,
408 => 'Permintaan Timeout',
409 => 'Konflik',
410 => 'Hilang',
411 => 'Panjang Diperlukan',
412 => 'Persyaratan Gagal',
413 => 'Entitas Permintaan Terlalu Besar ',
414 => 'Request-URI Too Long',
415 => 'Tidak Didukung Media Type' ,
416 => 'Diminta Rentang Tidak Satisfiable ',
417 => 'Harapan Gagal',
500 => 'Internal Server Error' ,
501 => 'Tidak Diimplementasikan',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'Versi HTTP Tidak Didukung ');
kembali ($ httpStatus [$ statusCode] ) $ httpStatus [$ statusCode]: $ Status [500] ;?
}
}
?>
Tenang Web kelas pengolahan Layanan
Berikut ini adalah tenang Layanan Web handler kelas SiteRestHandler.php, mewarisi atas kami menyediakan kelas dasar tenang, kelas ditentukan oleh parameter permintaan untuk menentukan apakah kode status kembali HTTP dan format data, kami memberikan contoh tiga format data: "application / json", "aplikasi / xml" atau "text / html":
file kode SiteRestHandler.php adalah sebagai berikut:
contoh
require_once ( "SimpleRest.php");
require_once ( "site.php");
kelas SiteRestHandler meluas SimpleRest {
getAllSites function () {
$ Situs = Site baru ();
$ Data mentah = $ situs -> getAllSite ();
if (empty ($ Data mentah)) {
$ StatusCode = 404;
$ Data mentah = array ( 'error' => 'Tidak ada situs yang ditemukan!');
} Lain {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Ini -> setHttpHeaders ($ requestContentType , $ statusCode);
if (strpos ($ requestContentType, ' application / json')! == false) {
$ Response = $ this -> encodeJson ($ Data mentah);
echo $ respon;
} Lain jika (strpos ($ requestContentType , 'text / html')! == Salah) {
$ Response = $ this -> encodeHtml ($ Data mentah);
echo $ respon;
} Lain jika (strpos ($ requestContentType , 'aplikasi / xml')! == Salah) {
$ Response = $ this -> encodeXml ($ Data mentah);
echo $ respon;
}
}
fungsi publik encodeHtml ($ responseData) {
$ HtmlResponse = "<table border = '1'>";
foreach ($ responseData sebagai $ key = > $ value) {
.. $ HtmlResponse = "<tr > <td>" $ key "</ td> <td>" $ value "</ td> </ tr>" ...;
}
. $ HtmlResponse = "</ table >";
kembali $ htmlResponse;
}
fungsi publik encodeJson ($ responseData) {
$ JsonResponse = json_encode ($ responseData) ;
return $ jsonResponse;
}
fungsi publik encodeXml ($ responseData) {
// Buat SimpleXMLElement objek
$ Xml = new SimpleXMLElement ( '< situs> </ situs> <xml version = "1.0" ??>');
foreach ($ responseData sebagai $ key = > $ value) {
$ Xml -> addChild ($ key , $ value);
}
return $ xml -> asXML () ;
}
fungsi publik getSite ($ id) {
$ Situs = Site baru ();
$ Data mentah = $ situs -> getSite ($ id);
if (empty ($ Data mentah)) {
$ StatusCode = 404;
$ Data mentah = array ( 'error' => 'Tidak ada situs yang ditemukan!');
} Lain {
$ StatusCode = 200;
}
$ RequestContentType = $ _SERVER [ 'HTTP_ACCEPT '];
$ Ini -> setHttpHeaders ($ requestContentType , $ statusCode);
if (strpos ($ requestContentType, ' application / json')! == false) {
$ Response = $ this -> encodeJson ($ Data mentah);
echo $ respon;
} Lain jika (strpos ($ requestContentType , 'text / html')! == Salah) {
$ Response = $ this -> encodeHtml ($ Data mentah);
echo $ respon;
} Lain jika (strpos ($ requestContentType , 'aplikasi / xml')! == Salah) {
$ Response = $ this -> encodeXml ($ Data mentah);
echo $ respon;
}
}
}
?>
Selanjutnya kita melalui http: // localhost / restexample / situs / daftar / kunjungan, hasil output adalah sebagai berikut:
Tenang Web Service Client
Maka kita dapat menggunakan "Muka Istirahat Klien" sebagai tenang klien Layanan Web browser Google Chrome untuk meminta layanan kami.
Contoh permintaan http: // localhost / restexample / situs / daftar / alamat, data yang diterima miripTerima: aplikasi / json
3 permintaan situs id w3big (tutorial), alamat akses http: // localhost / restexample / situs / daftar / 3 /,
sumber download
Kode yang digunakan dalam contoh untuk klik tombol di bawah untuk mendownload: