Entri
Apa itu API JSON-RPC? Ini hanya salah satu jenis API, tetapi juga standar yang jelas, yang mungkin tidak ada dalam artikel ini (ya, akan ada samopis).
Setelah saya mengutak-atik API RESTful untuk sementara waktu dan menjadi sangat marah karenanya, karena betapa sederhananya di luar dan bisa dilipat di dalam, saya pergi ke google untuk mencari pengganti.
Dan saya menemukan artikel tentang API JSON-RPC, dan saya sangat tertarik dengan konsepnya, sehingga saya memutuskan untuk mengimplementasikan sepeda motor saya yang paling sederhana.
Konsep API JSON-RPCGagasan utama standar ini adalah pendekatan berorientasi objek tertentu.
Secara semantik, kueri terlihat seperti ini:
{ "api version": 0.1, "method": "object.method", "params": { "user id": 1234 } }
Dan ini hanya satu permintaan, daya tarik hebat dari API semacam itu adalah mereka dapat digabungkan dengan indah, dan ini memberi kita kesempatan untuk menggunakannya untuk permintaan batch (memuat sesuatu di bagian-bagian).
Artinya, permintaan lengkap mungkin terlihat seperti ini.
{ "api_v": "0.1", "reqs": [ { "name": "my_important_request", "method": "user.kick_out", "params": { "id": "1234", "when": "now", ... } }, ... ] }
Di sini api_v adalah versi API, dan reqs adalah array permintaan. Yang penting, setiap permintaan memiliki metode (class.method), parameter dan nama. Nama memainkan peran besar di sini. Saat Anda menerima respons dari server, Anda dapat merujuk ke hasil kueri dengan namanya. Contoh: Permintaan dengan metode penambahan pengguna harus disebut "user_creating", tetapi ini terserah Anda;)
Mari mulai menulis
Hal pertama yang perlu dilakukan adalah kelas API, dalam kasus saya bahkan lebih sedikit dari yang seharusnya. Beberapa proses terpisah dari saya, tetapi ini tidak mengubah esensi.
<?php
Ada komentar dalam kode, tetapi ini adalah penyimpangan singkat ... Kami menyebut API fungsi yang tidak diketahui, gunakan fungsi __call ajaib untuk tujuan ini. Yaitu, dengan memanggil fungsi "Object.method" dari API ($ api -> {"Object.method"}), ia secara otomatis membagi string menjadi sepasang objek-metode dan menyebutnya. Setelah itu, hasil semua kueri ditambahkan ke satu array dan dikirim kembali dalam format json. Semuanya sederhana.
Kelas
Ini sangat penting - di sini kelas disimpan di folder sumber dan beginilah tampilan kelas
<?php class object{ function method($params){ } }
Nama kelas harus cocok dengan apa yang diminta dalam permintaan, sama dengan nama metode. Segala sesuatu yang lain tidak masalah. Suatu metode dapat melakukan apa saja dan mengembalikan apa pun.
Tetapi kita juga membutuhkan skrip kontrol. Ini adalah skrip yang sama yang akan dipanggil berdasarkan permintaan.
<?php
Apa yang sedang terjadi di sini? Kami mengaktifkan API kami tergantung pada versi yang ditentukan dalam permintaan. Kami memecahkan kode permintaan json dan melalui masing-masing. Kami memanggil metode API ketik "object.method" dan menyimpan hasilnya di bawah nama permintaan ini (ditulis di atas bahwa setiap permintaan memiliki namanya sendiri). Setelah mengeksekusi semua permintaan, kami mengembalikan json array hasil ... Dan, pada dasarnya, itu saja.
Js kecil
Berikut adalah contoh kecil dari fungsi di js yang akan membuat permintaan API jenis ini. Ini ditulis menggunakan jQuery, dan saya dengan liar meminta maaf kepada Anda untuk ini, tetapi lebih mudah untuk menunjukkan esensinya tanpa terlalu banyak.
function api_call(reqs, callback){
Berikut ini adalah permintaan POST sederhana, dan hampir tidak ada yang istimewa, kecuali bahwa dimungkinkan untuk menentukan hanya satu permintaan, bukan array, dan saya juga menyimpan semua respons dalam array yang dimuat, hanya saja, untuk kenyamanan, itu sama sekali tidak diperlukan.
Saya harap ide utamanya jelas bagi Anda. Saya ingin membuat API yang sederhana dan intuitif - saya lakukan. Sebagian besar, saya ingin menunjukkan pendekatan sederhana untuk membuat API multifungsi.
Sampai ketemu lagi ...