Paul M. Jones | Sapien: Objek Permintaan/Respons untuk PHP 8.1

Saya senang mengumumkan rilis 1.0.0 Sapien. Seperti ext-request pendahulunya, Sapien menyediakan server API (SAPI) Meminta dan Tanggapan objek — tapi di userland, untuk PHP 8.1.

Kelas Sapien tidak memodelkan pesan HTTP per se. Sebagai gantinya, Meminta adalah objek nilai readonly yang terdiri dari objek nilai readonly lainnya yang mewakili superglobal PHP dan struktur data yang berasal dari atau terdiri dari mereka. Demikian pula, Tanggapan adalah pembungkus dan penyangga untuk berbagai fungsi PHP global terkait respons.

Baca lebih lanjut tentang Sapien di http://sapienphp.com.


Proyek Sapien memiliki sejarah panjang, dimulai sekitar 5 tahun yang lalu sebagai ekstensi PECL di C. Itu memiliki versi utama kedua bump sebagai bagian dari RFC ke PHP itu sendiri, yang tidak lulus.

Dalam laporan setelah tindakan tentang RFC yang gagal, saya mencatat pendapat yang berlaku bahwa hal-hal seperti objek permintaan dan respons harus tetap berada di userland. Masalah dengan itu, dalam kasus ext-request, adalah bahwa objek yang tidak dapat diubah hanya dapat dibaca mungkin lebih efektif dalam kode C daripada di PHP userland.

Namun, dengan munculnya PHP 8.1 dan readonly properties, semua fungsionalitas kode C sekarang tersedia di userland PHP. Di satu sisi, itu berarti Sapien adalah versi ketiga dari ext-request, tetapi sepenuhnya di userland.

Sapien banyak menggunakan readonly, menyajikan Meminta nilai objek yang dirancang untuk tidak berubah setelah instantiasi. Dan karena jauh lebih mudah untuk bekerja di PHP daripada di C, ada lebih banyak objek nilai yang disusun ke dalam Meminta daripada di versi C, seperti:

  • Isi, dibangun dari berbagai header terkait konten dan badan permintaan itu sendiri

  • Mengunggah, termasuk yang baru full_path nilai dari $_FILES entri.

  • Url, dihitung dari berbagai $_SERVER nilai-nilai

  • Menerima nilai koleksi objek untuk Jenis, Charset, Pengkodean, dan Bahasa

  • Diteruskan, disuling dari berbagai x-forwarded-* header

  • Diteruskan nilai koleksi objek yang berasal dari Forwarded header

  • OtorisasiSkema nilai objek untuk otorisasi dasar, pembawa, dan intisari

NS Tanggapan pada dasarnya sama seperti di ext-request v1, meskipun logika respons khusus file dan JSON khusus telah diekstraksi ke kelas khusus. Meski begitu, respons generik mampu menangani semua jenis konten, termasuk iterables dan resource

Jadi, jika Anda memulai proyek PHP 8.1 baru, atau memfaktorkan ulang sistem lama ke PHP 8.1, cobalah Sapien, karena objek permintaan dan respons membuat hidup jauh lebih mudah.

Apakah Anda terjebak dengan aplikasi PHP lama? Anda harus membeli buku saya karena ini memberi Anda panduan langkah demi langkah untuk meningkatkan basis kode Anda, sambil tetap menjalankannya sepanjang waktu.