menguasai | dev |
---|---|
Plugin Kerangka Bebas Lemak: Menjembatani kode Anda dan REST API eksternal. F3-wcurl bertindak sebagai lapisan abstraksi logis untuk cURL, yang menangani otentikasi dan cache respons sukses.
Plugin Web
bawaan F3 sangat bagus dan mudah untuk menangani permintaan HTTP individual. F3-wcurl membangun implementasi seluruh API jarak jauh di dalam kode Anda.
Seiring berjalannya waktu, saya harus segera membuat alat dan skrip yang memiliki satu tugas penting namun berulang: menangani permintaan, pengaturan, objek, respons CURL, dll. Pada akhirnya, saya terus menyalin fungsi yang sama, memodifikasinya dan men-debug masalah yang sama mengapa ada sesuatu yang tidak berfungsi yang ditulis beberapa bulan lalu .
Meskipun Anda memiliki kontrol dan akses yang besar terhadap opsi cURL, F3-wcurl tidak memaksa Anda untuk melakukannya. Ini memungkinkan fokus pada permintaan itu sendiri, apa yang diubah dan diterima sebagai imbalannya. Sebagai plugin untuk ekosistem F3, secara alami plugin ini memiliki beberapa dependensi keren - Prefab
, Cache
, dan Web
(bukan untuk permintaan cURL itu sendiri).
Kelas F3 dibangun dari susunan asosiatif pengaturan yang relevan. Array dapat diteruskan dari salah satu kode secara langsung, atau dari file INI (diimpor ke F3 sebelum membuat F3-wcurl) dan disimpan di sarang F3.
F3-wcurl menggunakan Prefab dan Cache F3, yang memungkinkan objek wcurl yang sama dipanggil di mana saja dari kode dan pergantian respons cepat.
Secara default, F3-wcurl akan mencari kunci wcurl
di sarang F3, tetapi INI dapat dengan mudah menyimpan pengaturan untuk beberapa implementasi REST API yang berbeda.
$ wcurl = wcurl:: instance ([ $ iniName = ' wcurl ' | $ optionsArray ]);
Struktur array yang cukup sederhana ini mendefinisikan cara kerja wcurl:
nama | jenis | bawaan | keterangan |
---|---|---|---|
akar | rangkaian | batal | Root API jarak jauh, yang digunakan untuk membuat URI permintaan. |
cb_login | rangkaian | batal | Setel fungsi panggilan balik dari kode Anda, yang dapat melakukan autentikasi, yang seharusnya merupakan panggilan balik yang valid untuk call_user_func() |
ttl | bilangan bulat | 60 | Detik, berapa lama untuk menyimpan respons GET dalam cache |
header | susunan | [ ] | cURL array string yang valid ["Header: value", "Another-Header: Value"] |
agen pengguna | rangkaian | Versi F3-wcurl | String agen pengguna |
basicauth | rangkaian | batal | Kirim header Basic Auth, gunakan dalam format username:password |
token kueri | rangkaian | batal | Tambahkan setiap permintaan dengan token URL |
menyandikanJSON | boolean | BENAR | Cuaca membuat serial isi POST sebagai JSON, pengaturan false akan mengirimkan isi sebagai bentuk HTML biasa |
melengkung | susunan | [ ] | Pengaturan CURL RAW Array pengaturan CURL RAW untuk kontrol langsung, dengan key => val di mana key dapat berupa konstanta atau salah satu nama stringnya |
beristirahat | susunan | [ ] | key => val untuk pembantu pembuatan URL (lihat bagian Contoh) |
Untuk menyetel opsi apa pun dari tabel di atas, berikan key => val
array dengan satu atau lebih opsi.
$ wcurl -> setOptions (
[
' useragent ' = > ' F3-wcurl API integration ' ,
' encodeJSON ' = > false ,
' ttl ' = > 300 ,
// etc
]
);
Hanya opsi yang Anda lewati yang akan diperbarui, semua opsi lainnya akan tetap dalam keadaan sebelumnya/default.
Untuk menghapus satu atau lebih pilihan, berikan nama atau daftar array kunci yang ingin Anda atur ulang ke default:
$ wcurl -> clearOptions ([ ' useragent ' , ' ttl ' /*, ... etc */ ]);
Untuk mendapatkan berbagai pilihan yang mewakili keadaan kelas wcurl saat ini:
$ wcurl -> clearOptions ();
Array multidimensi yang dikembalikan harus kompatibel untuk membuat kelas yang sama persis dengan kelas yang diekstraksi.
Akan mengembalikan statistik berapa banyak permintaan yang dieksekusi sejak kelas dibuat, berapa/berapa banyak respons http yang diterima dan berapa banyak yang dilayani dari cache.
$ wcurl -> getStats ();
Fungsi yang didukung saat ini adalah GET, POST, PUT, PATCH dan DELETE. Meskipun akan menambahkan lebih banyak lagi ketika saya menyadari perlunya menerapkannya.
$ response = $ wcurl -> get ( string $ url [, array $ fill = null [, array $ options = null ]] );
Saya menghafal argumen seperti ini.
BENDA TERBANG ANEH:
$ response = $ wcurl ->post( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - Url, Isi, Isi, Opsi
$ response = $ wcurl ->put( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - Url, Isi, Isi, Opsi
$ response = $ wcurl ->patch( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - Url, Isi, Isi, Opsi
$ response = $ wcurl ->delete( string $ url , array $ body = null [, array $ fill = null [, array $ options = null ]] );
UFBO - Url, Isi, Isi, Opsi
Tabel istirahat memiliki dua tujuan yang sama pentingnya:
Saat membuat jalur URL jarak jauh yang panjang, akan lebih mudah untuk mengingatnya dengan kata kunci yang pendek, terutama jika jalur tersebut dipanggil dari beberapa tempat. Sukai allmembers
bukan /lists/members/all/pages
. Terkadang ini juga berisi parameter unik, yang perlu diisi untuk setiap permintaan. Konsep ini adalah salah satu alasan utama mengapa plugin ini ada.
Teruslah membaca.
Cara terbaik adalah dengan menyimpan jalur jarak jauh dalam konfigurasi .ini
. Variabel URL untuk pengisian dibungkus dalam dua %
dari kedua sisi.
TODO: Jadikan karakter bungkus ini dapat dikonfigurasi.
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
atau berikan array key => value
sederhana dengan cepat - array tersebut akan digabungkan dengan konfigurasi sebelumnya
$ wcurl -> setOptions (
' rests ' => [
' allmembers ' => ' /lists/members/all/pages ' ,
' withVariable ' => ' /lists/members/%%memberID%%/pages ' ,
' updateEmail ' => ' /lists/members/%%memberID%%/update '
]
);
Untuk menggunakan rute bernama, berikan namanya, bukan jalur lengkapnya
$ response = $ wcurl -> get ( ' allmembers ' );
Ini akan menyelesaikan ke /lists/members/all/pages
$ response = $ wcurl -> get ( ' withVariable ' , array ( ' memberID ' => ' abc123ID ' ) );
Ini akan diselesaikan ke /lists/members/abc123ID/pages
Atau dalam permintaan POST kita tahu bahwa harus melewati parameter UFBO berikut
$ wcurl -> post ( ' updateEmail ' , // path shorthand to resolve name
[ ' memberID ' => ' abc123ID ' ], // fill this in the path
[ ' email ' => ' [email protected] ' ] // body to send
);
Jika Anda meletakkan semua konfigurasi di file ini
utama Anda, kelas dapat diinisialisasi hanya pada penggunaan pertama yang diperlukan. Yaitu ketika kode Anda memutuskan untuk mengirim get(). Pada saat itu, jika kelas tidak terdaftar di Prefab, maka akan dibangun dari konfigurasi INI persis seperti yang diperlukan.
Untuk daftar lengkap opsi lihat tabel Pilihan Array beberapa gulungan di atas.
[wcurl]
root =http://mysite.api/v1
ttl =3600
cb_login =yourClass::cb_do_login
useragent = Zeus was here
headers = " Header: value " , " Another-Header: Value "
[wcurl.rests]
allmembers =/lists/members/all/pages
withVariable =/lists/members/%%memberID%%/pages
; Using with multiple API's
[apitwo]
root =http://yoursite.io/v2
ttl =60
useragent = Big Falcon Rocket
[apitwo.rests]
getUsers =/lists/members/all/pages
getOneUser =/lists/members/%%memberID%%/pages
$ wcurl -> setLogin ( callback ' yourClass::cb_do_login ' );
Jika ada permintaan yang menghasilkan kode HTTP 401 atau 403, wcurl
memanggil fungsi panggilan balik Login dan kemudian mengulangi permintaan asli. Jika terjadi error lagi maka akan dikembalikan ke hasil fungsi semula. wcurl
menyimpan cookie dalam file sementara yang unik untuk root API. File cookie ini disertakan dalam setiap permintaan.
Panggilan balik harus mengembalikan nilai true, jika login berhasil, jika tidak maka akan gagal mengulangi permintaan secara otomatis setelah autentikasi berhasil.
Catatan! Jika login tidak berhasil, tetapi masih return true
, ini dapat menyebabkan request->login->request->login...
infinitive loop
Contoh fungsi masuk
static function cb_do_login (){
$ wcurl = wcurl:: instance ();
$ login = $ wcurl -> post ( " /login " , array (
' login ' => ' my_user ' ,
' password ' => ' covfefe ' )
);
if ( $ login [ ' status ' ][ ' http_code ' ]== 200 ){
return true ;
}
// or
$ wcurl -> setOptions ( [ ' basicauth ' => " $ user : $ password " ]);
}
Saat memanggil wcurl::instance()
itu dikembalikan seperti kelas tunggal, sehingga di mana pun dalam kode, objek yang sama digunakan. Untuk memaksa instance baru dari kelas, gunakan sesuatu seperti
$ apiTwo = new wcurl ([ $ iniName | $ optionsArray ]);
Dan kemudian $apiTwo
dapat disimpan di sarang F3.
Ada banyak hal yang perlu diperbaiki, namun saat ini saya sedang membuat fitur yang saya perlukan. Jika sesuatu tidak memungkinkan untuk kasus penggunaan Anda, kirimkan masalah atau bahkan PR. Terima kasih kepada pengembang F3 untuk kerangka kerja yang luar biasa ini. Jika Anda mencari sesuatu seperti F3-wcurl, tetapi tidak menggunakannya, pikirkan dua kali - Mengapa Anda belum menggunakan F3?